diff --git a/Makefile b/Makefile
index 5862497e..21b83dc1 100644
--- a/Makefile
+++ b/Makefile
@@ -19,7 +19,7 @@ BUILD_NUMBER=custom
# of a release cycle, as official binaries won't be published.
# PYTHON_MICRO_VERSION is the full version number, without any alpha/beta/rc suffix. (e.g., 3.10.0)
# PYTHON_VER is the major/minor version (e.g., 3.10)
-PYTHON_VERSION=3.13.11
+PYTHON_VERSION=3.13.14
PYTHON_PKG_VERSION=$(PYTHON_VERSION)
PYTHON_MICRO_VERSION=$(shell echo $(PYTHON_VERSION) | grep -Eo "\d+\.\d+\.\d+")
PYTHON_PKG_MICRO_VERSION=$(shell echo $(PYTHON_PKG_VERSION) | grep -Eo "\d+\.\d+\.\d+")
diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch
index dc94847e..41f3bcbd 100644
--- a/patch/Python/Python.patch
+++ b/patch/Python/Python.patch
@@ -1,10 +1,10 @@
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
-index 6347ffb3e11..19259c069d7 100644
+index ff08c7583fc..5f5ff9b4f2b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -2,6 +2,10 @@
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.13.2
+ rev: a27a2e47c7751b639d2b5badf0ef6ff11fee893f # frozen: v0.15.4
hooks:
+ - id: ruff-check
+ name: Run Ruff (lint) on Apple/
@@ -23,7 +23,10 @@ index 6347ffb3e11..19259c069d7 100644
+ files: ^Apple
- id: ruff-format
name: Run Ruff (format) on Doc/
- args: [--check]
+ args: [--exit-non-zero-on-fix]
+diff --git a/Apple/.ruff.toml b/Apple/.ruff.toml
+new file mode 100644
+index 00000000000..4cdc39ebee4
--- /dev/null
+++ b/Apple/.ruff.toml
@@ -0,0 +1,22 @@
@@ -49,9 +52,12 @@ index 6347ffb3e11..19259c069d7 100644
+ "W", # pycodestyle
+ "YTT", # flake8-2020
+]
+diff --git a/Apple/__main__.py b/Apple/__main__.py
+new file mode 100644
+index 00000000000..57c3ccacd5e
--- /dev/null
+++ b/Apple/__main__.py
-@@ -0,0 +1,1111 @@
+@@ -0,0 +1,1150 @@
+#!/usr/bin/env python3
+##########################################################################
+# Apple XCframework build script
@@ -266,8 +272,11 @@ index 6347ffb3e11..19259c069d7 100644
+ return triples
+
+
-+def clean(context: argparse.Namespace, target: str = "all") -> None:
++def clean(context: argparse.Namespace, target: str | None = None) -> None:
+ """The implementation of the "clean" command."""
++ if target is None:
++ target = context.host
++
+ # If we're explicitly targeting the build, there's no platform or
+ # distribution artefacts. If we're cleaning tests, we keep all built
+ # artefacts. Otherwise, the built artefacts must be dirty, so we remove
@@ -409,7 +418,7 @@ index 6347ffb3e11..19259c069d7 100644
+ for name_ver in [
+ "BZip2-1.0.8-2",
+ "libFFI-3.4.7-2",
-+ "OpenSSL-3.0.18-1",
++ "OpenSSL-3.0.19-1",
+ "XZ-5.6.4-2",
+ "mpdecimal-4.0.0-2",
+ "zstd-1.5.7-1",
@@ -470,7 +479,12 @@ index 6347ffb3e11..19259c069d7 100644
+ with group(f"Downloading dependencies ({host})"):
+ if not prefix_dir.exists():
+ prefix_dir.mkdir()
-+ unpack_deps(context.platform, host, prefix_dir, context.cache_dir)
++ cache_dir = (
++ Path(context.cache_dir).resolve()
++ if context.cache_dir
++ else CROSS_BUILD_DIR / "downloads"
++ )
++ unpack_deps(context.platform, host, prefix_dir, cache_dir)
+ else:
+ print("Dependencies already installed")
+
@@ -860,7 +874,7 @@ index 6347ffb3e11..19259c069d7 100644
+ ]:
+ step(context, host=step_host)
+
-+ if host in {"all", "hosts"}:
++ if host == "all":
+ package(context)
+
+
@@ -928,7 +942,7 @@ index 6347ffb3e11..19259c069d7 100644
+ + [
+ "--",
+ "test",
-+ f"--{context.ci_mode}-ci",
++ f"--{context.ci_mode or 'fast'}-ci",
+ "--single-process",
+ "--no-randomize",
+ # Timeout handling requires subprocesses; explicitly setting
@@ -994,7 +1008,7 @@ index 6347ffb3e11..19259c069d7 100644
+ configure_build = subcommands.add_parser(
+ "configure-build", help="Run `configure` for the build Python"
+ )
-+ subcommands.add_parser(
++ make_build = subcommands.add_parser(
+ "make-build", help="Run `make` for the build Python"
+ )
+ configure_host = subcommands.add_parser(
@@ -1050,6 +1064,31 @@ index 6347ffb3e11..19259c069d7 100644
+ ),
+ )
+
++ # --cross-build-dir argument
++ for cmd in [
++ clean,
++ configure_build,
++ make_build,
++ configure_host,
++ make_host,
++ build,
++ package,
++ test,
++ ci,
++ ]:
++ cmd.add_argument(
++ "--cross-build-dir",
++ action="store",
++ default=os.environ.get("CROSS_BUILD_DIR"),
++ dest="cross_build_dir",
++ type=Path,
++ help=(
++ "Path to the cross-build directory "
++ f"(default: {CROSS_BUILD_DIR}). Can also be set "
++ "with the CROSS_BUILD_DIR environment variable."
++ ),
++ )
++
+ # --clean option
+ for cmd in [configure_build, configure_host, build, package, test, ci]:
+ cmd.add_argument(
@@ -1064,7 +1103,7 @@ index 6347ffb3e11..19259c069d7 100644
+ for cmd in [configure_host, build, ci]:
+ cmd.add_argument(
+ "--cache-dir",
-+ default="./cross-build/downloads",
++ default=os.environ.get("CACHE_DIR"),
+ help="The directory to store cached downloads.",
+ )
+
@@ -1131,6 +1170,12 @@ index 6347ffb3e11..19259c069d7 100644
+
+ # Process command line arguments
+ context = parse_args()
++
++ # Set the CROSS_BUILD_DIR if an argument was provided
++ if context.cross_build_dir:
++ global CROSS_BUILD_DIR
++ CROSS_BUILD_DIR = context.cross_build_dir.resolve()
++
+ dispatch: dict[str, Callable] = {
+ "clean": clean,
+ "configure-build": configure_build_python,
@@ -1163,6 +1208,9 @@ index 6347ffb3e11..19259c069d7 100644
+ stream.reconfigure(line_buffering=True)
+
+ main()
+diff --git a/Apple/iOS/README.md b/Apple/iOS/README.md
+new file mode 100644
+index 00000000000..7ee257b5d64
--- /dev/null
+++ b/Apple/iOS/README.md
@@ -0,0 +1,339 @@
@@ -1505,6 +1553,9 @@ index 6347ffb3e11..19259c069d7 100644
+(this will likely be your own name), and plug in a physical device to your
+macOS machine with a USB cable. You should then be able to select your physical
+device from the list of targets in the pulldown in the Xcode titlebar.
+diff --git a/Apple/iOS/Resources/Info.plist.in b/Apple/iOS/Resources/Info.plist.in
+new file mode 100644
+index 00000000000..26ef7a95de4
--- /dev/null
+++ b/Apple/iOS/Resources/Info.plist.in
@@ -0,0 +1,34 @@
@@ -1542,81 +1593,129 @@ index 6347ffb3e11..19259c069d7 100644
+ @IPHONEOS_DEPLOYMENT_TARGET@
+
+
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-ar b/Apple/iOS/Resources/bin/arm64-apple-ios-ar
+new file mode 100755
+index 00000000000..3cf3eb21874
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-ar
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphoneos${IOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-clang b/Apple/iOS/Resources/bin/arm64-apple-ios-clang
+new file mode 100755
+index 00000000000..f50d5b5142f
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-clang
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphoneos${IOS_SDK_VERSION} clang -target arm64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET} "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-clang++ b/Apple/iOS/Resources/bin/arm64-apple-ios-clang++
+new file mode 100755
+index 00000000000..0794731d7dc
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-clang++
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphoneos${IOS_SDK_VERSION} clang++ -target arm64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET} "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-cpp b/Apple/iOS/Resources/bin/arm64-apple-ios-cpp
+new file mode 100755
+index 00000000000..24fa1506bab
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-cpp
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphoneos${IOS_SDK_VERSION} clang -target arm64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET} -E "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-ar b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-ar
+new file mode 100755
+index 00000000000..b836b6db902
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-ar
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-clang b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-clang
+new file mode 100755
+index 00000000000..4891a00876e
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-clang
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} clang -target arm64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-clang++ b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-clang++
+new file mode 100755
+index 00000000000..58b2a5f6f18
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-clang++
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} clang++ -target arm64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-cpp b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-cpp
+new file mode 100755
+index 00000000000..c9df94e8b7c
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-cpp
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} clang -target arm64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET}-simulator -E "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-strip b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-strip
+new file mode 100755
+index 00000000000..fd59d309b73
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-simulator-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} strip -arch arm64 "$@"
+diff --git a/Apple/iOS/Resources/bin/arm64-apple-ios-strip b/Apple/iOS/Resources/bin/arm64-apple-ios-strip
+new file mode 100755
+index 00000000000..75e823a3d02
--- /dev/null
+++ b/Apple/iOS/Resources/bin/arm64-apple-ios-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphoneos${IOS_SDK_VERSION} strip -arch arm64 "$@"
+diff --git a/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-ar b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-ar
+new file mode 100755
+index 00000000000..b836b6db902
--- /dev/null
+++ b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-ar
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-clang b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-clang
+new file mode 100755
+index 00000000000..f4739a7b945
--- /dev/null
+++ b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-clang
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} clang -target x86_64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-clang++ b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-clang++
+new file mode 100755
+index 00000000000..c348ae4c103
--- /dev/null
+++ b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-clang++
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} clang++ -target x86_64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-cpp b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-cpp
+new file mode 100755
+index 00000000000..6d7f8084c9f
--- /dev/null
+++ b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-cpp
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} clang -target x86_64-apple-ios${IPHONEOS_DEPLOYMENT_TARGET}-simulator -E "$@"
+diff --git a/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-strip b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-strip
+new file mode 100755
+index 00000000000..c5cfb289291
--- /dev/null
+++ b/Apple/iOS/Resources/bin/x86_64-apple-ios-simulator-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphonesimulator${IOS_SDK_VERSION} strip -arch x86_64 "$@"
+diff --git a/Apple/iOS/Resources/pyconfig.h b/Apple/iOS/Resources/pyconfig.h
+new file mode 100644
+index 00000000000..4acff2c6051
--- /dev/null
+++ b/Apple/iOS/Resources/pyconfig.h
@@ -0,0 +1,7 @@
@@ -1627,6 +1726,9 @@ index 6347ffb3e11..19259c069d7 100644
+#ifdef __x86_64__
+#include "pyconfig-x86_64.h"
+#endif
+diff --git a/Apple/testbed/Python.xcframework/Info.plist b/Apple/testbed/Python.xcframework/Info.plist
+new file mode 100644
+index 00000000000..0587f4735f7
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/Info.plist
@@ -0,0 +1,136 @@
@@ -1766,6 +1868,9 @@ index 6347ffb3e11..19259c069d7 100644
+ 1.0
+
+
+diff --git a/Apple/testbed/Python.xcframework/build/iOS-dylib-Info-template.plist b/Apple/testbed/Python.xcframework/build/iOS-dylib-Info-template.plist
+new file mode 100644
+index 00000000000..d6caa01c1e4
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/build/iOS-dylib-Info-template.plist
@@ -0,0 +1,26 @@
@@ -1795,6 +1900,9 @@ index 6347ffb3e11..19259c069d7 100644
+ 1
+
+
+diff --git a/Apple/testbed/Python.xcframework/build/tvOS-dylib-Info-template.plist b/Apple/testbed/Python.xcframework/build/tvOS-dylib-Info-template.plist
+new file mode 100644
+index 00000000000..a20d476fa7b
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/build/tvOS-dylib-Info-template.plist
@@ -0,0 +1,26 @@
@@ -1824,6 +1932,9 @@ index 6347ffb3e11..19259c069d7 100644
+ 1
+
+
+diff --git a/Apple/testbed/Python.xcframework/build/utils.sh b/Apple/testbed/Python.xcframework/build/utils.sh
+new file mode 100755
+index 00000000000..2d3b9320b3c
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/build/utils.sh
@@ -0,0 +1,180 @@
@@ -1900,11 +2011,11 @@ index 6347ffb3e11..19259c069d7 100644
+ # If the XCframework has a shared lib folder, then it's a full framework.
+ # Copy both the common and slice-specific part of the lib directory.
+ # Otherwise, it's a single-arch framework; use the "full" lib folder.
++ # Don't include any libpython symlink; that can't be included at runtime
+ if [ -d "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/lib" ]; then
-+ rsync -au --delete "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/lib/" "$CODESIGNING_FOLDER_PATH/python/lib/"
-+ rsync -au "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib-$ARCHS/" "$CODESIGNING_FOLDER_PATH/python/lib/"
++ rsync -au --delete "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/lib/" "$CODESIGNING_FOLDER_PATH/python/lib/" --exclude 'libpython*.dylib'
++ rsync -au "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib-$ARCHS/" "$CODESIGNING_FOLDER_PATH/python/lib/" --exclude 'libpython*.dylib'
+ else
-+ # A single-arch framework will have a libpython symlink; that can't be included at runtime
+ rsync -au --delete "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib/" "$CODESIGNING_FOLDER_PATH/python/lib/" --exclude 'libpython*.dylib'
+ fi
+}
@@ -1998,7 +2109,7 @@ index 6347ffb3e11..19259c069d7 100644
+ shift
+
+ install_stdlib $PYTHON_XCFRAMEWORK_PATH
-+ PYTHON_VER=$(ls -1 "$CODESIGNING_FOLDER_PATH/python/lib")
++ PYTHON_VER=$(ls -1 "$CODESIGNING_FOLDER_PATH/python/lib" | grep -E "^python3\.\d+$")
+ echo "Install Python $PYTHON_VER standard library extension modules..."
+ process_dylibs $PYTHON_XCFRAMEWORK_PATH python/lib/$PYTHON_VER/lib-dynload
+
@@ -2007,6 +2118,9 @@ index 6347ffb3e11..19259c069d7 100644
+ process_dylibs $PYTHON_XCFRAMEWORK_PATH $package_path
+ done
+}
+diff --git a/Apple/testbed/Python.xcframework/build/watchOS-dylib-Info-template.plist b/Apple/testbed/Python.xcframework/build/watchOS-dylib-Info-template.plist
+new file mode 100644
+index 00000000000..6f8c0bc2095
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/build/watchOS-dylib-Info-template.plist
@@ -0,0 +1,26 @@
@@ -2036,6 +2150,9 @@ index 6347ffb3e11..19259c069d7 100644
+ 1
+
+
+diff --git a/Apple/testbed/Python.xcframework/build/xrOS-dylib-Info-template.plist b/Apple/testbed/Python.xcframework/build/xrOS-dylib-Info-template.plist
+new file mode 100644
+index 00000000000..e91673b4fbc
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/build/xrOS-dylib-Info-template.plist
@@ -0,0 +1,30 @@
@@ -2069,6 +2186,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+
+diff --git a/Apple/testbed/Python.xcframework/ios-arm64/README b/Apple/testbed/Python.xcframework/ios-arm64/README
+new file mode 100644
+index 00000000000..c1b076d12cd
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/ios-arm64/README
@@ -0,0 +1,4 @@
@@ -2076,6 +2196,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+It should be used as a target for `--enable-framework` when compiling an iOS on-device
+build for testing purposes.
+diff --git a/Apple/testbed/Python.xcframework/ios-arm64_x86_64-simulator/README b/Apple/testbed/Python.xcframework/ios-arm64_x86_64-simulator/README
+new file mode 100644
+index 00000000000..ae334e5d769
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/ios-arm64_x86_64-simulator/README
@@ -0,0 +1,4 @@
@@ -2083,6 +2206,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+It should be used as a target for `--enable-framework` when compiling an iOS simulator
+build for testing purposes (either x86_64 or ARM64).
+diff --git a/Apple/testbed/Python.xcframework/tvos-arm64/README b/Apple/testbed/Python.xcframework/tvos-arm64/README
+new file mode 100644
+index 00000000000..ebd648d04bd
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/tvos-arm64/README
@@ -0,0 +1,4 @@
@@ -2090,6 +2216,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+It should be used as a target for `--enable-framework` when compiling a tvOS
+on-device build for testing purposes.
+diff --git a/Apple/testbed/Python.xcframework/tvos-arm64_x86_64-simulator/README b/Apple/testbed/Python.xcframework/tvos-arm64_x86_64-simulator/README
+new file mode 100644
+index 00000000000..f8163468d8c
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/tvos-arm64_x86_64-simulator/README
@@ -0,0 +1,4 @@
@@ -2097,6 +2226,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+It should be used as a target for `--enable-framework` when compiling a tvOS
+simulator build for testing purposes (either x86_64 or ARM64).
+diff --git a/Apple/testbed/Python.xcframework/watchos-arm64_32/README b/Apple/testbed/Python.xcframework/watchos-arm64_32/README
+new file mode 100644
+index 00000000000..696af231df3
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/watchos-arm64_32/README
@@ -0,0 +1,4 @@
@@ -2104,6 +2236,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+It should be used as a target for `--enable-framework` when compiling a watchOS on-device
+build for testing purposes.
+diff --git a/Apple/testbed/Python.xcframework/watchos-arm64_x86_64-simulator/README b/Apple/testbed/Python.xcframework/watchos-arm64_x86_64-simulator/README
+new file mode 100644
+index 00000000000..d38e1e98276
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/watchos-arm64_x86_64-simulator/README
@@ -0,0 +1,4 @@
@@ -2111,6 +2246,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+It should be used as a target for `--enable-framework` when compiling a watchOS
+simulator build for testing purposes (either x86_64 or ARM64).
+diff --git a/Apple/testbed/Python.xcframework/xros-arm64-simulator/README b/Apple/testbed/Python.xcframework/xros-arm64-simulator/README
+new file mode 100644
+index 00000000000..7bb0ad4b6ba
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/xros-arm64-simulator/README
@@ -0,0 +1,4 @@
@@ -2118,6 +2256,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+It should be used as a target for `--enable-framework` when compiling an visionOS simulator
+build for testing purposes (either x86_64 or ARM64).
+diff --git a/Apple/testbed/Python.xcframework/xros-arm64/README b/Apple/testbed/Python.xcframework/xros-arm64/README
+new file mode 100644
+index 00000000000..2fc2112e477
--- /dev/null
+++ b/Apple/testbed/Python.xcframework/xros-arm64/README
@@ -0,0 +1,4 @@
@@ -2125,6 +2266,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+It should be used as a target for `--enable-framework` when compiling an visionOS on-device
+build for testing purposes.
+diff --git a/Apple/testbed/Testbed.lldbinit b/Apple/testbed/Testbed.lldbinit
+new file mode 100644
+index 00000000000..4cf00dd0f9d
--- /dev/null
+++ b/Apple/testbed/Testbed.lldbinit
@@ -0,0 +1,4 @@
@@ -2132,6 +2276,9 @@ index 6347ffb3e11..19259c069d7 100644
+process handle SIGUSR1 -n true -p true -s false
+process handle SIGUSR2 -n true -p true -s false
+process handle SIGXFSZ -n true -p true -s false
+diff --git a/Apple/testbed/TestbedTests/TestbedTests.m b/Apple/testbed/TestbedTests/TestbedTests.m
+new file mode 100644
+index 00000000000..cc0d9224042
--- /dev/null
+++ b/Apple/testbed/TestbedTests/TestbedTests.m
@@ -0,0 +1,198 @@
@@ -2333,6 +2480,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+@end
+diff --git a/Apple/testbed/__main__.py b/Apple/testbed/__main__.py
+new file mode 100644
+index 00000000000..3f5b570a195
--- /dev/null
+++ b/Apple/testbed/__main__.py
@@ -0,0 +1,456 @@
@@ -2362,7 +2512,7 @@ index 6347ffb3e11..19259c069d7 100644
+LOG_PREFIX_REGEX = re.compile(
+ r"^\d{4}-\d{2}-\d{2}" # YYYY-MM-DD
+ r"\s+\d+:\d{2}:\d{2}\.\d+\+\d{4}" # HH:MM:SS.ssssss+ZZZZ
-+ r"\s+.*Testbed\[\d+:\w+\]" # Process/thread ID
++ r"\s+.*Testbed\[\d+:\w+\] " # Process/thread ID
+)
+
+
@@ -2792,6 +2942,9 @@ index 6347ffb3e11..19259c069d7 100644
+ for stream in [sys.stdout, sys.stderr]:
+ stream.reconfigure(line_buffering=True)
+ main()
+diff --git a/Apple/testbed/iOSTestbed.xcodeproj/project.pbxproj b/Apple/testbed/iOSTestbed.xcodeproj/project.pbxproj
+new file mode 100644
+index 00000000000..f8835a3bc58
--- /dev/null
+++ b/Apple/testbed/iOSTestbed.xcodeproj/project.pbxproj
@@ -0,0 +1,557 @@
@@ -3352,6 +3505,9 @@ index 6347ffb3e11..19259c069d7 100644
+ };
+ rootObject = 607A660A2B0EFA380010BFC8 /* Project object */;
+}
+diff --git a/Apple/testbed/iOSTestbed.xcodeproj/xcshareddata/xcschemes/iOSTestbed.xcscheme b/Apple/testbed/iOSTestbed.xcodeproj/xcshareddata/xcschemes/iOSTestbed.xcscheme
+new file mode 100644
+index 00000000000..3c330a4152b
--- /dev/null
+++ b/Apple/testbed/iOSTestbed.xcodeproj/xcshareddata/xcschemes/iOSTestbed.xcscheme
@@ -0,0 +1,97 @@
@@ -3452,6 +3608,9 @@ index 6347ffb3e11..19259c069d7 100644
+ revealArchiveInOrganizer = "YES">
+
+
+diff --git a/Apple/testbed/iOSTestbed.xctestplan b/Apple/testbed/iOSTestbed.xctestplan
+new file mode 100644
+index 00000000000..0c4ab9eb2ba
--- /dev/null
+++ b/Apple/testbed/iOSTestbed.xctestplan
@@ -0,0 +1,46 @@
@@ -3501,6 +3660,9 @@ index 6347ffb3e11..19259c069d7 100644
+ ],
+ "version" : 1
+}
+diff --git a/Apple/testbed/iOSTestbed/AppDelegate.h b/Apple/testbed/iOSTestbed/AppDelegate.h
+new file mode 100644
+index 00000000000..f695b3b5efc
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/AppDelegate.h
@@ -0,0 +1,11 @@
@@ -3515,6 +3677,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+@end
+diff --git a/Apple/testbed/iOSTestbed/AppDelegate.m b/Apple/testbed/iOSTestbed/AppDelegate.m
+new file mode 100644
+index 00000000000..e5085399d0c
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/AppDelegate.m
@@ -0,0 +1,19 @@
@@ -3537,6 +3702,9 @@ index 6347ffb3e11..19259c069d7 100644
+}
+
+@end
+diff --git a/Apple/testbed/iOSTestbed/Assets.xcassets/AccentColor.colorset/Contents.json b/Apple/testbed/iOSTestbed/Assets.xcassets/AccentColor.colorset/Contents.json
+new file mode 100644
+index 00000000000..eb878970081
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
@@ -3551,6 +3719,9 @@ index 6347ffb3e11..19259c069d7 100644
+ "version" : 1
+ }
+}
+diff --git a/Apple/testbed/iOSTestbed/Assets.xcassets/AppIcon.appiconset/Contents.json b/Apple/testbed/iOSTestbed/Assets.xcassets/AppIcon.appiconset/Contents.json
+new file mode 100644
+index 00000000000..13613e3ee1a
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,13 @@
@@ -3567,6 +3738,9 @@ index 6347ffb3e11..19259c069d7 100644
+ "version" : 1
+ }
+}
+diff --git a/Apple/testbed/iOSTestbed/Assets.xcassets/Contents.json b/Apple/testbed/iOSTestbed/Assets.xcassets/Contents.json
+new file mode 100644
+index 00000000000..73c00596a7f
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
@@ -3576,6 +3750,9 @@ index 6347ffb3e11..19259c069d7 100644
+ "version" : 1
+ }
+}
+diff --git a/Apple/testbed/iOSTestbed/Base.lproj/LaunchScreen.storyboard b/Apple/testbed/iOSTestbed/Base.lproj/LaunchScreen.storyboard
+new file mode 100644
+index 00000000000..5daafe73a86
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,9 @@
@@ -3588,6 +3765,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+
+diff --git a/Apple/testbed/iOSTestbed/app/README b/Apple/testbed/iOSTestbed/app/README
+new file mode 100644
+index 00000000000..46c0e8e2a29
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/app/README
@@ -0,0 +1,7 @@
@@ -3598,6 +3778,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+When the test suite runs, this folder will be on the PYTHONPATH, and will be the
+working directory for the test suite.
+diff --git a/Apple/testbed/iOSTestbed/app_packages/README b/Apple/testbed/iOSTestbed/app_packages/README
+new file mode 100644
+index 00000000000..02c2beccfbd
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/app_packages/README
@@ -0,0 +1,7 @@
@@ -3608,6 +3791,9 @@ index 6347ffb3e11..19259c069d7 100644
+Framework form.
+
+When the test suite runs, this folder will be on the PYTHONPATH.
+diff --git a/Apple/testbed/iOSTestbed/iOSTestbed-Info.plist b/Apple/testbed/iOSTestbed/iOSTestbed-Info.plist
+new file mode 100644
+index 00000000000..fea45e1fad6
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/iOSTestbed-Info.plist
@@ -0,0 +1,52 @@
@@ -3663,6 +3849,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+
+diff --git a/Apple/testbed/iOSTestbed/main.m b/Apple/testbed/iOSTestbed/main.m
+new file mode 100644
+index 00000000000..e32bd78c9b4
--- /dev/null
+++ b/Apple/testbed/iOSTestbed/main.m
@@ -0,0 +1,16 @@
@@ -3682,6 +3871,9 @@ index 6347ffb3e11..19259c069d7 100644
+ return UIApplicationMain(argc, argv, nil, appDelegateClassName);
+ }
+}
+diff --git a/Apple/testbed/tvOSTestbed.xcodeproj/project.pbxproj b/Apple/testbed/tvOSTestbed.xcodeproj/project.pbxproj
+new file mode 100644
+index 00000000000..85e7047dfb7
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed.xcodeproj/project.pbxproj
@@ -0,0 +1,506 @@
@@ -4191,6 +4383,9 @@ index 6347ffb3e11..19259c069d7 100644
+ };
+ rootObject = EE989E462DCD6E780036B268 /* Project object */;
+}
+diff --git a/Apple/testbed/tvOSTestbed.xcodeproj/xcshareddata/xcschemes/tvOSTestbed.xcscheme b/Apple/testbed/tvOSTestbed.xcodeproj/xcshareddata/xcschemes/tvOSTestbed.xcscheme
+new file mode 100644
+index 00000000000..c3f3f894a1f
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed.xcodeproj/xcshareddata/xcschemes/tvOSTestbed.xcscheme
@@ -0,0 +1,97 @@
@@ -4291,6 +4486,9 @@ index 6347ffb3e11..19259c069d7 100644
+ revealArchiveInOrganizer = "YES">
+
+
+diff --git a/Apple/testbed/tvOSTestbed.xctestplan b/Apple/testbed/tvOSTestbed.xctestplan
+new file mode 100644
+index 00000000000..f996facc178
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed.xctestplan
@@ -0,0 +1,46 @@
@@ -4341,6 +4539,9 @@ index 6347ffb3e11..19259c069d7 100644
+ "version" : 1
+}
\ No newline at end of file
+diff --git a/Apple/testbed/tvOSTestbed/AppDelegate.h b/Apple/testbed/tvOSTestbed/AppDelegate.h
+new file mode 100644
+index 00000000000..112c9ed64b8
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed/AppDelegate.h
@@ -0,0 +1,11 @@
@@ -4355,6 +4556,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+@end
+diff --git a/Apple/testbed/tvOSTestbed/AppDelegate.m b/Apple/testbed/tvOSTestbed/AppDelegate.m
+new file mode 100644
+index 00000000000..bd91fb2d7d6
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed/AppDelegate.m
@@ -0,0 +1,19 @@
@@ -4377,6 +4581,9 @@ index 6347ffb3e11..19259c069d7 100644
+}
+
+@end
+diff --git a/Apple/testbed/tvOSTestbed/Base.lproj/LaunchScreen.storyboard b/Apple/testbed/tvOSTestbed/Base.lproj/LaunchScreen.storyboard
+new file mode 100644
+index 00000000000..660ba53de4f
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,24 @@
@@ -4404,6 +4611,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+
+diff --git a/Apple/testbed/tvOSTestbed/app/README b/Apple/testbed/tvOSTestbed/app/README
+new file mode 100644
+index 00000000000..46c0e8e2a29
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed/app/README
@@ -0,0 +1,7 @@
@@ -4414,6 +4624,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+When the test suite runs, this folder will be on the PYTHONPATH, and will be the
+working directory for the test suite.
+diff --git a/Apple/testbed/tvOSTestbed/app_packages/README b/Apple/testbed/tvOSTestbed/app_packages/README
+new file mode 100644
+index 00000000000..02c2beccfbd
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed/app_packages/README
@@ -0,0 +1,7 @@
@@ -4424,6 +4637,9 @@ index 6347ffb3e11..19259c069d7 100644
+Framework form.
+
+When the test suite runs, this folder will be on the PYTHONPATH.
+diff --git a/Apple/testbed/tvOSTestbed/main.m b/Apple/testbed/tvOSTestbed/main.m
+new file mode 100644
+index 00000000000..d5808fbb933
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed/main.m
@@ -0,0 +1,16 @@
@@ -4443,6 +4659,9 @@ index 6347ffb3e11..19259c069d7 100644
+ return UIApplicationMain(argc, argv, nil, appDelegateClassName);
+ }
+}
+diff --git a/Apple/testbed/tvOSTestbed/tvOSTestbed-Info.plist b/Apple/testbed/tvOSTestbed/tvOSTestbed-Info.plist
+new file mode 100644
+index 00000000000..f08f6098999
--- /dev/null
+++ b/Apple/testbed/tvOSTestbed/tvOSTestbed-Info.plist
@@ -0,0 +1,52 @@
@@ -4498,6 +4717,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+
+diff --git a/Apple/testbed/visionOSTestbed.xcodeproj/project.pbxproj b/Apple/testbed/visionOSTestbed.xcodeproj/project.pbxproj
+new file mode 100644
+index 00000000000..0fd5df716b1
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed.xcodeproj/project.pbxproj
@@ -0,0 +1,558 @@
@@ -5059,6 +5281,9 @@ index 6347ffb3e11..19259c069d7 100644
+ };
+ rootObject = 607A660A2B0EFA380010BFC8 /* Project object */;
+}
+diff --git a/Apple/testbed/visionOSTestbed.xcodeproj/xcshareddata/xcschemes/visionOSTestbed.xcscheme b/Apple/testbed/visionOSTestbed.xcodeproj/xcshareddata/xcschemes/visionOSTestbed.xcscheme
+new file mode 100644
+index 00000000000..b8397ea7cf1
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed.xcodeproj/xcshareddata/xcschemes/visionOSTestbed.xcscheme
@@ -0,0 +1,97 @@
@@ -5159,6 +5384,9 @@ index 6347ffb3e11..19259c069d7 100644
+ revealArchiveInOrganizer = "YES">
+
+
+diff --git a/Apple/testbed/visionOSTestbed.xctestplan b/Apple/testbed/visionOSTestbed.xctestplan
+new file mode 100644
+index 00000000000..73a2be8c22a
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed.xctestplan
@@ -0,0 +1,46 @@
@@ -5209,6 +5437,9 @@ index 6347ffb3e11..19259c069d7 100644
+ "version" : 1
+}
\ No newline at end of file
+diff --git a/Apple/testbed/visionOSTestbed/AppDelegate.h b/Apple/testbed/visionOSTestbed/AppDelegate.h
+new file mode 100644
+index 00000000000..8fe7ec8e64e
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/AppDelegate.h
@@ -0,0 +1,11 @@
@@ -5223,6 +5454,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+@end
+diff --git a/Apple/testbed/visionOSTestbed/AppDelegate.m b/Apple/testbed/visionOSTestbed/AppDelegate.m
+new file mode 100644
+index 00000000000..b3ff14f7255
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/AppDelegate.m
@@ -0,0 +1,19 @@
@@ -5245,6 +5479,9 @@ index 6347ffb3e11..19259c069d7 100644
+}
+
+@end
+diff --git a/Apple/testbed/visionOSTestbed/Assets.xcassets/AccentColor.colorset/Contents.json b/Apple/testbed/visionOSTestbed/Assets.xcassets/AccentColor.colorset/Contents.json
+new file mode 100644
+index 00000000000..eb878970081
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
@@ -5259,6 +5496,9 @@ index 6347ffb3e11..19259c069d7 100644
+ "version" : 1
+ }
+}
+diff --git a/Apple/testbed/visionOSTestbed/Assets.xcassets/AppIcon.appiconset/Contents.json b/Apple/testbed/visionOSTestbed/Assets.xcassets/AppIcon.appiconset/Contents.json
+new file mode 100644
+index 00000000000..13613e3ee1a
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,13 @@
@@ -5275,6 +5515,9 @@ index 6347ffb3e11..19259c069d7 100644
+ "version" : 1
+ }
+}
+diff --git a/Apple/testbed/visionOSTestbed/Assets.xcassets/Contents.json b/Apple/testbed/visionOSTestbed/Assets.xcassets/Contents.json
+new file mode 100644
+index 00000000000..73c00596a7f
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
@@ -5284,6 +5527,9 @@ index 6347ffb3e11..19259c069d7 100644
+ "version" : 1
+ }
+}
+diff --git a/Apple/testbed/visionOSTestbed/app/README b/Apple/testbed/visionOSTestbed/app/README
+new file mode 100644
+index 00000000000..af22c685f87
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/app/README
@@ -0,0 +1,7 @@
@@ -5294,6 +5540,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+When the test suite runs, this folder will be on the PYTHONPATH, and will be the
+working directory for the test suite.
+diff --git a/Apple/testbed/visionOSTestbed/app_packages/README b/Apple/testbed/visionOSTestbed/app_packages/README
+new file mode 100644
+index 00000000000..42d7fdeb813
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/app_packages/README
@@ -0,0 +1,7 @@
@@ -5304,6 +5553,9 @@ index 6347ffb3e11..19259c069d7 100644
+iOS Framework form.
+
+When the test suite runs, this folder will be on the PYTHONPATH.
+diff --git a/Apple/testbed/visionOSTestbed/main.m b/Apple/testbed/visionOSTestbed/main.m
+new file mode 100644
+index 00000000000..2bb491f25c8
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/main.m
@@ -0,0 +1,16 @@
@@ -5323,6 +5575,9 @@ index 6347ffb3e11..19259c069d7 100644
+ return UIApplicationMain(argc, argv, nil, appDelegateClassName);
+ }
+}
+diff --git a/Apple/testbed/visionOSTestbed/visionOSTestbed-Info.plist b/Apple/testbed/visionOSTestbed/visionOSTestbed-Info.plist
+new file mode 100644
+index 00000000000..fce9298555d
--- /dev/null
+++ b/Apple/testbed/visionOSTestbed/visionOSTestbed-Info.plist
@@ -0,0 +1,56 @@
@@ -5382,6 +5637,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+
+
+diff --git a/Apple/tvOS/README.rst b/Apple/tvOS/README.rst
+new file mode 100644
+index 00000000000..1f793252caf
--- /dev/null
+++ b/Apple/tvOS/README.rst
@@ -0,0 +1,108 @@
@@ -5493,6 +5751,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+Using a framework-based Python on tvOS
+======================================
+diff --git a/Apple/tvOS/Resources/Info.plist.in b/Apple/tvOS/Resources/Info.plist.in
+new file mode 100644
+index 00000000000..ab3050804b8
--- /dev/null
+++ b/Apple/tvOS/Resources/Info.plist.in
@@ -0,0 +1,34 @@
@@ -5530,81 +5791,129 @@ index 6347ffb3e11..19259c069d7 100644
+ @TVOS_DEPLOYMENT_TARGET@
+
+
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-ar b/Apple/tvOS/Resources/bin/arm64-apple-tvos-ar
+new file mode 100755
+index 00000000000..e302748a13c
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-ar
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvos${TVOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-clang b/Apple/tvOS/Resources/bin/arm64-apple-tvos-clang
+new file mode 100755
+index 00000000000..7fb6d3d901c
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-clang
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvos${TVOS_SDK_VERSION} clang -target arm64-apple-tvos${TVOS_DEPLOYMENT_TARGET} "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-clang++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-clang++
+new file mode 100755
+index 00000000000..33bfb1367c3
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-clang++
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvos${TVOS_SDK_VERSION} clang++ -target arm64-apple-tvos${TVOS_DEPLOYMENT_TARGET} "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-cpp b/Apple/tvOS/Resources/bin/arm64-apple-tvos-cpp
+new file mode 100755
+index 00000000000..641c1bc8d18
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-cpp
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvos${TVOS_SDK_VERSION} clang -target arm64-apple-tvos${TVOS_DEPLOYMENT_TARGET} -E "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-ar b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-ar
+new file mode 100755
+index 00000000000..87ef5015aae
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-ar
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-clang b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-clang
+new file mode 100755
+index 00000000000..c8719cb0318
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-clang
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} clang -target arm64-apple-tvos${TVOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-clang++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-clang++
+new file mode 100755
+index 00000000000..e3f0e720f7f
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-clang++
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} clang++ -target arm64-apple-tvos${TVOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-cpp b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-cpp
+new file mode 100755
+index 00000000000..f9a37b72a61
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-cpp
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} clang -target arm64-apple-tvos${TVOS_DEPLOYMENT_TARGET}-simulator -E "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-strip b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-strip
+new file mode 100755
+index 00000000000..a8cce95233e
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-simulator-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} strip -arch arm64 "$@"
+diff --git a/Apple/tvOS/Resources/bin/arm64-apple-tvos-strip b/Apple/tvOS/Resources/bin/arm64-apple-tvos-strip
+new file mode 100755
+index 00000000000..ee1d2b95ff1
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/arm64-apple-tvos-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk iphoneos${TVOS_SDK_VERSION} strip -arch arm64 "$@"
+diff --git a/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-ar b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-ar
+new file mode 100755
+index 00000000000..87ef5015aae
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-ar
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-clang b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-clang
+new file mode 100755
+index 00000000000..ea0cc26cbd9
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-clang
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} clang -target x86_64-apple-tvos${TVOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-clang++ b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-clang++
+new file mode 100755
+index 00000000000..f18f3603169
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-clang++
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} clang++ -target x86_64-apple-tvos${TVOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-cpp b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-cpp
+new file mode 100755
+index 00000000000..b98054d1ce2
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-cpp
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} clang -target x86_64-apple-tvos${TVOS_DEPLOYMENT_TARGET}-simulator -E "$@"
+diff --git a/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-strip b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-strip
+new file mode 100755
+index 00000000000..f6a884b4aef
--- /dev/null
+++ b/Apple/tvOS/Resources/bin/x86_64-apple-tvos-simulator-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk appletvsimulator${TVOS_SDK_VERSION} strip -arch x86_64 "$@"
+diff --git a/Apple/tvOS/Resources/pyconfig.h b/Apple/tvOS/Resources/pyconfig.h
+new file mode 100644
+index 00000000000..4acff2c6051
--- /dev/null
+++ b/Apple/tvOS/Resources/pyconfig.h
@@ -0,0 +1,7 @@
@@ -5615,6 +5924,9 @@ index 6347ffb3e11..19259c069d7 100644
+#ifdef __x86_64__
+#include "pyconfig-x86_64.h"
+#endif
+diff --git a/Apple/visionOS/Resources/Info.plist.in b/Apple/visionOS/Resources/Info.plist.in
+new file mode 100644
+index 00000000000..2679440da67
--- /dev/null
+++ b/Apple/visionOS/Resources/Info.plist.in
@@ -0,0 +1,34 @@
@@ -5652,62 +5964,98 @@ index 6347ffb3e11..19259c069d7 100644
+ @XROS_DEPLOYMENT_TARGET@
+
+
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-ar b/Apple/visionOS/Resources/bin/arm64-apple-xros-ar
+new file mode 100755
+index 00000000000..9fd78a205f3
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-ar
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk xros${XROS_SDK_VERSION} ar "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-clang b/Apple/visionOS/Resources/bin/arm64-apple-xros-clang
+new file mode 100755
+index 00000000000..9a1a757cbd0
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-clang
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk xros${XROS_SDK_VERSION} clang -target arm64-apple-xros${XROS_DEPLOYMENT_TARGET} "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-clang++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-clang++
+new file mode 100755
+index 00000000000..f64fcfc11cd
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-clang++
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk xros${XROS_SDK_VERSION} clang++ -target arm64-apple-xros${XROS_DEPLOYMENT_TARGET} "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-cpp b/Apple/visionOS/Resources/bin/arm64-apple-xros-cpp
+new file mode 100755
+index 00000000000..d6492eff052
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-cpp
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk xros${XROS_SDK_VERSION} clang -target arm64-apple-xros${XROS_DEPLOYMENT_TARGET} -E "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-ar b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-ar
+new file mode 100755
+index 00000000000..b202330fb5d
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-ar
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk xrsimulator${XROS_SDK_VERSION} ar "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-clang b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-clang
+new file mode 100755
+index 00000000000..87b0aba0751
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-clang
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk xrsimulator${XROS_SDK_VERSION} clang -target arm64-apple-xros${XROS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-clang++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-clang++
+new file mode 100755
+index 00000000000..c89d48f1cb8
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-clang++
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk xrsimulator${XROS_SDK_VERSION} clang++ -target arm64-apple-xros${XROS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-cpp b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-cpp
+new file mode 100755
+index 00000000000..ee11e018ae0
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-cpp
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk xrsimulator${XROS_SDK_VERSION} clang -target arm64-apple-xros${XROS_DEPLOYMENT_TARGET}-simulator -E "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-strip b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-strip
+new file mode 100644
+index 00000000000..376aff61a23
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-simulator-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk xrsimulator${XROS_SDK_VERSION} strip -arch arm64 "$@"
+diff --git a/Apple/visionOS/Resources/bin/arm64-apple-xros-strip b/Apple/visionOS/Resources/bin/arm64-apple-xros-strip
+new file mode 100644
+index 00000000000..2de3ba5d31c
--- /dev/null
+++ b/Apple/visionOS/Resources/bin/arm64-apple-xros-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk xros${XROS_SDK_VERSION} strip -arch arm64 "$@"
+diff --git a/Apple/visionOS/Resources/pyconfig.h b/Apple/visionOS/Resources/pyconfig.h
+new file mode 100644
+index 00000000000..2a433078400
--- /dev/null
+++ b/Apple/visionOS/Resources/pyconfig.h
@@ -0,0 +1,3 @@
+#ifdef __arm64__
+#include "pyconfig-arm64.h"
+#endif
+diff --git a/Apple/watchOS/README.rst b/Apple/watchOS/README.rst
+new file mode 100644
+index 00000000000..35221478452
--- /dev/null
+++ b/Apple/watchOS/README.rst
@@ -0,0 +1,108 @@
@@ -5819,6 +6167,9 @@ index 6347ffb3e11..19259c069d7 100644
+
+Using a framework-based Python on watchOS
+======================================
+diff --git a/Apple/watchOS/Resources/Info.plist.in b/Apple/watchOS/Resources/Info.plist.in
+new file mode 100644
+index 00000000000..e83ddfd2a43
--- /dev/null
+++ b/Apple/watchOS/Resources/Info.plist.in
@@ -0,0 +1,34 @@
@@ -5856,81 +6207,129 @@ index 6347ffb3e11..19259c069d7 100644
+ @WATCHOS_DEPLOYMENT_TARGET@
+
+
+diff --git a/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-ar b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-ar
+new file mode 100755
+index 00000000000..dda2b211bd5
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-ar
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-clang b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-clang
+new file mode 100755
+index 00000000000..fe834d3efe4
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-clang
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} clang -target arm64-apple-watchos${WATCHOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-clang++ b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-clang++
+new file mode 100755
+index 00000000000..757f3a26d8f
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-clang++
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} clang++ -target arm64-apple-watchos${WATCHOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-cpp b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-cpp
+new file mode 100755
+index 00000000000..fdb57d9e010
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-cpp
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchsimulator clang -target arm64-apple-watchos${WATCHOS_DEPLOYMENT_TARGET}-simulator -E "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-strip b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-strip
+new file mode 100755
+index 00000000000..e28e3f7597a
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64-apple-watchos-simulator-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} strip -arch arm64 "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64-apple-watchos-strip b/Apple/watchOS/Resources/bin/arm64-apple-watchos-strip
+new file mode 100755
+index 00000000000..efe5a1260ad
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64-apple-watchos-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk watchos${WATCHOS_SDK_VERSION} strip -arch arm64 "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-ar b/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-ar
+new file mode 100755
+index 00000000000..029f9a32073
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-ar
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchos${WATCHOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-clang b/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-clang
+new file mode 100755
+index 00000000000..285036d4010
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-clang
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchos${WATCHOS_SDK_VERSION} clang -target arm64_32-apple-watchos${WATCHOS_DEPLOYMENT_TARGET} "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-clang++ b/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-clang++
+new file mode 100755
+index 00000000000..c8f60ebec51
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-clang++
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchos${WATCHOS_SDK_VERSION} clang++ -target arm64_32-apple-watchos${WATCHOS_DEPLOYMENT_TARGET} "$@"
+diff --git a/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-cpp b/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-cpp
+new file mode 100755
+index 00000000000..b411fc25aa4
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/arm64_32-apple-watchos-cpp
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchos${WATCHOS_SDK_VERSION} clang -target arm64_32-apple-watchos${WATCHOS_DEPLOYMENT_TARGET} -E "$@"
+diff --git a/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-ar b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-ar
+new file mode 100755
+index 00000000000..dda2b211bd5
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-ar
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} ar "$@"
+diff --git a/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-clang b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-clang
+new file mode 100755
+index 00000000000..4776b9b5348
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-clang
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} clang -target x86_64-apple-watchos${WATCHOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-clang++ b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-clang++
+new file mode 100755
+index 00000000000..e9b0c5f4b87
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-clang++
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} clang++ -target x86_64-apple-watchos${WATCHOS_DEPLOYMENT_TARGET}-simulator "$@"
+diff --git a/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-cpp b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-cpp
+new file mode 100755
+index 00000000000..d3b821c5f7f
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-cpp
@@ -0,0 +1,2 @@
+#!/bin/bash
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} clang -target x86_64-apple-watchos${WATCHOS_DEPLOYMENT_TARGET}-simulator -E "$@"
+diff --git a/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-strip b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-strip
+new file mode 100755
+index 00000000000..105c78281f9
--- /dev/null
+++ b/Apple/watchOS/Resources/bin/x86_64-apple-watchos-simulator-strip
@@ -0,0 +1,2 @@
+#!/bin/sh
+xcrun --sdk watchsimulator${WATCHOS_SDK_VERSION} strip -arch x86_64 "$@"
+diff --git a/Apple/watchOS/Resources/pyconfig.h b/Apple/watchOS/Resources/pyconfig.h
+new file mode 100644
+index 00000000000..f842b987b2e
--- /dev/null
+++ b/Apple/watchOS/Resources/pyconfig.h
@@ -0,0 +1,11 @@
@@ -6202,7 +6601,7 @@ index 9921fd6114b..4ed18f4938c 100644
+file next to ``mymodule.so``, and the privacy manifest will be installed into
+the required location when the binary module is converted into a framework.
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
-index 80651dc64ce..8a8f3e95505 100644
+index 7fc1181f25a..7cbcccef334 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -380,9 +380,9 @@
@@ -6232,7 +6631,7 @@ index 117bf06cb01..87611a6d03f 100644
def find_library(name):
possible = ['lib%s.dylib' % name,
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
-index 41f538acb03..02fc9b9daf3 100644
+index 0741f62ee83..6799a1f744f 100644
--- a/Lib/importlib/_bootstrap_external.py
+++ b/Lib/importlib/_bootstrap_external.py
@@ -52,7 +52,7 @@
@@ -6425,7 +6824,7 @@ index 041dca113a5..3dedc828524 100644
def joinuser(*args):
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
-index 885f0092b53..0e04efb25ce 100644
+index 3a8c7434d37..8ca02d8e1a1 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -75,7 +75,7 @@
@@ -6438,7 +6837,7 @@ index 885f0092b53..0e04efb25ce 100644
if _mswindows:
import _winapi
diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py
-index f7bd675bb3b..98ee0cf234c 100644
+index 43edebce347..dd6acc0fd9f 100644
--- a/Lib/sysconfig/__init__.py
+++ b/Lib/sysconfig/__init__.py
@@ -23,6 +23,9 @@
@@ -6460,7 +6859,7 @@ index f7bd675bb3b..98ee0cf234c 100644
return None
def joinuser(*args):
-@@ -680,6 +683,18 @@
+@@ -688,6 +691,18 @@
release = get_config_vars().get("IPHONEOS_DEPLOYMENT_TARGET", "13.0")
osname = sys.platform
machine = sys.implementation._multiarch
@@ -6480,10 +6879,10 @@ index f7bd675bb3b..98ee0cf234c 100644
import _osx_support
osname, release, machine = _osx_support.get_platform_osx(
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
-index 22ab655507a..368100eeb29 100644
+index 6749fad35a6..fe6530400b6 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
-@@ -6840,9 +6840,9 @@
+@@ -6844,9 +6844,9 @@
self.assertEqual(dt_orig, dt_rt)
def test_type_check_in_subinterp(self):
@@ -6496,10 +6895,10 @@ index 22ab655507a..368100eeb29 100644
else:
extension_loader = "ExtensionFileLoader"
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
-index 4605938b875..cc65b3d63dc 100644
+index 737ce94a120..bf7579bedc8 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
-@@ -64,6 +64,7 @@
+@@ -65,6 +65,7 @@
"force_not_colorized_test_class",
"make_clean_env",
"BrokenIter",
@@ -6507,7 +6906,7 @@ index 4605938b875..cc65b3d63dc 100644
]
-@@ -582,7 +583,7 @@
+@@ -593,7 +594,7 @@
is_android = sys.platform == "android"
@@ -6516,7 +6915,7 @@ index 4605938b875..cc65b3d63dc 100644
unix_shell = '/system/bin/sh' if is_android else '/bin/sh'
else:
unix_shell = None
-@@ -592,7 +593,7 @@
+@@ -603,7 +604,7 @@
is_emscripten = sys.platform == "emscripten"
is_wasi = sys.platform == "wasi"
@@ -6525,7 +6924,7 @@ index 4605938b875..cc65b3d63dc 100644
is_apple = is_apple_mobile or sys.platform == "darwin"
has_fork_support = hasattr(os, "fork") and not (
-@@ -1330,6 +1331,8 @@
+@@ -1341,6 +1342,8 @@
_opcode.ENABLE_SPECIALIZATION, "requires specialization")(test)
@@ -6597,10 +6996,10 @@ index 0f62f9eb200..2ca356606b2 100644
self.run_server(socketserver.ThreadingUnixDatagramServer,
socketserver.DatagramRequestHandler,
diff --git a/Lib/test/test_webbrowser.py b/Lib/test/test_webbrowser.py
-index 4fcbc5c2e59..851bd6e8f3c 100644
+index 135f116d46b..c756e8e0ba7 100644
--- a/Lib/test/test_webbrowser.py
+++ b/Lib/test/test_webbrowser.py
-@@ -234,7 +234,8 @@
+@@ -252,7 +252,8 @@
arguments=[f'openURL({URL},new-tab)'])
@@ -6611,10 +7010,10 @@ index 4fcbc5c2e59..851bd6e8f3c 100644
def _obj_ref(self, *args):
# Construct a string representation of the arguments that can be used
diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py
-index 2f9555ad60d..249756ba4de 100755
+index be033d707a9..8e47e6576fe 100755
--- a/Lib/webbrowser.py
+++ b/Lib/webbrowser.py
-@@ -489,7 +489,8 @@
+@@ -500,7 +500,8 @@
# OS X can use below Unix support (but we prefer using the OS X
# specific stuff)
@@ -6624,7 +7023,7 @@ index 2f9555ad60d..249756ba4de 100755
register("iosbrowser", None, IOSBrowser(), preferred=True)
if sys.platform == "serenityos":
-@@ -616,9 +617,10 @@
+@@ -629,9 +630,10 @@
return not rc
#
@@ -6638,7 +7037,7 @@ index 2f9555ad60d..249756ba4de 100755
if objc:
# If objc exists, we know ctypes is also importable.
diff --git a/Makefile.pre.in b/Makefile.pre.in
-index a7dc9709d62..304a9f6fc3a 100644
+index 8589a28b726..b807f6dcb05 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -202,6 +202,12 @@
@@ -6673,7 +7072,7 @@ index a7dc9709d62..304a9f6fc3a 100644
$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(BINDIR)
for file in $(srcdir)/$(RESSRCDIR)/bin/* ; do \
$(INSTALL) -m $(EXEMODE) $$file $(DESTDIR)$(BINDIR); \
-@@ -2976,10 +2985,10 @@
+@@ -2975,10 +2984,10 @@
-find build -type f -a ! -name '*.gc??' -exec rm -f {} ';'
-rm -f Include/pydtrace_probes.h
-rm -f profile-gen-stamp
@@ -6688,7 +7087,7 @@ index a7dc9709d62..304a9f6fc3a 100644
.PHONY: profile-removal
profile-removal:
-@@ -3005,7 +3014,7 @@
+@@ -3012,7 +3021,7 @@
config.cache config.log pyconfig.h Modules/config.c
-rm -rf build platform
-rm -rf $(PYTHONFRAMEWORKDIR)
@@ -6757,7 +7156,7 @@ index 1bb6a05dc11..49febd56a37 100755
none--*)
# None (no kernel, i.e. freestanding / bare metal),
diff --git a/configure b/configure
-index 901a26c9602..508d01f1b7e 100755
+index 0df47513085..cf32adf89e9 100755
--- a/configure
+++ b/configure
@@ -979,6 +979,10 @@
@@ -7178,7 +7577,7 @@ index 901a26c9602..508d01f1b7e 100755
LDLIBRARY='libpython$(LDVERSION).dylib'
;;
AIX*)
-@@ -12975,7 +13201,7 @@
+@@ -13063,7 +13289,7 @@
BLDSHARED="$LDSHARED"
fi
;;
@@ -7187,7 +7586,7 @@ index 901a26c9602..508d01f1b7e 100755
LDSHARED='$(CC) -dynamiclib -F . -framework $(PYTHONFRAMEWORK)'
LDCXXSHARED='$(CXX) -dynamiclib -F . -framework $(PYTHONFRAMEWORK)'
BLDSHARED="$LDSHARED"
-@@ -13108,7 +13334,7 @@
+@@ -13196,7 +13422,7 @@
Linux-android*) LINKFORSHARED="-pie -Xlinker -export-dynamic";;
Linux*|GNU*) LINKFORSHARED="-Xlinker -export-dynamic";;
# -u libsys_s pulls in all symbols in libsys
@@ -7196,7 +7595,7 @@ index 901a26c9602..508d01f1b7e 100755
LINKFORSHARED="$extra_undefs -framework CoreFoundation"
# Issue #18075: the default maximum stack size (8MBytes) is too
-@@ -13132,7 +13358,7 @@
+@@ -13220,7 +13446,7 @@
LINKFORSHARED="$LINKFORSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
fi
LINKFORSHARED="$LINKFORSHARED"
@@ -7205,7 +7604,7 @@ index 901a26c9602..508d01f1b7e 100755
LINKFORSHARED="-Wl,-stack_size,$stack_size $LINKFORSHARED "'$(PYTHONFRAMEWORKDIR)/$(PYTHONFRAMEWORK)'
fi
;;
-@@ -14728,7 +14954,7 @@
+@@ -14816,7 +15042,7 @@
ctypes_malloc_closure=yes
;; #(
@@ -7214,9 +7613,9 @@ index 901a26c9602..508d01f1b7e 100755
ctypes_malloc_closure=yes
;; #(
-@@ -18197,12 +18423,6 @@
+@@ -18279,12 +18505,6 @@
then :
- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h
+ printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h
-fi
-ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv"
@@ -7227,7 +7626,7 @@ index 901a26c9602..508d01f1b7e 100755
fi
ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero"
if test "x$ac_cv_func_explicit_bzero" = xyes
-@@ -18263,18 +18483,6 @@
+@@ -18345,18 +18565,6 @@
then :
printf "%s\n" "#define HAVE_FEXECVE 1" >>confdefs.h
@@ -7246,7 +7645,7 @@ index 901a26c9602..508d01f1b7e 100755
fi
ac_fn_c_check_func "$LINENO" "fpathconf" "ac_cv_func_fpathconf"
if test "x$ac_cv_func_fpathconf" = xyes
-@@ -18707,24 +18915,6 @@
+@@ -18783,24 +18991,6 @@
then :
printf "%s\n" "#define HAVE_POSIX_OPENPT 1" >>confdefs.h
@@ -7271,7 +7670,7 @@ index 901a26c9602..508d01f1b7e 100755
fi
ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread"
if test "x$ac_cv_func_pread" = xyes
-@@ -19013,12 +19203,6 @@
+@@ -19089,12 +19279,6 @@
then :
printf "%s\n" "#define HAVE_SIGACTION 1" >>confdefs.h
@@ -7284,7 +7683,7 @@ index 901a26c9602..508d01f1b7e 100755
fi
ac_fn_c_check_func "$LINENO" "sigfillset" "ac_cv_func_sigfillset"
if test "x$ac_cv_func_sigfillset" = xyes
-@@ -19287,11 +19471,11 @@
+@@ -19363,11 +19547,11 @@
fi
@@ -7295,10 +7694,10 @@ index 901a26c9602..508d01f1b7e 100755
# raise an error if used at runtime. Force these symbols off.
-if test "$ac_sys_system" != "iOS" ; then
+if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "tvOS" -a "$ac_sys_system" != "visionOS" -a "$ac_sys_system" != "watchOS" ; then
- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy"
- if test "x$ac_cv_func_getentropy" = xyes
+ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3"
+ if test "x$ac_cv_func_dup3" = xyes
then :
-@@ -19313,6 +19497,53 @@
+@@ -19401,6 +19585,53 @@
fi
@@ -7352,7 +7751,7 @@ index 901a26c9602..508d01f1b7e 100755
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
if test ${ac_cv_c_undeclared_builtin_options+y}
-@@ -22135,7 +22366,8 @@
+@@ -22223,7 +22454,8 @@
# check for openpty, login_tty, and forkpty
@@ -7362,7 +7761,7 @@ index 901a26c9602..508d01f1b7e 100755
for ac_func in openpty
do :
-@@ -22231,7 +22463,7 @@
+@@ -22319,7 +22551,7 @@
fi
done
@@ -7371,7 +7770,7 @@ index 901a26c9602..508d01f1b7e 100755
printf %s "checking for library containing login_tty... " >&6; }
if test ${ac_cv_search_login_tty+y}
then :
-@@ -22388,6 +22620,7 @@
+@@ -22476,6 +22708,7 @@
fi
done
@@ -7379,7 +7778,7 @@ index 901a26c9602..508d01f1b7e 100755
# check for long file support functions
ac_fn_c_check_func "$LINENO" "fseek64" "ac_cv_func_fseek64"
-@@ -22634,10 +22867,10 @@
+@@ -22722,10 +22955,10 @@
done
@@ -7392,7 +7791,7 @@ index 901a26c9602..508d01f1b7e 100755
then
for ac_func in clock_settime
-@@ -22923,7 +23156,7 @@
+@@ -23011,7 +23244,7 @@
if test "$cross_compiling" = yes
then :
@@ -7401,7 +7800,7 @@ index 901a26c9602..508d01f1b7e 100755
ac_cv_buggy_getaddrinfo="no"
elif test "${enable_ipv6+set}" = set; then
ac_cv_buggy_getaddrinfo="no -- configured with --(en|dis)able-ipv6"
-@@ -24869,8 +25102,8 @@
+@@ -24957,8 +25190,8 @@
LIBPYTHON="\$(BLDLIBRARY)"
fi
@@ -7412,7 +7811,7 @@ index 901a26c9602..508d01f1b7e 100755
MODULE_DEPS_SHARED="$MODULE_DEPS_SHARED \$(PYTHONFRAMEWORKDIR)/\$(PYTHONFRAMEWORK)"
fi
-@@ -27518,7 +27751,7 @@
+@@ -27606,7 +27839,7 @@
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for device files" >&5
printf "%s\n" "$as_me: checking for device files" >&6;}
@@ -7421,7 +7820,7 @@ index 901a26c9602..508d01f1b7e 100755
ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no
else
-@@ -27951,7 +28184,7 @@
+@@ -28039,7 +28272,7 @@
with_ensurepip=no ;; #(
WASI) :
with_ensurepip=no ;; #(
@@ -7430,7 +7829,7 @@ index 901a26c9602..508d01f1b7e 100755
with_ensurepip=no ;; #(
*) :
with_ensurepip=upgrade
-@@ -28970,7 +29203,7 @@
+@@ -29058,7 +29291,7 @@
;; #(
Darwin) :
;; #(
@@ -7439,7 +7838,7 @@ index 901a26c9602..508d01f1b7e 100755
-@@ -32734,7 +32967,10 @@
+@@ -32822,7 +33055,10 @@
"Mac/PythonLauncher/Makefile") CONFIG_FILES="$CONFIG_FILES Mac/PythonLauncher/Makefile" ;;
"Mac/Resources/framework/Info.plist") CONFIG_FILES="$CONFIG_FILES Mac/Resources/framework/Info.plist" ;;
"Mac/Resources/app/Info.plist") CONFIG_FILES="$CONFIG_FILES Mac/Resources/app/Info.plist" ;;
@@ -7452,7 +7851,7 @@ index 901a26c9602..508d01f1b7e 100755
"Misc/python.pc") CONFIG_FILES="$CONFIG_FILES Misc/python.pc" ;;
"Misc/python-embed.pc") CONFIG_FILES="$CONFIG_FILES Misc/python-embed.pc" ;;
diff --git a/configure.ac b/configure.ac
-index 597a44b331a..5109db2f48f 100644
+index a016a439c6c..698553b31d6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -330,6 +330,15 @@
@@ -7865,7 +8264,7 @@ index 597a44b331a..5109db2f48f 100644
LDLIBRARY='libpython$(LDVERSION).dylib'
;;
AIX*)
-@@ -3486,7 +3686,7 @@
+@@ -3511,7 +3711,7 @@
BLDSHARED="$LDSHARED"
fi
;;
@@ -7874,7 +8273,7 @@ index 597a44b331a..5109db2f48f 100644
LDSHARED='$(CC) -dynamiclib -F . -framework $(PYTHONFRAMEWORK)'
LDCXXSHARED='$(CXX) -dynamiclib -F . -framework $(PYTHONFRAMEWORK)'
BLDSHARED="$LDSHARED"
-@@ -3610,7 +3810,7 @@
+@@ -3635,7 +3835,7 @@
Linux-android*) LINKFORSHARED="-pie -Xlinker -export-dynamic";;
Linux*|GNU*) LINKFORSHARED="-Xlinker -export-dynamic";;
# -u libsys_s pulls in all symbols in libsys
@@ -7883,7 +8282,7 @@ index 597a44b331a..5109db2f48f 100644
LINKFORSHARED="$extra_undefs -framework CoreFoundation"
# Issue #18075: the default maximum stack size (8MBytes) is too
-@@ -3634,7 +3834,7 @@
+@@ -3659,7 +3859,7 @@
LINKFORSHARED="$LINKFORSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
fi
LINKFORSHARED="$LINKFORSHARED"
@@ -7892,7 +8291,7 @@ index 597a44b331a..5109db2f48f 100644
LINKFORSHARED="-Wl,-stack_size,$stack_size $LINKFORSHARED "'$(PYTHONFRAMEWORKDIR)/$(PYTHONFRAMEWORK)'
fi
;;
-@@ -4106,7 +4306,7 @@
+@@ -4131,7 +4331,7 @@
dnl when do we need USING_APPLE_OS_LIBFFI?
ctypes_malloc_closure=yes
],
@@ -7901,25 +8300,25 @@ index 597a44b331a..5109db2f48f 100644
ctypes_malloc_closure=yes
],
[sunos5], [AS_VAR_APPEND([LIBFFI_LIBS], [" -mimpure-text"])]
-@@ -5217,9 +5417,9 @@
+@@ -5242,9 +5442,9 @@
# checks for library functions
AC_CHECK_FUNCS([ \
accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \
-- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \
-+ copy_file_range ctermid dup dup3 explicit_bzero explicit_memset \
+- copy_file_range ctermid dup execv explicit_bzero explicit_memset \
++ copy_file_range ctermid dup explicit_bzero explicit_memset \
faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \
- fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \
+ fpathconf fstatat ftime ftruncate futimens futimes futimesat \
gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \
getgrnam_r getgrouplist gethostname getitimer getloadavg getlogin getlogin_r \
getpeername getpgid getpid getppid getpriority _getpty \
-@@ -5227,15 +5427,14 @@
+@@ -5252,15 +5452,14 @@
getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \
lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \
mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \
-- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \
+- plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \
- posix_spawn_file_actions_addclosefrom_np \
-+ pipe2 plock poll posix_fadvise posix_fallocate posix_openpt \
++ plock poll posix_fadvise posix_fallocate posix_openpt \
pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \
pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \
rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \
@@ -7931,7 +8330,7 @@ index 597a44b331a..5109db2f48f 100644
sigfillset siginterrupt sigpending sigrelse sigtimedwait sigwait \
sigwaitinfo snprintf splice strftime strlcpy strsignal symlinkat sync \
sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile \
-@@ -5250,12 +5449,20 @@
+@@ -5275,14 +5474,22 @@
AC_CHECK_FUNCS([lchmod])
fi
@@ -7941,21 +8340,22 @@ index 597a44b331a..5109db2f48f 100644
# header definition prevents usage - autoconf doesn't use the headers), or
# raise an error if used at runtime. Force these symbols off.
-if test "$ac_sys_system" != "iOS" ; then
-- AC_CHECK_FUNCS([getentropy getgroups system])
+if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "tvOS" -a "$ac_sys_system" != "visionOS" -a "$ac_sys_system" != "watchOS" ; then
-+ AC_CHECK_FUNCS([ getentropy getgroups system ])
-+fi
-+
+ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system])
+ fi
+
+# tvOS/watchOS have some additional methods that can be found, but not used.
+if test "$ac_sys_system" != "tvOS" -a "$ac_sys_system" != "watchOS" ; then
+ AC_CHECK_FUNCS([ \
+ execv fork fork1 posix_spawn posix_spawnp posix_spawn_file_actions_addclosefrom_np \
+ sigaltstack \
+ ])
- fi
-
++fi
++
AC_CHECK_DECL([dirfd],
-@@ -5518,20 +5725,22 @@
+ [AC_DEFINE([HAVE_DIRFD], [1],
+ [Define if you have the 'dirfd' function or macro.])],
+@@ -5543,20 +5750,22 @@
[@%:@include ])
# check for openpty, login_tty, and forkpty
@@ -7992,7 +8392,7 @@ index 597a44b331a..5109db2f48f 100644
# check for long file support functions
AC_CHECK_FUNCS([fseek64 fseeko fstatvfs ftell64 ftello statvfs])
-@@ -5570,10 +5779,10 @@
+@@ -5595,10 +5804,10 @@
])
])
@@ -8005,7 +8405,7 @@ index 597a44b331a..5109db2f48f 100644
then
AC_CHECK_FUNCS([clock_settime], [], [
AC_CHECK_LIB([rt], [clock_settime], [
-@@ -5731,7 +5940,7 @@
+@@ -5756,7 +5965,7 @@
[ac_cv_buggy_getaddrinfo=no],
[ac_cv_buggy_getaddrinfo=yes],
[
@@ -8014,7 +8414,7 @@ index 597a44b331a..5109db2f48f 100644
ac_cv_buggy_getaddrinfo="no"
elif test "${enable_ipv6+set}" = set; then
ac_cv_buggy_getaddrinfo="no -- configured with --(en|dis)able-ipv6"
-@@ -6322,8 +6531,8 @@
+@@ -6347,8 +6556,8 @@
LIBPYTHON="\$(BLDLIBRARY)"
fi
@@ -8025,7 +8425,7 @@ index 597a44b331a..5109db2f48f 100644
MODULE_DEPS_SHARED="$MODULE_DEPS_SHARED \$(PYTHONFRAMEWORKDIR)/\$(PYTHONFRAMEWORK)"
fi
-@@ -6931,7 +7140,7 @@
+@@ -6956,7 +7165,7 @@
dnl NOTE: Inform user how to proceed with files when cross compiling.
dnl Some cross-compile builds are predictable; they won't ever
dnl have /dev/ptmx or /dev/ptc, so we can set them explicitly.
@@ -8034,7 +8434,7 @@ index 597a44b331a..5109db2f48f 100644
ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no
else
-@@ -7188,7 +7397,7 @@
+@@ -7213,7 +7422,7 @@
AS_CASE([$ac_sys_system],
[Emscripten], [with_ensurepip=no],
[WASI], [with_ensurepip=no],
@@ -8043,7 +8443,7 @@ index 597a44b331a..5109db2f48f 100644
[with_ensurepip=upgrade]
)
])
-@@ -7596,7 +7805,7 @@
+@@ -7621,7 +7830,7 @@
[VxWorks*], [PY_STDLIB_MOD_SET_NA([_scproxy], [termios], [grp])],
dnl The _scproxy module is available on macOS
[Darwin], [],