summaryrefslogtreecommitdiff
path: root/lang/python39
diff options
context:
space:
mode:
authoradam <adam@pkgsrc.org>2020-12-08 14:30:40 +0000
committeradam <adam@pkgsrc.org>2020-12-08 14:30:40 +0000
commitd6c93ad9ec776821e81d5a0fa91472ad2ffa0aa3 (patch)
tree0326026a7a85372db375ad3c9fa5ddde3640283a /lang/python39
parent2c8a7b5c6c52e98b03ef499c465c9c7407ce2ae5 (diff)
downloadpkgsrc-d6c93ad9ec776821e81d5a0fa91472ad2ffa0aa3.tar.gz
python39: updated to 3.9.1
Python 3.9.1 final Core and Builtins bpo-42576: types.GenericAlias will now raise a TypeError when attempting to initialize with a keyword argument. Previously, this would cause the interpreter to crash if the interpreter was compiled with debug symbols. This does not affect interpreters compiled for release. Patch by Ken Jin. Library bpo-5054: CGIHTTPRequestHandler.run_cgi() HTTP_ACCEPT improperly parsed. Replace the special purpose getallmatchingheaders with generic get_all method and add relevant tests. bpo-17735: inspect.findsource() now raises OSError instead of IndexError when co_lineno of a code object is greater than the file length. This can happen, for example, when a file is edited after it was imported. bpo-42116: Fix handling of trailing comments by inspect.getsource(). bpo-42487: ChainMap.__iter__ no longer calls __getitem__ on underlying maps bpo-42482: TracebackException no longer holds a reference to the exception’s traceback object. Consequently, instances of TracebackException for equivalent but non-equal exceptions now compare as equal. bpo-42406: We fixed an issue in pickle.whichmodule in which importing multiprocessing could change the how pickle identifies which module an object belongs to, potentially breaking the unpickling of those objects. bpo-34215: Clarify the error message for asyncio.IncompleteReadError when expected is None. bpo-12800: Extracting a symlink from a tarball should succeed and overwrite the symlink if it already exists. The fix is to remove the existing file or symlink before extraction. Based on patch by Chris AtLee, Jeffrey Kintscher, and Senthil Kumaran. Tests bpo-41473: Reenable test_gdb on gdb 9.2 and newer: https://bugzilla.redhat.com/show_bug.cgi?id=1866884 bug is fixed in gdb 10.1. bpo-42553: Fix test_asyncio.test_call_later() race condition: don’t measure asyncio performance in the call_later() unit test. The test failed randomly on the CI. macOS bpo-41116: If no explicit macOS SDK was specified, setup.py should check for Tcl and TK frameworks in /Library/Frameworks; the previous commit inadvertently broke that test. bpo-42504: Fix build on macOS Big Sur when MACOSX_DEPLOYMENT_TARGET=11 IDLE bpo-42508: Keep IDLE running on macOS. Remove obsolete workaround that prevented running files with shortcuts when using new universal2 installers built on macOS 11.
Diffstat (limited to 'lang/python39')
-rw-r--r--lang/python39/Makefile12
-rw-r--r--lang/python39/PLIST6
-rw-r--r--lang/python39/dist.mk4
-rw-r--r--lang/python39/distinfo36
-rw-r--r--lang/python39/patches/patch-Lib___osx__support.py81
-rw-r--r--lang/python39/patches/patch-Lib_ctypes_macholib_dyld.py35
-rw-r--r--lang/python39/patches/patch-Lib_ctypes_test_test__macholib.py36
-rw-r--r--lang/python39/patches/patch-Lib_distutils_tests_test__build__ext.py13
-rw-r--r--lang/python39/patches/patch-Lib_test_test__bytes.py15
-rw-r--r--lang/python39/patches/patch-Lib_test_test__platform.py16
-rw-r--r--lang/python39/patches/patch-Lib_test_test__unicode.py21
-rw-r--r--lang/python39/patches/patch-Mac_BuildScript_build-installer.py69
-rw-r--r--lang/python39/patches/patch-Mac_Tools_pythonw.c44
-rw-r--r--lang/python39/patches/patch-Modules___ctypes_callbacks.c76
-rw-r--r--lang/python39/patches/patch-Modules___ctypes_callproc.c190
-rw-r--r--lang/python39/patches/patch-Modules___ctypes_ctypes.h22
-rw-r--r--lang/python39/patches/patch-Modules___ctypes_malloc__closure.c37
-rw-r--r--lang/python39/patches/patch-Modules___decimal_libmpdec_mpdecimal.h16
-rw-r--r--lang/python39/patches/patch-Modules_getpath.c19
-rw-r--r--lang/python39/patches/patch-Modules_posixmodule.c1365
-rw-r--r--lang/python39/patches/patch-Modules_timemodule.c322
-rw-r--r--lang/python39/patches/patch-Python_bootstrap__hash.c73
-rw-r--r--lang/python39/patches/patch-Python_pytime.c73
-rw-r--r--lang/python39/patches/patch-configure119
-rw-r--r--lang/python39/patches/patch-configure.ac82
-rw-r--r--lang/python39/patches/patch-pyconfig.h.in16
-rw-r--r--lang/python39/patches/patch-setup.py170
27 files changed, 50 insertions, 2918 deletions
diff --git a/lang/python39/Makefile b/lang/python39/Makefile
index 4c84385917f..decf99a5518 100644
--- a/lang/python39/Makefile
+++ b/lang/python39/Makefile
@@ -1,9 +1,8 @@
-# $NetBSD: Makefile,v 1.5 2020/12/07 13:14:39 nia Exp $
+# $NetBSD: Makefile,v 1.6 2020/12/08 14:30:40 adam Exp $
.include "dist.mk"
PKGNAME= python39-${PY_DISTVERSION}
-PKGREVISION= 1
CATEGORIES= lang python
MAINTAINER= pkgsrc-users@NetBSD.org
@@ -65,17 +64,10 @@ PY_PLATNAME= ${LOWER_OPSYS}${OS_VERSION:C/\..*//}
.endif
PLIST_SUBST+= PY_PLATNAME=${PY_PLATNAME:Q}
-# ossaudiodev is only available on x86 for the following platforms
-PLIST_VARS+= oss
-.if (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64") && \
- (${PY_PLATNAME} == "linux" || ${OPSYS} == "FreeBSD")
-PLIST.oss= yes
-.endif
-
# For Xcode 5 and up, we need to search the SDK path for headers, otherwise
# certain modules will not be built.
.if ${OPSYS} == "Darwin" && exists(${OSX_SDK_PATH:Q}/usr/include)
-CFLAGS+= -I${OSX_SDK_PATH:Q}/usr/include
+CFLAGS+= -I${OSX_SDK_PATH:Q}/usr/include
.endif
PLIST_VARS+= nis
diff --git a/lang/python39/PLIST b/lang/python39/PLIST
index 1e13c9344d9..9ad767520e3 100644
--- a/lang/python39/PLIST
+++ b/lang/python39/PLIST
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.1 2020/10/10 20:19:47 adam Exp $
+@comment $NetBSD: PLIST,v 1.2 2020/12/08 14:30:40 adam Exp $
bin/2to3-${PY_VER_SUFFIX}
bin/pydoc${PY_VER_SUFFIX}
bin/python${PY_VER_SUFFIX}
@@ -1419,7 +1419,6 @@ lib/python${PY_VER_SUFFIX}/ensurepip/__main__.pyo
lib/python${PY_VER_SUFFIX}/ensurepip/_bundled/__init__.py
lib/python${PY_VER_SUFFIX}/ensurepip/_bundled/__init__.pyc
lib/python${PY_VER_SUFFIX}/ensurepip/_bundled/__init__.pyo
-lib/python${PY_VER_SUFFIX}/ensurepip/_bundled/pip-20.2.1-py2.py3-none-any.whl
lib/python${PY_VER_SUFFIX}/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl
lib/python${PY_VER_SUFFIX}/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl
lib/python${PY_VER_SUFFIX}/ensurepip/_uninstall.py
@@ -3281,6 +3280,9 @@ lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_events.pyo
lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_futures.py
lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_futures.pyc
lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_futures.pyo
+lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_futures2.py
+lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_futures2.pyc
+lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_futures2.pyo
lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_locks.py
lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_locks.pyc
lib/python${PY_VER_SUFFIX}/test/test_asyncio/test_locks.pyo
diff --git a/lang/python39/dist.mk b/lang/python39/dist.mk
index c7e2f434bb7..15bc0fb5469 100644
--- a/lang/python39/dist.mk
+++ b/lang/python39/dist.mk
@@ -1,6 +1,6 @@
-# $NetBSD: dist.mk,v 1.1 2020/10/10 20:19:47 adam Exp $
+# $NetBSD: dist.mk,v 1.2 2020/12/08 14:30:40 adam Exp $
-PY_DISTVERSION= 3.9.0
+PY_DISTVERSION= 3.9.1
DISTNAME= Python-${PY_DISTVERSION}
EXTRACT_SUFX= .tar.xz
DISTINFO_FILE= ${.CURDIR}/../../lang/python39/distinfo
diff --git a/lang/python39/distinfo b/lang/python39/distinfo
index 595b4a2893f..6ad43035559 100644
--- a/lang/python39/distinfo
+++ b/lang/python39/distinfo
@@ -1,42 +1,22 @@
-$NetBSD: distinfo,v 1.4 2020/11/19 16:29:42 bsiegert Exp $
+$NetBSD: distinfo,v 1.5 2020/12/08 14:30:40 adam Exp $
-SHA1 (Python-3.9.0.tar.xz) = ff1fc8c37d5d4b09ec3bf0d84f3e5b97745c6704
-RMD160 (Python-3.9.0.tar.xz) = 822fd1ea11f3ca303a08317f6db61f2a1e03e5ef
-SHA512 (Python-3.9.0.tar.xz) = b141039c9701a8cb0d15cd11a279153077524af4d0599e7d2c7279d4c18d05fda06b33ef82342d875de996c7117b7dc6eb154dc3669d38a1efa99801aeec6c5e
-Size (Python-3.9.0.tar.xz) = 18866140 bytes
-SHA1 (patch-Lib___osx__support.py) = 4ccccb81381cd7bf4a8bbc3e376d1234cf2266d5
-SHA1 (patch-Lib_ctypes_macholib_dyld.py) = d7f3e0c63d6926db253fbe923dd97995478d528c
-SHA1 (patch-Lib_ctypes_test_test__macholib.py) = bd887357759975b7a497c4079bc730e9c578ceed
+SHA1 (Python-3.9.1.tar.xz) = 77f4105846f6740297e50d7535a42c02d6b8e7db
+RMD160 (Python-3.9.1.tar.xz) = 59e056f957252a03c83ce892ac0ef85a274fce58
+SHA512 (Python-3.9.1.tar.xz) = b90029d6825751685983e9dcf0e0ec9e46f18e6c7d37b0dd7a245a94316f8c0090308ad7c2b2b49ed2514b0b909177231dd5bcad03031bf4624e37136fcf8019
+Size (Python-3.9.1.tar.xz) = 18897104 bytes
SHA1 (patch-Lib_ctypes_util.py) = 032cc99ebad93ddddfd89073c60424a952e3faa3
SHA1 (patch-Lib_distutils_command_install.py) = 6fc6f5d918b7581fc62cd0fe55857ee932c3a341
SHA1 (patch-Lib_distutils_sysconfig.py) = 6822eafb4dfded86d7f7353831816aeb8119e6cf
-SHA1 (patch-Lib_distutils_tests_test__build__ext.py) = 145a0f01b3602c582e033081a35d4d86245575f9
SHA1 (patch-Lib_distutils_unixccompiler.py) = 2e65a8dd5dd3fe25957206c062106fa7a6fc4e69
SHA1 (patch-Lib_lib2to3_pgen2_driver.py) = 5d6dab14197f27363394ff1aeee22a8ced8026d2
SHA1 (patch-Lib_sysconfig.py) = a4f009ed73ebbd9d9c4bf7e12b7981182ed8fd7c
-SHA1 (patch-Lib_test_test__bytes.py) = 72559fdcb09f2c0b0c7b62649c249775d359d72e
-SHA1 (patch-Lib_test_test__platform.py) = 36311733729ac95159b3177dc0c16e6f4aa2f2b9
-SHA1 (patch-Lib_test_test__unicode.py) = 14fe4dd1011dbe262459f735a643774e0d38c99e
-SHA1 (patch-Mac_BuildScript_build-installer.py) = 24641c70facfded736ccc2be069d0e2ae63f63fd
-SHA1 (patch-Mac_Tools_pythonw.c) = fe128efe942853f0825c1a1fa17842201716dfdf
SHA1 (patch-Makefile.pre.in) = d42f9f5bca1dd663f64122dc95b49111452fe6e8
-SHA1 (patch-Modules___ctypes_callbacks.c) = 95750090d396a647fc12f7f7fad8c591ca4dcdec
-SHA1 (patch-Modules___ctypes_callproc.c) = 86f27c466a67ebf72d863febece33aa8b1f9f719
-SHA1 (patch-Modules___ctypes_ctypes.h) = 641c0af4d550c9140549ce2f2df6239c2c954a06
-SHA1 (patch-Modules___ctypes_malloc__closure.c) = 7e8f491ce66acb6d07e8830ee881edbf0aaac538
-SHA1 (patch-Modules___decimal_libmpdec_mpdecimal.h) = 8d302abacc5737fe7620d4738fff6c5c3ed387c7
SHA1 (patch-Modules___zoneinfo.c) = b1df24fe935cd357670a6d9f41245ab04f2015e8
-SHA1 (patch-Modules_getpath.c) = d7114d21d7d9c7167fad259b115cb02e4153c531
SHA1 (patch-Modules_makesetup) = a06786eebffadecedba5e3a50a9785fb47613567
SHA1 (patch-Modules_nismodule.c) = 1bafe9b06359586d027a77011b103877590d947d
-SHA1 (patch-Modules_posixmodule.c) = c592ef4ebe650f672a15ff9887cbeed2ca73b666
SHA1 (patch-Modules_socketmodule.c) = 02c447f980a08e2185df78d2f13373574f414304
SHA1 (patch-Modules_socketmodule.h) = 61fe96a79d4ccf3e7768eb79dd7e29a50a85328b
-SHA1 (patch-Modules_timemodule.c) = 8c8e9e43b6d165c1a7df6142a6bcd430003ed165
-SHA1 (patch-Python_bootstrap__hash.c) = cbc2839675182a344591ba672187b166f166499b
-SHA1 (patch-Python_pytime.c) = 1bb39b7060c1f337562208dc6611672eaf2f586b
SHA1 (patch-Python_thread__pthread.h) = fb81eaa604b4ed7c1b64c3f4731d58a8aee257be
-SHA1 (patch-configure) = 371a65a2cb10fe7709d30a16358b48bc2e0a4aa6
-SHA1 (patch-configure.ac) = 4ce75ef922e015adf095cb481c829b11c0454efe
-SHA1 (patch-pyconfig.h.in) = 7c1c997c089f882fbd334b81c04a03dbaebb2c41
-SHA1 (patch-setup.py) = ab1a7cb97fb8718d21f07f8c896b7de660189c67
+SHA1 (patch-configure) = 2339ccb9041171f304286b2ee3cf711c7569a7a7
+SHA1 (patch-pyconfig.h.in) = 2f06af7358690b46eaff404226b898962b049a0e
+SHA1 (patch-setup.py) = 0ea2e4183f7c11ff893ca302aafe8bb9bea80d6c
diff --git a/lang/python39/patches/patch-Lib___osx__support.py b/lang/python39/patches/patch-Lib___osx__support.py
deleted file mode 100644
index cc9c6c410cc..00000000000
--- a/lang/python39/patches/patch-Lib___osx__support.py
+++ /dev/null
@@ -1,81 +0,0 @@
-$NetBSD: patch-Lib___osx__support.py,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Lib/_osx_support.py.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Lib/_osx_support.py
-@@ -110,6 +110,26 @@ def _get_system_version():
-
- return _SYSTEM_VERSION
-
-+_SYSTEM_VERSION_TUPLE = None
-+def _get_system_version_tuple():
-+ """
-+ Return the macOS system version as a tuple
-+
-+ The return value is safe to use to compare
-+ two version numbers.
-+ """
-+ global _SYSTEM_VERSION_TUPLE
-+ if _SYSTEM_VERSION_TUPLE is None:
-+ osx_version = _get_system_version()
-+ if osx_version:
-+ try:
-+ _SYSTEM_VERSION_TUPLE = tuple(int(i) for i in osx_version.split('.'))
-+ except ValueError:
-+ _SYSTEM_VERSION_TUPLE = ()
-+
-+ return _SYSTEM_VERSION_TUPLE
-+
-+
- def _remove_original_values(_config_vars):
- """Remove original unmodified values for testing"""
- # This is needed for higher-level cross-platform tests of get_platform.
-@@ -132,14 +152,18 @@ def _supports_universal_builds():
- # builds, in particular -isysroot and -arch arguments to the compiler. This
- # is in support of allowing 10.4 universal builds to run on 10.3.x systems.
-
-- osx_version = _get_system_version()
-- if osx_version:
-- try:
-- osx_version = tuple(int(i) for i in osx_version.split('.'))
-- except ValueError:
-- osx_version = ''
-+ osx_version = _get_system_version_tuple()
- return bool(osx_version >= (10, 4)) if osx_version else False
-
-+def _supports_arm64_builds():
-+ """Returns True if arm64 builds are supported on this system"""
-+ # There are two sets of systems supporting macOS/arm64 builds:
-+ # 1. macOS 11 and later, unconditionally
-+ # 2. macOS 10.15 with Xcode 12.2 or later
-+ # For now the second category is ignored.
-+ osx_version = _get_system_version_tuple()
-+ return osx_version >= (11, 0) if osx_version else False
-+
-
- def _find_appropriate_compiler(_config_vars):
- """Find appropriate C compiler for extension module builds"""
-@@ -331,6 +355,12 @@ def compiler_fixup(compiler_so, cc_args)
- except ValueError:
- break
-
-+ elif not _supports_arm64_builds():
-+ # Look for "-arch arm64" and drop that
-+ for idx in range(len(compiler_so)):
-+ if compiler_so[idx] == '-arch' and compiler_so[idx+1] == "arm64":
-+ del compiler_so[idx:idx+2]
-+
- if 'ARCHFLAGS' in os.environ and not stripArch:
- # User specified different -arch flags in the environ,
- # see also distutils.sysconfig
-@@ -481,6 +511,8 @@ def get_platform_osx(_config_vars, osnam
-
- if len(archs) == 1:
- machine = archs[0]
-+ elif archs == ('arm64', 'x86_64'):
-+ machine = 'universal2'
- elif archs == ('i386', 'ppc'):
- machine = 'fat'
- elif archs == ('i386', 'x86_64'):
diff --git a/lang/python39/patches/patch-Lib_ctypes_macholib_dyld.py b/lang/python39/patches/patch-Lib_ctypes_macholib_dyld.py
deleted file mode 100644
index a4f2d2acb1e..00000000000
--- a/lang/python39/patches/patch-Lib_ctypes_macholib_dyld.py
+++ /dev/null
@@ -1,35 +0,0 @@
-$NetBSD: patch-Lib_ctypes_macholib_dyld.py,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Lib/ctypes/macholib/dyld.py.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Lib/ctypes/macholib/dyld.py
-@@ -6,6 +6,11 @@ import os
- from ctypes.macholib.framework import framework_info
- from ctypes.macholib.dylib import dylib_info
- from itertools import *
-+try:
-+ from _ctypes import _dyld_shared_cache_contains_path
-+except ImportError:
-+ def _dyld_shared_cache_contains_path(*args):
-+ raise NotImplementedError
-
- __all__ = [
- 'dyld_find', 'framework_find',
-@@ -122,8 +127,15 @@ def dyld_find(name, executable_path=None
- dyld_executable_path_search(name, executable_path),
- dyld_default_search(name, env),
- ), env):
-+
- if os.path.isfile(path):
- return path
-+ try:
-+ if _dyld_shared_cache_contains_path(path):
-+ return path
-+ except NotImplementedError:
-+ pass
-+
- raise ValueError("dylib %s could not be found" % (name,))
-
- def framework_find(fn, executable_path=None, env=None):
diff --git a/lang/python39/patches/patch-Lib_ctypes_test_test__macholib.py b/lang/python39/patches/patch-Lib_ctypes_test_test__macholib.py
deleted file mode 100644
index b41064bb036..00000000000
--- a/lang/python39/patches/patch-Lib_ctypes_test_test__macholib.py
+++ /dev/null
@@ -1,36 +0,0 @@
-$NetBSD: patch-Lib_ctypes_test_test__macholib.py,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Lib/ctypes/test/test_macholib.py.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Lib/ctypes/test/test_macholib.py
-@@ -45,19 +45,22 @@ def find_lib(name):
- class MachOTest(unittest.TestCase):
- @unittest.skipUnless(sys.platform == "darwin", 'OSX-specific test')
- def test_find(self):
--
-- self.assertEqual(find_lib('pthread'),
-- '/usr/lib/libSystem.B.dylib')
-+ # On Mac OS 11, system dylibs are only present in the shared cache,
-+ # so symlinks like libpthread.dylib -> libSystem.B.dylib will not
-+ # be resolved by dyld_find
-+ self.assertIn(find_lib('pthread'),
-+ ('/usr/lib/libSystem.B.dylib', '/usr/lib/libpthread.dylib'))
-
- result = find_lib('z')
- # Issue #21093: dyld default search path includes $HOME/lib and
- # /usr/local/lib before /usr/lib, which caused test failures if
- # a local copy of libz exists in one of them. Now ignore the head
- # of the path.
-- self.assertRegex(result, r".*/lib/libz\..*.*\.dylib")
-+ self.assertRegex(result, r".*/lib/libz.*\.dylib")
-
-- self.assertEqual(find_lib('IOKit'),
-- '/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit')
-+ self.assertIn(find_lib('IOKit'),
-+ ('/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit',
-+ '/System/Library/Frameworks/IOKit.framework/IOKit'))
-
- if __name__ == "__main__":
- unittest.main()
diff --git a/lang/python39/patches/patch-Lib_distutils_tests_test__build__ext.py b/lang/python39/patches/patch-Lib_distutils_tests_test__build__ext.py
deleted file mode 100644
index 2a1fd4adc22..00000000000
--- a/lang/python39/patches/patch-Lib_distutils_tests_test__build__ext.py
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-Lib_distutils_tests_test__build__ext.py,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
---- Lib/distutils/tests/test_build_ext.py.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Lib/distutils/tests/test_build_ext.py
-@@ -492,7 +492,7 @@ class BuildExtTestCase(TempdirManager,
- # format the target value as defined in the Apple
- # Availability Macros. We can't use the macro names since
- # at least one value we test with will not exist yet.
-- if target[1] < 10:
-+ if target[:2] < (10, 10):
- # for 10.1 through 10.9.x -> "10n0"
- target = '%02d%01d0' % target
- else:
diff --git a/lang/python39/patches/patch-Lib_test_test__bytes.py b/lang/python39/patches/patch-Lib_test_test__bytes.py
deleted file mode 100644
index 5ad794d926b..00000000000
--- a/lang/python39/patches/patch-Lib_test_test__bytes.py
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD: patch-Lib_test_test__bytes.py,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Lib/test/test_bytes.py.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Lib/test/test_bytes.py
-@@ -1034,6 +1034,7 @@ class BytesTest(BaseBytesTest, unittest.
- c_char_p)
-
- PyBytes_FromFormat = pythonapi.PyBytes_FromFormat
-+ PyBytes_FromFormat.argtypes = (c_char_p,)
- PyBytes_FromFormat.restype = py_object
-
- # basic tests
diff --git a/lang/python39/patches/patch-Lib_test_test__platform.py b/lang/python39/patches/patch-Lib_test_test__platform.py
deleted file mode 100644
index 7778305ed3f..00000000000
--- a/lang/python39/patches/patch-Lib_test_test__platform.py
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD: patch-Lib_test_test__platform.py,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Lib/test/test_platform.py.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Lib/test/test_platform.py
-@@ -245,7 +245,7 @@ class PlatformTest(unittest.TestCase):
- self.assertEqual(res[1], ('', '', ''))
-
- if sys.byteorder == 'little':
-- self.assertIn(res[2], ('i386', 'x86_64'))
-+ self.assertIn(res[2], ('i386', 'x86_64', 'arm64'))
- else:
- self.assertEqual(res[2], 'PowerPC')
-
diff --git a/lang/python39/patches/patch-Lib_test_test__unicode.py b/lang/python39/patches/patch-Lib_test_test__unicode.py
deleted file mode 100644
index b139805ea64..00000000000
--- a/lang/python39/patches/patch-Lib_test_test__unicode.py
+++ /dev/null
@@ -1,21 +0,0 @@
-$NetBSD: patch-Lib_test_test__unicode.py,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Lib/test/test_unicode.py.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Lib/test/test_unicode.py
-@@ -2523,11 +2523,13 @@ class CAPITest(unittest.TestCase):
- def test_from_format(self):
- support.import_module('ctypes')
- from ctypes import (
-+ c_char_p,
- pythonapi, py_object, sizeof,
- c_int, c_long, c_longlong, c_ssize_t,
- c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p)
- name = "PyUnicode_FromFormat"
- _PyUnicode_FromFormat = getattr(pythonapi, name)
-+ _PyUnicode_FromFormat.argtypes = (c_char_p,)
- _PyUnicode_FromFormat.restype = py_object
-
- def PyUnicode_FromFormat(format, *args):
diff --git a/lang/python39/patches/patch-Mac_BuildScript_build-installer.py b/lang/python39/patches/patch-Mac_BuildScript_build-installer.py
deleted file mode 100644
index 0b2539090c8..00000000000
--- a/lang/python39/patches/patch-Mac_BuildScript_build-installer.py
+++ /dev/null
@@ -1,69 +0,0 @@
-$NetBSD: patch-Mac_BuildScript_build-installer.py,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Mac/BuildScript/build-installer.py.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Mac/BuildScript/build-installer.py
-@@ -116,7 +116,8 @@ WORKDIR = "/tmp/_py"
- DEPSRC = os.path.join(WORKDIR, 'third-party')
- DEPSRC = os.path.expanduser('~/Universal/other-sources')
-
--universal_opts_map = { '32-bit': ('i386', 'ppc',),
-+universal_opts_map = { 'universal2': ('arm64', 'x86_64'),
-+ '32-bit': ('i386', 'ppc',),
- '64-bit': ('x86_64', 'ppc64',),
- 'intel': ('i386', 'x86_64'),
- 'intel-32': ('i386',),
-@@ -124,6 +125,7 @@ universal_opts_map = { '32-bit': ('i386'
- '3-way': ('ppc', 'i386', 'x86_64'),
- 'all': ('i386', 'ppc', 'x86_64', 'ppc64',) }
- default_target_map = {
-+ 'universal2': '10.9',
- '64-bit': '10.5',
- '3-way': '10.5',
- 'intel': '10.5',
-@@ -190,6 +192,27 @@ EXPECTED_SHARED_LIBS = {}
- def internalTk():
- return getDeptargetTuple() >= (10, 6)
-
-+
-+def tweak_tcl_build(basedir, archList):
-+ with open("Makefile", "r") as fp:
-+ contents = fp.readlines()
-+
-+ # For reasons I don't understand the tcl configure script
-+ # decides that some stdlib symbols aren't present, before
-+ # deciding that strtod is broken.
-+ new_contents = []
-+ for line in contents:
-+ if line.startswith("COMPAT_OBJS"):
-+ # note: the space before strtod.o is intentional,
-+ # the detection of a broken strtod results in
-+ # "fixstrod.o" on this line.
-+ for nm in ("strstr.o", "strtoul.o", " strtod.o"):
-+ line = line.replace(nm, "")
-+ new_contents.append(line)
-+
-+ with open("Makefile", "w") as fp:
-+ fp.writelines(new_contents)
-+
- # List of names of third party software built with this installer.
- # The names will be inserted into the rtf version of the License.
- THIRD_PARTY_LIBS = []
-@@ -231,6 +257,7 @@ def library_recipes():
- '--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib'%(getVersion(),),
- ],
- useLDFlags=False,
-+ buildrecipe=tweak_tcl_build,
- install='make TCL_LIBRARY=%(TCL_LIBRARY)s && make install TCL_LIBRARY=%(TCL_LIBRARY)s DESTDIR=%(DESTDIR)s'%{
- "DESTDIR": shellQuote(os.path.join(WORKDIR, 'libraries')),
- "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.6'%(getVersion())),
-@@ -801,6 +828,7 @@ def build_universal_openssl(basedir, arc
- arch_opts = {
- "i386": ["darwin-i386-cc"],
- "x86_64": ["darwin64-x86_64-cc", "enable-ec_nistp_64_gcc_128"],
-+ "arm64": ["darwin64-arm64-cc"],
- "ppc": ["darwin-ppc-cc"],
- "ppc64": ["darwin64-ppc-cc"],
- }
diff --git a/lang/python39/patches/patch-Mac_Tools_pythonw.c b/lang/python39/patches/patch-Mac_Tools_pythonw.c
deleted file mode 100644
index aaedbdbfe2b..00000000000
--- a/lang/python39/patches/patch-Mac_Tools_pythonw.c
+++ /dev/null
@@ -1,44 +0,0 @@
-$NetBSD: patch-Mac_Tools_pythonw.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Mac/Tools/pythonw.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Mac/Tools/pythonw.c
-@@ -95,9 +95,6 @@ setup_spawnattr(posix_spawnattr_t* spawn
- size_t count;
- cpu_type_t cpu_types[1];
- short flags = 0;
--#ifdef __LP64__
-- int ch;
--#endif
-
- if ((errno = posix_spawnattr_init(spawnattr)) != 0) {
- err(2, "posix_spawnattr_int");
-@@ -119,10 +116,16 @@ setup_spawnattr(posix_spawnattr_t* spawn
-
- #elif defined(__ppc__)
- cpu_types[0] = CPU_TYPE_POWERPC;
-+
- #elif defined(__i386__)
- cpu_types[0] = CPU_TYPE_X86;
-+
-+#elif defined(__arm64__)
-+ cpu_types[0] = CPU_TYPE_ARM64;
-+
- #else
- # error "Unknown CPU"
-+
- #endif
-
- if (posix_spawnattr_setbinpref_np(spawnattr, count,
-@@ -220,7 +223,8 @@ main(int argc, char **argv) {
- /* We're weak-linking to posix-spawnv to ensure that
- * an executable build on 10.5 can work on 10.4.
- */
-- if (posix_spawn != NULL) {
-+
-+ if (&posix_spawn != NULL) {
- posix_spawnattr_t spawnattr = NULL;
-
- setup_spawnattr(&spawnattr);
diff --git a/lang/python39/patches/patch-Modules___ctypes_callbacks.c b/lang/python39/patches/patch-Modules___ctypes_callbacks.c
deleted file mode 100644
index 748239efb6a..00000000000
--- a/lang/python39/patches/patch-Modules___ctypes_callbacks.c
+++ /dev/null
@@ -1,76 +0,0 @@
-$NetBSD: patch-Modules___ctypes_callbacks.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Modules/_ctypes/callbacks.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Modules/_ctypes/callbacks.c
-@@ -1,6 +1,8 @@
- #include "Python.h"
- #include "frameobject.h"
-
-+#include <stdbool.h>
-+
- #include <ffi.h>
- #ifdef MS_WIN32
- #include <windows.h>
-@@ -18,7 +20,7 @@ CThunkObject_dealloc(PyObject *myself)
- Py_XDECREF(self->callable);
- Py_XDECREF(self->restype);
- if (self->pcl_write)
-- ffi_closure_free(self->pcl_write);
-+ Py_ffi_closure_free(self->pcl_write);
- PyObject_GC_Del(self);
- }
-
-@@ -361,8 +363,7 @@ CThunkObject *_ctypes_alloc_callback(PyO
-
- assert(CThunk_CheckExact((PyObject *)p));
-
-- p->pcl_write = ffi_closure_alloc(sizeof(ffi_closure),
-- &p->pcl_exec);
-+ p->pcl_write = Py_ffi_closure_alloc(sizeof(ffi_closure), &p->pcl_exec);
- if (p->pcl_write == NULL) {
- PyErr_NoMemory();
- goto error;
-@@ -408,13 +409,35 @@ CThunkObject *_ctypes_alloc_callback(PyO
- "ffi_prep_cif failed with %d", result);
- goto error;
- }
--#if defined(X86_DARWIN) || defined(POWERPC_DARWIN)
-- result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p);
-+#if HAVE_FFI_PREP_CLOSURE_LOC
-+# if USING_APPLE_OS_LIBFFI
-+# define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)
-+# else
-+# define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME 1
-+# endif
-+ if (HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME) {
-+ result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn,
-+ p,
-+ p->pcl_exec);
-+ } else
-+#endif
-+ {
-+#if USING_APPLE_OS_LIBFFI && defined(__arm64__)
-+ PyErr_Format(PyExc_NotImplementedError, "ffi_prep_closure_loc() is missing");
-+ goto error;
- #else
-- result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn,
-- p,
-- p->pcl_exec);
-+#ifdef MACOSX
-+ #pragma clang diagnostic push
-+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
- #endif
-+ result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p);
-+
-+#ifdef MACOSX
-+ #pragma clang diagnostic pop
-+#endif
-+
-+#endif
-+ }
- if (result != FFI_OK) {
- PyErr_Format(PyExc_RuntimeError,
- "ffi_prep_closure failed with %d", result);
diff --git a/lang/python39/patches/patch-Modules___ctypes_callproc.c b/lang/python39/patches/patch-Modules___ctypes_callproc.c
deleted file mode 100644
index 00df3806fdc..00000000000
--- a/lang/python39/patches/patch-Modules___ctypes_callproc.c
+++ /dev/null
@@ -1,190 +0,0 @@
-$NetBSD: patch-Modules___ctypes_callproc.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Modules/_ctypes/callproc.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Modules/_ctypes/callproc.c
-@@ -57,6 +57,8 @@
- #include "Python.h"
- #include "structmember.h" // PyMemberDef
-
-+#include <stdbool.h>
-+
- #ifdef MS_WIN32
- #include <windows.h>
- #include <tchar.h>
-@@ -64,6 +66,10 @@
- #include "ctypes_dlfcn.h"
- #endif
-
-+#ifdef __APPLE__
-+#include <mach-o/dyld.h>
-+#endif
-+
- #ifdef MS_WIN32
- #include <malloc.h>
- #endif
-@@ -812,7 +818,8 @@ static int _call_function_pointer(int fl
- ffi_type **atypes,
- ffi_type *restype,
- void *resmem,
-- int argcount)
-+ int argcount,
-+ int argtypecount)
- {
- PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */
- PyObject *error_object = NULL;
-@@ -835,14 +842,70 @@ static int _call_function_pointer(int fl
- if ((flags & FUNCFLAG_CDECL) == 0)
- cc = FFI_STDCALL;
- #endif
-- if (FFI_OK != ffi_prep_cif(&cif,
-- cc,
-- argcount,
-- restype,
-- atypes)) {
-- PyErr_SetString(PyExc_RuntimeError,
-- "ffi_prep_cif failed");
-- return -1;
-+
-+# if USING_APPLE_OS_LIBFFI
-+# define HAVE_FFI_PREP_CIF_VAR_RUNTIME __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)
-+# elif HAVE_FFI_PREP_CIF_VAR
-+# define HAVE_FFI_PREP_CIF_VAR_RUNTIME true
-+# else
-+# define HAVE_FFI_PREP_CIF_VAR_RUNTIME false
-+# endif
-+
-+ /* Even on Apple-arm64 the calling convention for variadic functions conincides
-+ * with the standard calling convention in the case that the function called
-+ * only with its fixed arguments. Thus, we do not need a special flag to be
-+ * set on variadic functions. We treat a function as variadic if it is called
-+ * with a nonzero number of variadic arguments */
-+ bool is_variadic = (argtypecount != 0 && argcount > argtypecount);
-+ (void) is_variadic;
-+
-+#if defined(__APPLE__) && defined(__arm64__)
-+ if (is_variadic) {
-+ if (HAVE_FFI_PREP_CIF_VAR_RUNTIME) {
-+ } else {
-+ PyErr_SetString(PyExc_NotImplementedError, "ffi_prep_cif_var() is missing");
-+ return -1;
-+ }
-+ }
-+#endif
-+
-+#if HAVE_FFI_PREP_CIF_VAR
-+ if (is_variadic) {
-+ if (HAVE_FFI_PREP_CIF_VAR_RUNTIME) {
-+ if (FFI_OK != ffi_prep_cif_var(&cif,
-+ cc,
-+ argtypecount,
-+ argcount,
-+ restype,
-+ atypes)) {
-+ PyErr_SetString(PyExc_RuntimeError,
-+ "ffi_prep_cif_var failed");
-+ return -1;
-+ }
-+ } else {
-+ if (FFI_OK != ffi_prep_cif(&cif,
-+ cc,
-+ argcount,
-+ restype,
-+ atypes)) {
-+ PyErr_SetString(PyExc_RuntimeError,
-+ "ffi_prep_cif failed");
-+ return -1;
-+ }
-+ }
-+ } else
-+#endif
-+
-+ {
-+ if (FFI_OK != ffi_prep_cif(&cif,
-+ cc,
-+ argcount,
-+ restype,
-+ atypes)) {
-+ PyErr_SetString(PyExc_RuntimeError,
-+ "ffi_prep_cif failed");
-+ return -1;
-+ }
- }
-
- if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) {
-@@ -1212,9 +1275,8 @@ PyObject *_ctypes_callproc(PPROC pProc,
-
- if (-1 == _call_function_pointer(flags, pProc, avalues, atypes,
- rtype, resbuf,
-- Py_SAFE_DOWNCAST(argcount,
-- Py_ssize_t,
-- int)))
-+ Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int),
-+ Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int)))
- goto cleanup;
-
- #ifdef WORDS_BIGENDIAN
-@@ -1398,6 +1460,42 @@ copy_com_pointer(PyObject *self, PyObjec
- }
- #else
-
-+#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH
-+static PyObject *py_dyld_shared_cache_contains_path(PyObject *self, PyObject *args)
-+{
-+ PyObject *name, *name2;
-+ char *name_str;
-+
-+ if (__builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)) {
-+ int r;
-+
-+ if (!PyArg_ParseTuple(args, "O", &name))
-+ return NULL;
-+
-+ if (name == Py_None)
-+ Py_RETURN_FALSE;
-+
-+ if (PyUnicode_FSConverter(name, &name2) == 0)
-+ return NULL;
-+ name_str = PyBytes_AS_STRING(name2);
-+
-+ r = _dyld_shared_cache_contains_path(name_str);
-+ Py_DECREF(name2);
-+
-+ if (r) {
-+ Py_RETURN_TRUE;
-+ } else {
-+ Py_RETURN_FALSE;
-+ }
-+
-+ } else {
-+ PyErr_SetString(PyExc_NotImplementedError, "_dyld_shared_cache_contains_path symbol is missing");
-+ return NULL;
-+ }
-+
-+ }
-+#endif
-+
- static PyObject *py_dl_open(PyObject *self, PyObject *args)
- {
- PyObject *name, *name2;
-@@ -1887,6 +1985,8 @@ buffer_info(PyObject *self, PyObject *ar
- return Py_BuildValue("siN", dict->format, dict->ndim, shape);
- }
-
-+
-+
- PyMethodDef _ctypes_module_methods[] = {
- {"get_errno", get_errno, METH_NOARGS},
- {"set_errno", set_errno, METH_VARARGS},
-@@ -1909,6 +2009,9 @@ PyMethodDef _ctypes_module_methods[] = {
- {"dlclose", py_dl_close, METH_VARARGS, "dlclose a library"},
- {"dlsym", py_dl_sym, METH_VARARGS, "find symbol in shared library"},
- #endif
-+#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH
-+ {"_dyld_shared_cache_contains_path", py_dyld_shared_cache_contains_path, METH_VARARGS, "check if path is in the shared cache"},
-+#endif
- {"alignment", align_func, METH_O, alignment_doc},
- {"sizeof", sizeof_func, METH_O, sizeof_doc},
- {"byref", byref, METH_VARARGS, byref_doc},
diff --git a/lang/python39/patches/patch-Modules___ctypes_ctypes.h b/lang/python39/patches/patch-Modules___ctypes_ctypes.h
deleted file mode 100644
index a8942b1530c..00000000000
--- a/lang/python39/patches/patch-Modules___ctypes_ctypes.h
+++ /dev/null
@@ -1,22 +0,0 @@
-$NetBSD: patch-Modules___ctypes_ctypes.h,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Modules/_ctypes/ctypes.h.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Modules/_ctypes/ctypes.h
-@@ -366,6 +366,14 @@ PyObject *_ctypes_get_errobj(int **pspac
- extern PyObject *ComError;
- #endif
-
-+#if USING_MALLOC_CLOSURE_DOT_C
-+void Py_ffi_closure_free(void *p);
-+void *Py_ffi_closure_alloc(size_t size, void** codeloc);
-+#else
-+#define Py_ffi_closure_free ffi_closure_free
-+#define Py_ffi_closure_alloc ffi_closure_alloc
-+#endif
-+
- /*
- Local Variables:
- compile-command: "python setup.py -q build install --home ~"
diff --git a/lang/python39/patches/patch-Modules___ctypes_malloc__closure.c b/lang/python39/patches/patch-Modules___ctypes_malloc__closure.c
deleted file mode 100644
index 7f973c8cefb..00000000000
--- a/lang/python39/patches/patch-Modules___ctypes_malloc__closure.c
+++ /dev/null
@@ -1,37 +0,0 @@
-$NetBSD: patch-Modules___ctypes_malloc__closure.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Modules/_ctypes/malloc_closure.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Modules/_ctypes/malloc_closure.c
-@@ -89,16 +89,27 @@ static void more_core(void)
- /******************************************************************/
-
- /* put the item back into the free list */
--void ffi_closure_free(void *p)
-+void Py_ffi_closure_free(void *p)
- {
-+#if USING_APPLE_OS_LIBFFI && HAVE_FFI_CLOSURE_ALLOC
-+ if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) {
-+ ffi_closure_free(p);
-+ return;
-+ }
-+#endif
- ITEM *item = (ITEM *)p;
- item->next = free_list;
- free_list = item;
- }
-
- /* return one item from the free list, allocating more if needed */
--void *ffi_closure_alloc(size_t ignored, void** codeloc)
-+void *Py_ffi_closure_alloc(size_t size, void** codeloc)
- {
-+#if USING_APPLE_OS_LIBFFI && HAVE_FFI_CLOSURE_ALLOC
-+ if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) {
-+ return ffi_closure_alloc(size, codeloc);
-+ }
-+#endif
- ITEM *item;
- if (!free_list)
- more_core();
diff --git a/lang/python39/patches/patch-Modules___decimal_libmpdec_mpdecimal.h b/lang/python39/patches/patch-Modules___decimal_libmpdec_mpdecimal.h
deleted file mode 100644
index 8571e2bf7c0..00000000000
--- a/lang/python39/patches/patch-Modules___decimal_libmpdec_mpdecimal.h
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD: patch-Modules___decimal_libmpdec_mpdecimal.h,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). (Original code.)
-
---- Modules/_decimal/libmpdec/mpdecimal.h.orig 2020-11-11 21:56:51.000000000 +0000
-+++ Modules/_decimal/libmpdec/mpdecimal.h
-@@ -121,6 +121,9 @@ const char *mpd_version(void);
- #elif defined(__x86_64__)
- #define CONFIG_64
- #define ASM
-+ #elif defined(__aarch64__)
-+ #define CONFIG_64
-+ #define ANSI
- #else
- #error "unknown architecture for universal build."
- #endif
diff --git a/lang/python39/patches/patch-Modules_getpath.c b/lang/python39/patches/patch-Modules_getpath.c
deleted file mode 100644
index ee62a5e882b..00000000000
--- a/lang/python39/patches/patch-Modules_getpath.c
+++ /dev/null
@@ -1,19 +0,0 @@
-$NetBSD: patch-Modules_getpath.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Modules/getpath.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Modules/getpath.c
-@@ -923,11 +923,7 @@ static PyStatus
- calculate_program_macos(wchar_t **abs_path_p)
- {
- char execpath[MAXPATHLEN + 1];
--#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
- uint32_t nsexeclength = Py_ARRAY_LENGTH(execpath) - 1;
--#else
-- unsigned long nsexeclength = Py_ARRAY_LENGTH(execpath) - 1;
--#endif
-
- /* On Mac OS X, if a script uses an interpreter of the form
- "#!/opt/python2.3/bin/python", the kernel only passes "python"
diff --git a/lang/python39/patches/patch-Modules_posixmodule.c b/lang/python39/patches/patch-Modules_posixmodule.c
deleted file mode 100644
index 7a28f426c06..00000000000
--- a/lang/python39/patches/patch-Modules_posixmodule.c
+++ /dev/null
@@ -1,1365 +0,0 @@
-$NetBSD: patch-Modules_posixmodule.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Modules/posixmodule.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Modules/posixmodule.c
-@@ -7,18 +7,6 @@
- of the compiler used. Different compilers define their own feature
- test macro, e.g. '_MSC_VER'. */
-
--#ifdef __APPLE__
-- /*
-- * Step 1 of support for weak-linking a number of symbols existing on
-- * OSX 10.4 and later, see the comment in the #ifdef __APPLE__ block
-- * at the end of this file for more information.
-- */
--# pragma weak lchown
--# pragma weak statvfs
--# pragma weak fstatvfs
--
--#endif /* __APPLE__ */
--
- #define PY_SSIZE_T_CLEAN
-
- #include "Python.h"
-@@ -50,6 +38,127 @@
-
- #include <stdio.h> /* needed for ctermid() */
-
-+/*
-+ * A number of APIs are available on macOS from a certain macOS version.
-+ * To support building with a new SDK while deploying to older versions
-+ * the availability test is split into two:
-+ * - HAVE_<FUNCTION>: The configure check for compile time availability
-+ * - HAVE_<FUNCTION>_RUNTIME: Runtime check for availability
-+ *
-+ * The latter is always true when not on macOS, or when using a compiler
-+ * that does not support __has_builtin (older versions of Xcode).
-+ *
-+ * Due to compiler restrictions there is one valid use of HAVE_<FUNCTION>_RUNTIME:
-+ * if (HAVE_<FUNCTION>_RUNTIME) { ... }
-+ *
-+ * In mixing the test with other tests or using negations will result in compile
-+ * errors.
-+ */
-+#if defined(__APPLE__)
-+
-+#if defined(__has_builtin) && __has_builtin(__builtin_available)
-+# define HAVE_FSTATAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_FACCESSAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_FCHMODAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_FCHOWNAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_LINKAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_FDOPENDIR_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_MKDIRAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_RENAMEAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_UNLINKAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_OPENAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_READLINKAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_SYMLINKAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
-+# define HAVE_FUTIMENS_RUNTIME __builtin_available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)
-+# define HAVE_UTIMENSAT_RUNTIME __builtin_available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)
-+# define HAVE_PWRITEV_RUNTIME __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)
-+
-+# define HAVE_POSIX_SPAWN_SETSID_RUNTIME __builtin_available(macOS 10.15, *)
-+
-+#else /* Xcode 8 or earlier */
-+
-+ /* __builtin_available is not present in these compilers, but
-+ * some of the symbols might be weak linked (10.10 SDK or later
-+ * deploying on 10.9.
-+ *
-+ * Fall back to the older style of availability checking for
-+ * symbols introduced in macOS 10.10.
-+ */
-+
-+# ifdef HAVE_FSTATAT
-+# define HAVE_FSTATAT_RUNTIME (fstatat != NULL)
-+# endif
-+
-+# ifdef HAVE_FACCESSAT
-+# define HAVE_FACCESSAT_RUNTIME (faccessat != NULL)
-+# endif
-+
-+# ifdef HAVE_FCHMODAT
-+# define HAVE_FCHMODAT_RUNTIME (fchmodat != NULL)
-+# endif
-+
-+# ifdef HAVE_FCHOWNAT
-+# define HAVE_FCHOWNAT_RUNTIME (fchownat != NULL)
-+# endif
-+
-+# ifdef HAVE_LINKAT
-+# define HAVE_LINKAT_RUNTIME (linkat != NULL)
-+# endif
-+
-+# ifdef HAVE_FDOPENDIR
-+# define HAVE_FDOPENDIR_RUNTIME (fdopendir != NULL)
-+# endif
-+
-+# ifdef HAVE_MKDIRAT
-+# define HAVE_MKDIRAT_RUNTIME (mkdirat != NULL)
-+# endif
-+
-+# ifdef HAVE_RENAMEAT
-+# define HAVE_RENAMEAT_RUNTIME (renameat != NULL)
-+# endif
-+
-+# ifdef HAVE_UNLINKAT
-+# define HAVE_UNLINKAT_RUNTIME (unlinkat != NULL)
-+# endif
-+
-+# ifdef HAVE_OPENAT
-+# define HAVE_OPENAT_RUNTIME (openat != NULL)
-+# endif
-+
-+# ifdef HAVE_READLINKAT
-+# define HAVE_READLINKAT_RUNTIME (readlinkat != NULL)
-+# endif
-+
-+# ifdef HAVE_SYMLINKAT
-+# define HAVE_SYMLINKAT_RUNTIME (symlinkat != NULL)
-+# endif
-+
-+#endif
-+
-+#ifdef HAVE_FUTIMESAT
-+/* Some of the logic for weak linking depends on this assertion */
-+# error "HAVE_FUTIMESAT unexpectedly defined"
-+#endif
-+
-+#else
-+# define HAVE_FSTATAT_RUNTIME 1
-+# define HAVE_FACCESSAT_RUNTIME 1
-+# define HAVE_FCHMODAT_RUNTIME 1
-+# define HAVE_FCHOWNAT_RUNTIME 1
-+# define HAVE_LINKAT_RUNTIME 1
-+# define HAVE_FDOPENDIR_RUNTIME 1
-+# define HAVE_MKDIRAT_RUNTIME 1
-+# define HAVE_RENAMEAT_RUNTIME 1
-+# define HAVE_UNLINKAT_RUNTIME 1
-+# define HAVE_OPENAT_RUNTIME 1
-+# define HAVE_READLINKAT_RUNTIME 1
-+# define HAVE_SYMLINKAT_RUNTIME 1
-+# define HAVE_FUTIMENS_RUNTIME 1
-+# define HAVE_UTIMENSAT_RUNTIME 1
-+# define HAVE_PWRITEV_RUNTIME 1
-+#endif
-+
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -2308,6 +2417,10 @@ posix_do_stat(PyObject *module, const ch
- STRUCT_STAT st;
- int result;
-
-+#ifdef HAVE_FSTATAT
-+ int fstatat_unavailable = 0;
-+#endif
-+
- #if !defined(MS_WINDOWS) && !defined(HAVE_FSTATAT) && !defined(HAVE_LSTAT)
- if (follow_symlinks_specified(function_name, follow_symlinks))
- return NULL;
-@@ -2334,15 +2447,27 @@ posix_do_stat(PyObject *module, const ch
- else
- #endif /* HAVE_LSTAT */
- #ifdef HAVE_FSTATAT
-- if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks)
-- result = fstatat(dir_fd, path->narrow, &st,
-+ if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks) {
-+ if (HAVE_FSTATAT_RUNTIME) {
-+ result = fstatat(dir_fd, path->narrow, &st,
- follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
-- else
-+
-+ } else {
-+ fstatat_unavailable = 1;
-+ }
-+ } else
- #endif /* HAVE_FSTATAT */
- result = STAT(path->narrow, &st);
- #endif /* MS_WINDOWS */
- Py_END_ALLOW_THREADS
-
-+#ifdef HAVE_FSTATAT
-+ if (fstatat_unavailable) {
-+ argument_unavailable_error("stat", "dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (result != 0) {
- return path_error(path);
- }
-@@ -2760,6 +2885,10 @@ os_access_impl(PyObject *module, path_t
- int result;
- #endif
-
-+#ifdef HAVE_FACCESSAT
-+ int faccessat_unavailable = 0;
-+#endif
-+
- #ifndef HAVE_FACCESSAT
- if (follow_symlinks_specified("access", follow_symlinks))
- return -1;
-@@ -2794,17 +2923,40 @@ os_access_impl(PyObject *module, path_t
- if ((dir_fd != DEFAULT_DIR_FD) ||
- effective_ids ||
- !follow_symlinks) {
-- int flags = 0;
-- if (!follow_symlinks)
-- flags |= AT_SYMLINK_NOFOLLOW;
-- if (effective_ids)
-- flags |= AT_EACCESS;
-- result = faccessat(dir_fd, path->narrow, mode, flags);
-+
-+ if (HAVE_FACCESSAT_RUNTIME) {
-+ int flags = 0;
-+ if (!follow_symlinks)
-+ flags |= AT_SYMLINK_NOFOLLOW;
-+ if (effective_ids)
-+ flags |= AT_EACCESS;
-+ result = faccessat(dir_fd, path->narrow, mode, flags);
-+ } else {
-+ faccessat_unavailable = 1;
-+ }
- }
- else
- #endif
- result = access(path->narrow, mode);
- Py_END_ALLOW_THREADS
-+
-+#ifdef HAVE_FACCESSAT
-+ if (faccessat_unavailable) {
-+ if (dir_fd != DEFAULT_DIR_FD) {
-+ argument_unavailable_error("access", "dir_fd");
-+ return -1;
-+ }
-+ if (follow_symlinks_specified("access", follow_symlinks))
-+ return -1;
-+
-+ if (effective_ids) {
-+ argument_unavailable_error("access", "effective_ids");
-+ return -1;
-+ }
-+ /* should be unreachable */
-+ return -1;
-+ }
-+#endif
- return_value = !result;
- #endif
-
-@@ -3002,6 +3154,7 @@ os_chmod_impl(PyObject *module, path_t *
-
- #ifdef HAVE_FCHMODAT
- int fchmodat_nofollow_unsupported = 0;
-+ int fchmodat_unsupported = 0;
- #endif
-
- #if !(defined(HAVE_FCHMODAT) || defined(HAVE_LCHMOD))
-@@ -3037,42 +3190,56 @@ os_chmod_impl(PyObject *module, path_t *
- if (path->fd != -1)
- result = fchmod(path->fd, mode);
- else
--#endif
-+#endif /* HAVE_CHMOD */
- #ifdef HAVE_LCHMOD
- if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD))
- result = lchmod(path->narrow, mode);
- else
--#endif
-+#endif /* HAVE_LCHMOD */
- #ifdef HAVE_FCHMODAT
- if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks) {
-- /*
-- * fchmodat() doesn't currently support AT_SYMLINK_NOFOLLOW!
-- * The documentation specifically shows how to use it,
-- * and then says it isn't implemented yet.
-- * (true on linux with glibc 2.15, and openindiana 3.x)
-- *
-- * Once it is supported, os.chmod will automatically
-- * support dir_fd and follow_symlinks=False. (Hopefully.)
-- * Until then, we need to be careful what exception we raise.
-- */
-- result = fchmodat(dir_fd, path->narrow, mode,
-- follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
-- /*
-- * But wait! We can't throw the exception without allowing threads,
-- * and we can't do that in this nested scope. (Macro trickery, sigh.)
-- */
-- fchmodat_nofollow_unsupported =
-- result &&
-- ((errno == ENOTSUP) || (errno == EOPNOTSUPP)) &&
-- !follow_symlinks;
-+ if (HAVE_FCHMODAT_RUNTIME) {
-+ /*
-+ * fchmodat() doesn't currently support AT_SYMLINK_NOFOLLOW!
-+ * The documentation specifically shows how to use it,
-+ * and then says it isn't implemented yet.
-+ * (true on linux with glibc 2.15, and openindiana 3.x)
-+ *
-+ * Once it is supported, os.chmod will automatically
-+ * support dir_fd and follow_symlinks=False. (Hopefully.)
-+ * Until then, we need to be careful what exception we raise.
-+ */
-+ result = fchmodat(dir_fd, path->narrow, mode,
-+ follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
-+ /*
-+ * But wait! We can't throw the exception without allowing threads,
-+ * and we can't do that in this nested scope. (Macro trickery, sigh.)
-+ */
-+ fchmodat_nofollow_unsupported =
-+ result &&
-+ ((errno == ENOTSUP) || (errno == EOPNOTSUPP)) &&
-+ !follow_symlinks;
-+ } else {
-+ fchmodat_unsupported = 1;
-+ fchmodat_nofollow_unsupported = 1;
-+
-+ result = -1;
-+ }
- }
- else
--#endif
-+#endif /* HAVE_FHCMODAT */
- result = chmod(path->narrow, mode);
- Py_END_ALLOW_THREADS
-
- if (result) {
- #ifdef HAVE_FCHMODAT
-+ if (fchmodat_unsupported) {
-+ if (dir_fd != DEFAULT_DIR_FD) {
-+ argument_unavailable_error("chmod", "dir_fd");
-+ return NULL;
-+ }
-+ }
-+
- if (fchmodat_nofollow_unsupported) {
- if (dir_fd != DEFAULT_DIR_FD)
- dir_fd_and_follow_symlinks_invalid("chmod",
-@@ -3082,10 +3249,10 @@ os_chmod_impl(PyObject *module, path_t *
- return NULL;
- }
- else
--#endif
-+#endif /* HAVE_FCHMODAT */
- return path_error(path);
- }
--#endif
-+#endif /* MS_WINDOWS */
-
- Py_RETURN_NONE;
- }
-@@ -3373,6 +3540,10 @@ os_chown_impl(PyObject *module, path_t *
- {
- int result;
-
-+#if defined(HAVE_FCHOWNAT)
-+ int fchownat_unsupported = 0;
-+#endif
-+
- #if !(defined(HAVE_LCHOWN) || defined(HAVE_FCHOWNAT))
- if (follow_symlinks_specified("chown", follow_symlinks))
- return NULL;
-@@ -3381,19 +3552,6 @@ os_chown_impl(PyObject *module, path_t *
- fd_and_follow_symlinks_invalid("chown", path->fd, follow_symlinks))
- return NULL;
-
--#ifdef __APPLE__
-- /*
-- * This is for Mac OS X 10.3, which doesn't have lchown.
-- * (But we still have an lchown symbol because of weak-linking.)
-- * It doesn't have fchownat either. So there's no possibility
-- * of a graceful failover.
-- */
-- if ((!follow_symlinks) && (lchown == NULL)) {
-- follow_symlinks_specified("chown", follow_symlinks);
-- return NULL;
-- }
--#endif
--
- if (PySys_Audit("os.chown", "OIIi", path->object, uid, gid,
- dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
- return NULL;
-@@ -3411,14 +3569,28 @@ os_chown_impl(PyObject *module, path_t *
- else
- #endif
- #ifdef HAVE_FCHOWNAT
-- if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks))
-+ if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks)) {
-+ if (HAVE_FCHOWNAT_RUNTIME) {
- result = fchownat(dir_fd, path->narrow, uid, gid,
- follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
-- else
-+ } else {
-+ fchownat_unsupported = 1;
-+ }
-+ } else
- #endif
- result = chown(path->narrow, uid, gid);
- Py_END_ALLOW_THREADS
-
-+#ifdef HAVE_FCHOWNAT
-+ if (fchownat_unsupported) {
-+ /* This would be incorrect if the current platform
-+ * doesn't support lchown.
-+ */
-+ argument_unavailable_error(NULL, "dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (result)
- return path_error(path);
-
-@@ -3664,6 +3836,9 @@ os_link_impl(PyObject *module, path_t *s
- #else
- int result;
- #endif
-+#if defined(HAVE_LINKAT)
-+ int linkat_unavailable = 0;
-+#endif
-
- #ifndef HAVE_LINKAT
- if ((src_dir_fd != DEFAULT_DIR_FD) || (dst_dir_fd != DEFAULT_DIR_FD)) {
-@@ -3698,15 +3873,43 @@ os_link_impl(PyObject *module, path_t *s
- #ifdef HAVE_LINKAT
- if ((src_dir_fd != DEFAULT_DIR_FD) ||
- (dst_dir_fd != DEFAULT_DIR_FD) ||
-- (!follow_symlinks))
-- result = linkat(src_dir_fd, src->narrow,
-- dst_dir_fd, dst->narrow,
-- follow_symlinks ? AT_SYMLINK_FOLLOW : 0);
-+ (!follow_symlinks)) {
-+
-+ if (HAVE_LINKAT_RUNTIME) {
-+
-+ result = linkat(src_dir_fd, src->narrow,
-+ dst_dir_fd, dst->narrow,
-+ follow_symlinks ? AT_SYMLINK_FOLLOW : 0);
-+
-+ }
-+#ifdef __APPLE__
-+ else {
-+ if (src_dir_fd == DEFAULT_DIR_FD && dst_dir_fd == DEFAULT_DIR_FD) {
-+ /* See issue 41355: This matches the behaviour of !HAVE_LINKAT */
-+ result = link(src->narrow, dst->narrow);
-+ } else {
-+ linkat_unavailable = 1;
-+ }
-+ }
-+#endif
-+ }
- else
- #endif /* HAVE_LINKAT */
- result = link(src->narrow, dst->narrow);
- Py_END_ALLOW_THREADS
-
-+#ifdef HAVE_LINKAT
-+ if (linkat_unavailable) {
-+ /* Either or both dir_fd arguments were specified */
-+ if (src_dir_fd != DEFAULT_DIR_FD) {
-+ argument_unavailable_error("link", "src_dir_fd");
-+ } else {
-+ argument_unavailable_error("link", "dst_dir_fd");
-+ }
-+ return NULL;
-+ }
-+#endif
-+
- if (result)
- return path_error2(src, dst);
- #endif /* MS_WINDOWS */
-@@ -3829,6 +4032,7 @@ _posix_listdir(path_t *path, PyObject *l
- errno = 0;
- #ifdef HAVE_FDOPENDIR
- if (path->fd != -1) {
-+ if (HAVE_FDOPENDIR_RUNTIME) {
- /* closedir() closes the FD, so we duplicate it */
- fd = _Py_dup(path->fd);
- if (fd == -1)
-@@ -3839,6 +4043,11 @@ _posix_listdir(path_t *path, PyObject *l
- Py_BEGIN_ALLOW_THREADS
- dirp = fdopendir(fd);
- Py_END_ALLOW_THREADS
-+ } else {
-+ PyErr_SetString(PyExc_TypeError,
-+ "listdir: path should be string, bytes, os.PathLike or None, not int");
-+ return NULL;
-+ }
- }
- else
- #endif
-@@ -4152,6 +4361,9 @@ os_mkdir_impl(PyObject *module, path_t *
- /*[clinic end generated code: output=a70446903abe821f input=e965f68377e9b1ce]*/
- {
- int result;
-+#ifdef HAVE_MKDIRAT
-+ int mkdirat_unavailable = 0;
-+#endif
-
- if (PySys_Audit("os.mkdir", "Oii", path->object, mode,
- dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
-@@ -4168,9 +4380,14 @@ os_mkdir_impl(PyObject *module, path_t *
- #else
- Py_BEGIN_ALLOW_THREADS
- #if HAVE_MKDIRAT
-- if (dir_fd != DEFAULT_DIR_FD)
-+ if (dir_fd != DEFAULT_DIR_FD) {
-+ if (HAVE_MKDIRAT_RUNTIME) {
- result = mkdirat(dir_fd, path->narrow, mode);
-- else
-+
-+ } else {
-+ mkdirat_unavailable = 1;
-+ }
-+ } else
- #endif
- #if defined(__WATCOMC__) && !defined(__QNX__)
- result = mkdir(path->narrow);
-@@ -4178,6 +4395,14 @@ os_mkdir_impl(PyObject *module, path_t *
- result = mkdir(path->narrow, mode);
- #endif
- Py_END_ALLOW_THREADS
-+
-+#if HAVE_MKDIRAT
-+ if (mkdirat_unavailable) {
-+ argument_unavailable_error(NULL, "dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (result < 0)
- return path_error(path);
- #endif /* MS_WINDOWS */
-@@ -4287,6 +4512,10 @@ internal_rename(path_t *src, path_t *dst
- const char *function_name = is_replace ? "replace" : "rename";
- int dir_fd_specified;
-
-+#ifdef HAVE_RENAMEAT
-+ int renameat_unavailable = 0;
-+#endif
-+
- #ifdef MS_WINDOWS
- BOOL result;
- int flags = is_replace ? MOVEFILE_REPLACE_EXISTING : 0;
-@@ -4326,13 +4555,25 @@ internal_rename(path_t *src, path_t *dst
-
- Py_BEGIN_ALLOW_THREADS
- #ifdef HAVE_RENAMEAT
-- if (dir_fd_specified)
-- result = renameat(src_dir_fd, src->narrow, dst_dir_fd, dst->narrow);
-- else
-+ if (dir_fd_specified) {
-+ if (HAVE_RENAMEAT_RUNTIME) {
-+ result = renameat(src_dir_fd, src->narrow, dst_dir_fd, dst->narrow);
-+ } else {
-+ renameat_unavailable = 1;
-+ }
-+ } else
- #endif
- result = rename(src->narrow, dst->narrow);
- Py_END_ALLOW_THREADS
-
-+
-+#ifdef HAVE_RENAMEAT
-+ if (renameat_unavailable) {
-+ argument_unavailable_error(function_name, "src_dir_fd and dst_dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (result)
- return path_error2(src, dst);
- #endif
-@@ -4408,6 +4649,9 @@ os_rmdir_impl(PyObject *module, path_t *
- /*[clinic end generated code: output=080eb54f506e8301 input=38c8b375ca34a7e2]*/
- {
- int result;
-+#ifdef HAVE_UNLINKAT
-+ int unlinkat_unavailable = 0;
-+#endif
-
- if (PySys_Audit("os.rmdir", "Oi", path->object,
- dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
-@@ -4420,14 +4664,26 @@ os_rmdir_impl(PyObject *module, path_t *
- result = !RemoveDirectoryW(path->wide);
- #else
- #ifdef HAVE_UNLINKAT
-- if (dir_fd != DEFAULT_DIR_FD)
-+ if (dir_fd != DEFAULT_DIR_FD) {
-+ if (HAVE_UNLINKAT_RUNTIME) {
- result = unlinkat(dir_fd, path->narrow, AT_REMOVEDIR);
-- else
-+ } else {
-+ unlinkat_unavailable = 1;
-+ result = -1;
-+ }
-+ } else
- #endif
- result = rmdir(path->narrow);
- #endif
- Py_END_ALLOW_THREADS
-
-+#ifdef HAVE_UNLINKAT
-+ if (unlinkat_unavailable) {
-+ argument_unavailable_error("rmdir", "dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (result)
- return path_error(path);
-
-@@ -4571,6 +4827,9 @@ os_unlink_impl(PyObject *module, path_t
- /*[clinic end generated code: output=621797807b9963b1 input=d7bcde2b1b2a2552]*/
- {
- int result;
-+#ifdef HAVE_UNLINKAT
-+ int unlinkat_unavailable = 0;
-+#endif
-
- if (PySys_Audit("os.remove", "Oi", path->object,
- dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
-@@ -4584,15 +4843,27 @@ os_unlink_impl(PyObject *module, path_t
- result = !Py_DeleteFileW(path->wide);
- #else
- #ifdef HAVE_UNLINKAT
-- if (dir_fd != DEFAULT_DIR_FD)
-+ if (dir_fd != DEFAULT_DIR_FD) {
-+ if (HAVE_UNLINKAT_RUNTIME) {
-+
- result = unlinkat(dir_fd, path->narrow, 0);
-- else
-+ } else {
-+ unlinkat_unavailable = 1;
-+ }
-+ } else
- #endif /* HAVE_UNLINKAT */
- result = unlink(path->narrow);
- #endif
- _Py_END_SUPPRESS_IPH
- Py_END_ALLOW_THREADS
-
-+#ifdef HAVE_UNLINKAT
-+ if (unlinkat_unavailable) {
-+ argument_unavailable_error(NULL, "dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (result)
- return path_error(path);
-
-@@ -4763,7 +5034,16 @@ typedef struct {
- static int
- utime_dir_fd(utime_t *ut, int dir_fd, const char *path, int follow_symlinks)
- {
--#ifdef HAVE_UTIMENSAT
-+#if defined(__APPLE__) && defined(HAVE_UTIMENSAT)
-+ if (HAVE_UTIMENSAT_RUNTIME) {
-+ int flags = follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW;
-+ UTIME_TO_TIMESPEC;
-+ return utimensat(dir_fd, path, time, flags);
-+ } else {
-+ errno = ENOSYS;
-+ return -1;
-+ }
-+#elif defined(HAVE_UTIMENSAT)
- int flags = follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW;
- UTIME_TO_TIMESPEC;
- return utimensat(dir_fd, path, time, flags);
-@@ -4790,11 +5070,30 @@ static int
- utime_fd(utime_t *ut, int fd)
- {
- #ifdef HAVE_FUTIMENS
-+
-+ if (HAVE_FUTIMENS_RUNTIME) {
-+
- UTIME_TO_TIMESPEC;
- return futimens(fd, time);
--#else
-+
-+ } else
-+#ifndef HAVE_FUTIMES
-+ {
-+ /* Not sure if this can happen */
-+ PyErr_SetString(
-+ PyExc_RuntimeError,
-+ "neither futimens nor futimes are supported"
-+ " on this system");
-+ return -1;
-+ }
-+#endif
-+
-+#endif
-+#ifdef HAVE_FUTIMES
-+ {
- UTIME_TO_TIMEVAL;
- return futimes(fd, time);
-+ }
- #endif
- }
-
-@@ -4813,11 +5112,27 @@ static int
- utime_nofollow_symlinks(utime_t *ut, const char *path)
- {
- #ifdef HAVE_UTIMENSAT
-- UTIME_TO_TIMESPEC;
-- return utimensat(DEFAULT_DIR_FD, path, time, AT_SYMLINK_NOFOLLOW);
--#else
-+ if (HAVE_UTIMENSAT_RUNTIME) {
-+ UTIME_TO_TIMESPEC;
-+ return utimensat(DEFAULT_DIR_FD, path, time, AT_SYMLINK_NOFOLLOW);
-+ } else
-+#ifndef HAVE_LUTIMES
-+ {
-+ /* Not sure if this can happen */
-+ PyErr_SetString(
-+ PyExc_RuntimeError,
-+ "neither utimensat nor lutimes are supported"
-+ " on this system");
-+ return -1;
-+ }
-+#endif
-+#endif
-+
-+#ifdef HAVE_LUTIMES
-+ {
- UTIME_TO_TIMEVAL;
- return lutimes(path, time);
-+ }
- #endif
- }
-
-@@ -4828,7 +5143,15 @@ utime_nofollow_symlinks(utime_t *ut, con
- static int
- utime_default(utime_t *ut, const char *path)
- {
--#ifdef HAVE_UTIMENSAT
-+#if defined(__APPLE__) && defined(HAVE_UTIMENSAT)
-+ if (HAVE_UTIMENSAT_RUNTIME) {
-+ UTIME_TO_TIMESPEC;
-+ return utimensat(DEFAULT_DIR_FD, path, time, 0);
-+ } else {
-+ UTIME_TO_TIMEVAL;
-+ return utimes(path, time);
-+ }
-+#elif defined(HAVE_UTIMENSAT)
- UTIME_TO_TIMESPEC;
- return utimensat(DEFAULT_DIR_FD, path, time, 0);
- #elif defined(HAVE_UTIMES)
-@@ -5037,9 +5360,10 @@ os_utime_impl(PyObject *module, path_t *
- #endif
-
- #if defined(HAVE_FUTIMESAT) || defined(HAVE_UTIMENSAT)
-- if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks))
-+ if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks)) {
- result = utime_dir_fd(&utime, dir_fd, path->narrow, follow_symlinks);
-- else
-+
-+ } else
- #endif
-
- #if defined(HAVE_FUTIMES) || defined(HAVE_FUTIMENS)
-@@ -5052,6 +5376,14 @@ os_utime_impl(PyObject *module, path_t *
-
- Py_END_ALLOW_THREADS
-
-+#if defined(__APPLE__) && defined(HAVE_UTIMENSAT)
-+ /* See utime_dir_fd implementation */
-+ if (result == -1 && errno == ENOSYS) {
-+ argument_unavailable_error(NULL, "dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (result < 0) {
- /* see previous comment about not putting filename in error here */
- posix_error();
-@@ -5450,6 +5782,9 @@ parse_posix_spawn_flags(PyObject *module
- }
-
- if (setsid) {
-+#ifdef HAVE_POSIX_SPAWN_SETSID_RUNTIME
-+ if (HAVE_POSIX_SPAWN_SETSID_RUNTIME) {
-+#endif
- #ifdef POSIX_SPAWN_SETSID
- all_flags |= POSIX_SPAWN_SETSID;
- #elif defined(POSIX_SPAWN_SETSID_NP)
-@@ -5458,6 +5793,14 @@ parse_posix_spawn_flags(PyObject *module
- argument_unavailable_error(func_name, "setsid");
- return -1;
- #endif
-+
-+#ifdef HAVE_POSIX_SPAWN_SETSID_RUNTIME
-+ } else {
-+ argument_unavailable_error(func_name, "setsid");
-+ return -1;
-+ }
-+#endif /* HAVE_POSIX_SPAWN_SETSID_RUNTIME */
-+
- }
-
- if (setsigmask) {
-@@ -8068,16 +8411,30 @@ os_readlink_impl(PyObject *module, path_
- #if defined(HAVE_READLINK)
- char buffer[MAXPATHLEN+1];
- ssize_t length;
-+#ifdef HAVE_READLINKAT
-+ int readlinkat_unavailable = 0;
-+#endif
-
- Py_BEGIN_ALLOW_THREADS
- #ifdef HAVE_READLINKAT
-- if (dir_fd != DEFAULT_DIR_FD)
-- length = readlinkat(dir_fd, path->narrow, buffer, MAXPATHLEN);
-- else
-+ if (dir_fd != DEFAULT_DIR_FD) {
-+ if (HAVE_READLINKAT_RUNTIME) {
-+ length = readlinkat(dir_fd, path->narrow, buffer, MAXPATHLEN);
-+ } else {
-+ readlinkat_unavailable = 1;
-+ }
-+ } else
- #endif
- length = readlink(path->narrow, buffer, MAXPATHLEN);
- Py_END_ALLOW_THREADS
-
-+#ifdef HAVE_READLINKAT
-+ if (readlinkat_unavailable) {
-+ argument_unavailable_error(NULL, "dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (length < 0) {
- return path_error(path);
- }
-@@ -8273,6 +8630,9 @@ os_symlink_impl(PyObject *module, path_t
- static int windows_has_symlink_unprivileged_flag = TRUE;
- #else
- int result;
-+#ifdef HAVE_SYMLINKAT
-+ int symlinkat_unavailable = 0;
-+#endif
- #endif
-
- if (PySys_Audit("os.symlink", "OOi", src->object, dst->object,
-@@ -8335,14 +8695,25 @@ os_symlink_impl(PyObject *module, path_t
- }
-
- Py_BEGIN_ALLOW_THREADS
--#if HAVE_SYMLINKAT
-- if (dir_fd != DEFAULT_DIR_FD)
-- result = symlinkat(src->narrow, dir_fd, dst->narrow);
-- else
-+#ifdef HAVE_SYMLINKAT
-+ if (dir_fd != DEFAULT_DIR_FD) {
-+ if (HAVE_SYMLINKAT_RUNTIME) {
-+ result = symlinkat(src->narrow, dir_fd, dst->narrow);
-+ } else {
-+ symlinkat_unavailable = 1;
-+ }
-+ } else
- #endif
- result = symlink(src->narrow, dst->narrow);
- Py_END_ALLOW_THREADS
-
-+#ifdef HAVE_SYMLINKAT
-+ if (symlinkat_unavailable) {
-+ argument_unavailable_error(NULL, "dir_fd");
-+ return NULL;
-+ }
-+#endif
-+
- if (result)
- return path_error2(src, dst);
- #endif
-@@ -8613,6 +8984,9 @@ os_open_impl(PyObject *module, path_t *p
- {
- int fd;
- int async_err = 0;
-+#ifdef HAVE_OPENAT
-+ int openat_unavailable = 0;
-+#endif
-
- #ifdef O_CLOEXEC
- int *atomic_flag_works = &_Py_open_cloexec_works;
-@@ -8637,9 +9011,15 @@ os_open_impl(PyObject *module, path_t *p
- fd = _wopen(path->wide, flags, mode);
- #else
- #ifdef HAVE_OPENAT
-- if (dir_fd != DEFAULT_DIR_FD)
-- fd = openat(dir_fd, path->narrow, flags, mode);
-- else
-+ if (dir_fd != DEFAULT_DIR_FD) {
-+ if (HAVE_OPENAT_RUNTIME) {
-+ fd = openat(dir_fd, path->narrow, flags, mode);
-+
-+ } else {
-+ openat_unavailable = 1;
-+ fd = -1;
-+ }
-+ } else
- #endif /* HAVE_OPENAT */
- fd = open(path->narrow, flags, mode);
- #endif /* !MS_WINDOWS */
-@@ -8647,6 +9027,13 @@ os_open_impl(PyObject *module, path_t *p
- } while (fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
- _Py_END_SUPPRESS_IPH
-
-+#ifdef HAVE_OPENAT
-+ if (openat_unavailable) {
-+ argument_unavailable_error(NULL, "dir_fd");
-+ return -1;
-+ }
-+#endif
-+
- if (fd < 0) {
- if (!async_err)
- PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object);
-@@ -9229,12 +9616,25 @@ os_preadv_impl(PyObject *module, int fd,
- } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
- #else
- do {
-+#ifdef __APPLE__
-+/* This entire function will be removed from the module dict when the API
-+ * is not available.
-+ */
-+#pragma clang diagnostic push
-+#pragma clang diagnostic ignored "-Wunguarded-availability"
-+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
-+#endif
- Py_BEGIN_ALLOW_THREADS
- _Py_BEGIN_SUPPRESS_IPH
- n = preadv(fd, iov, cnt, offset);
- _Py_END_SUPPRESS_IPH
- Py_END_ALLOW_THREADS
- } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
-+
-+#ifdef __APPLE__
-+#pragma clang diagnostic pop
-+#endif
-+
- #endif
-
- iov_cleanup(iov, buf, cnt);
-@@ -9841,6 +10241,15 @@ os_pwritev_impl(PyObject *module, int fd
- Py_END_ALLOW_THREADS
- } while (result < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
- #else
-+
-+#ifdef __APPLE__
-+/* This entire function will be removed from the module dict when the API
-+ * is not available.
-+ */
-+#pragma clang diagnostic push
-+#pragma clang diagnostic ignored "-Wunguarded-availability"
-+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
-+#endif
- do {
- Py_BEGIN_ALLOW_THREADS
- _Py_BEGIN_SUPPRESS_IPH
-@@ -9848,6 +10257,11 @@ os_pwritev_impl(PyObject *module, int fd
- _Py_END_SUPPRESS_IPH
- Py_END_ALLOW_THREADS
- } while (result < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
-+
-+#ifdef __APPLE__
-+#pragma clang diagnostic pop
-+#endif
-+
- #endif
-
- iov_cleanup(iov, buf, cnt);
-@@ -10737,13 +11151,6 @@ os_statvfs_impl(PyObject *module, path_t
- Py_BEGIN_ALLOW_THREADS
- #ifdef HAVE_FSTATVFS
- if (path->fd != -1) {
--#ifdef __APPLE__
-- /* handle weak-linking on Mac OS X 10.3 */
-- if (fstatvfs == NULL) {
-- fd_specified("statvfs", path->fd);
-- return NULL;
-- }
--#endif
- result = fstatvfs(path->fd, &st);
- }
- else
-@@ -12817,12 +13224,16 @@ DirEntry_fetch_stat(PyObject *module, Di
- const char *path = PyBytes_AS_STRING(ub);
- if (self->dir_fd != DEFAULT_DIR_FD) {
- #ifdef HAVE_FSTATAT
-+ if (HAVE_FSTATAT_RUNTIME) {
- result = fstatat(self->dir_fd, path, &st,
- follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
--#else
-+ } else
-+#endif /* HAVE_FSTATAT */
-+ {
-+ Py_DECREF(ub);
- PyErr_SetString(PyExc_NotImplementedError, "can't fetch stat");
- return NULL;
--#endif /* HAVE_FSTATAT */
-+ }
- }
- else
- #endif
-@@ -13609,6 +14020,7 @@ os_scandir_impl(PyObject *module, path_t
- errno = 0;
- #ifdef HAVE_FDOPENDIR
- if (path->fd != -1) {
-+ if (HAVE_FDOPENDIR_RUNTIME) {
- /* closedir() closes the FD, so we duplicate it */
- fd = _Py_dup(path->fd);
- if (fd == -1)
-@@ -13617,6 +14029,11 @@ os_scandir_impl(PyObject *module, path_t
- Py_BEGIN_ALLOW_THREADS
- iterator->dirp = fdopendir(fd);
- Py_END_ALLOW_THREADS
-+ } else {
-+ PyErr_SetString(PyExc_TypeError,
-+ "scandir: path should be string, bytes, os.PathLike or None, not int");
-+ return NULL;
-+ }
- }
- else
- #endif
-@@ -14687,137 +15104,210 @@ all_ins(PyObject *m)
- }
-
-
--static const char * const have_functions[] = {
-+
-+#define PROBE(name, test) \
-+ static int name(void) \
-+ { \
-+ if (test) { \
-+ return 1; \
-+ } else { \
-+ return 0; \
-+ } \
-+ }
-+
-+#ifdef HAVE_FSTATAT
-+PROBE(probe_fstatat, HAVE_FSTATAT_RUNTIME)
-+#endif
-
- #ifdef HAVE_FACCESSAT
-- "HAVE_FACCESSAT",
-+PROBE(probe_faccessat, HAVE_FACCESSAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_FCHMODAT
-+PROBE(probe_fchmodat, HAVE_FCHMODAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_FCHOWNAT
-+PROBE(probe_fchownat, HAVE_FCHOWNAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_LINKAT
-+PROBE(probe_linkat, HAVE_LINKAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_FDOPENDIR
-+PROBE(probe_fdopendir, HAVE_FDOPENDIR_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_MKDIRAT
-+PROBE(probe_mkdirat, HAVE_MKDIRAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_RENAMEAT
-+PROBE(probe_renameat, HAVE_RENAMEAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_UNLINKAT
-+PROBE(probe_unlinkat, HAVE_UNLINKAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_OPENAT
-+PROBE(probe_openat, HAVE_OPENAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_READLINKAT
-+PROBE(probe_readlinkat, HAVE_READLINKAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_SYMLINKAT
-+PROBE(probe_symlinkat, HAVE_SYMLINKAT_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_FUTIMENS
-+PROBE(probe_futimens, HAVE_FUTIMENS_RUNTIME)
-+#endif
-+
-+#ifdef HAVE_UTIMENSAT
-+PROBE(probe_utimensat, HAVE_UTIMENSAT_RUNTIME)
-+#endif
-+
-+
-+
-+
-+static const struct have_function {
-+ const char * const label;
-+ int (*probe)(void);
-+} have_functions[] = {
-+
-+#ifdef HAVE_FACCESSAT
-+ { "HAVE_FACCESSAT", probe_faccessat },
- #endif
-
- #ifdef HAVE_FCHDIR
-- "HAVE_FCHDIR",
-+ { "HAVE_FCHDIR", NULL },
- #endif
-
- #ifdef HAVE_FCHMOD
-- "HAVE_FCHMOD",
-+ { "HAVE_FCHMOD", NULL },
- #endif
-
- #ifdef HAVE_FCHMODAT
-- "HAVE_FCHMODAT",
-+ { "HAVE_FCHMODAT", probe_fchmodat },
- #endif
-
- #ifdef HAVE_FCHOWN
-- "HAVE_FCHOWN",
-+ { "HAVE_FCHOWN", NULL },
- #endif
-
- #ifdef HAVE_FCHOWNAT
-- "HAVE_FCHOWNAT",
-+ { "HAVE_FCHOWNAT", probe_fchownat },
- #endif
-
- #ifdef HAVE_FEXECVE
-- "HAVE_FEXECVE",
-+ { "HAVE_FEXECVE", NULL },
- #endif
-
- #ifdef HAVE_FDOPENDIR
-- "HAVE_FDOPENDIR",
-+ { "HAVE_FDOPENDIR", probe_fdopendir },
- #endif
-
- #ifdef HAVE_FPATHCONF
-- "HAVE_FPATHCONF",
-+ { "HAVE_FPATHCONF", NULL },
- #endif
-
- #ifdef HAVE_FSTATAT
-- "HAVE_FSTATAT",
-+ { "HAVE_FSTATAT", probe_fstatat },
- #endif
-
- #ifdef HAVE_FSTATVFS
-- "HAVE_FSTATVFS",
-+ { "HAVE_FSTATVFS", NULL },
- #endif
-
- #if defined HAVE_FTRUNCATE || defined MS_WINDOWS
-- "HAVE_FTRUNCATE",
-+ { "HAVE_FTRUNCATE", NULL },
- #endif
-
- #ifdef HAVE_FUTIMENS
-- "HAVE_FUTIMENS",
-+ { "HAVE_FUTIMENS", probe_futimens },
- #endif
-
- #ifdef HAVE_FUTIMES
-- "HAVE_FUTIMES",
-+ { "HAVE_FUTIMES", NULL },
- #endif
-
- #ifdef HAVE_FUTIMESAT
-- "HAVE_FUTIMESAT",
-+ { "HAVE_FUTIMESAT", NULL },
- #endif
-
- #ifdef HAVE_LINKAT
-- "HAVE_LINKAT",
-+ { "HAVE_LINKAT", probe_linkat },
- #endif
-
- #ifdef HAVE_LCHFLAGS
-- "HAVE_LCHFLAGS",
-+ { "HAVE_LCHFLAGS", NULL },
- #endif
-
- #ifdef HAVE_LCHMOD
-- "HAVE_LCHMOD",
-+ { "HAVE_LCHMOD", NULL },
- #endif
-
- #ifdef HAVE_LCHOWN
-- "HAVE_LCHOWN",
-+ { "HAVE_LCHOWN", NULL },
- #endif
-
- #ifdef HAVE_LSTAT
-- "HAVE_LSTAT",
-+ { "HAVE_LSTAT", NULL },
- #endif
-
- #ifdef HAVE_LUTIMES
-- "HAVE_LUTIMES",
-+ { "HAVE_LUTIMES", NULL },
- #endif
-
- #ifdef HAVE_MEMFD_CREATE
-- "HAVE_MEMFD_CREATE",
-+ { "HAVE_MEMFD_CREATE", NULL },
- #endif
-
- #ifdef HAVE_MKDIRAT
-- "HAVE_MKDIRAT",
-+ { "HAVE_MKDIRAT", probe_mkdirat },
- #endif
-
- #ifdef HAVE_MKFIFOAT
-- "HAVE_MKFIFOAT",
-+ { "HAVE_MKFIFOAT", NULL },
- #endif
-
- #ifdef HAVE_MKNODAT
-- "HAVE_MKNODAT",
-+ { "HAVE_MKNODAT", NULL },
- #endif
-
- #ifdef HAVE_OPENAT
-- "HAVE_OPENAT",
-+ { "HAVE_OPENAT", probe_openat },
- #endif
-
- #ifdef HAVE_READLINKAT
-- "HAVE_READLINKAT",
-+ { "HAVE_READLINKAT", probe_readlinkat },
- #endif
-
- #ifdef HAVE_RENAMEAT
-- "HAVE_RENAMEAT",
-+ { "HAVE_RENAMEAT", probe_renameat },
- #endif
-
- #ifdef HAVE_SYMLINKAT
-- "HAVE_SYMLINKAT",
-+ { "HAVE_SYMLINKAT", probe_symlinkat },
- #endif
-
- #ifdef HAVE_UNLINKAT
-- "HAVE_UNLINKAT",
-+ { "HAVE_UNLINKAT", probe_unlinkat },
- #endif
-
- #ifdef HAVE_UTIMENSAT
-- "HAVE_UTIMENSAT",
-+ { "HAVE_UTIMENSAT", probe_utimensat },
- #endif
-
- #ifdef MS_WINDOWS
-- "MS_WINDOWS",
-+ { "MS_WINDOWS", NULL },
- #endif
-
-- NULL
-+ { NULL, NULL }
- };
-
-
-@@ -14826,6 +15316,23 @@ posixmodule_exec(PyObject *m)
- {
- _posixstate *state = get_posix_state(m);
-
-+#if defined(HAVE_PWRITEV)
-+ if (HAVE_PWRITEV_RUNTIME) {} else {
-+ PyObject* dct = PyModule_GetDict(m);
-+
-+ if (dct == NULL) {
-+ return -1;
-+ }
-+
-+ if (PyDict_DelItemString(dct, "pwritev") == -1) {
-+ PyErr_Clear();
-+ }
-+ if (PyDict_DelItemString(dct, "preadv") == -1) {
-+ PyErr_Clear();
-+ }
-+ }
-+#endif
-+
- /* Initialize environ dictionary */
- PyObject *v = convertenviron();
- Py_XINCREF(v);
-@@ -14938,44 +15445,6 @@ posixmodule_exec(PyObject *m)
- PyModule_AddObject(m, "uname_result", (PyObject *)UnameResultType);
- state->UnameResultType = (PyObject *)UnameResultType;
-
--#ifdef __APPLE__
-- /*
-- * Step 2 of weak-linking support on Mac OS X.
-- *
-- * The code below removes functions that are not available on the
-- * currently active platform.
-- *
-- * This block allow one to use a python binary that was build on
-- * OSX 10.4 on OSX 10.3, without losing access to new APIs on
-- * OSX 10.4.
-- */
--#ifdef HAVE_FSTATVFS
-- if (fstatvfs == NULL) {
-- if (PyObject_DelAttrString(m, "fstatvfs") == -1) {
-- return -1;
-- }
-- }
--#endif /* HAVE_FSTATVFS */
--
--#ifdef HAVE_STATVFS
-- if (statvfs == NULL) {
-- if (PyObject_DelAttrString(m, "statvfs") == -1) {
-- return -1;
-- }
-- }
--#endif /* HAVE_STATVFS */
--
--# ifdef HAVE_LCHOWN
-- if (lchown == NULL) {
-- if (PyObject_DelAttrString(m, "lchown") == -1) {
-- return -1;
-- }
-- }
--#endif /* HAVE_LCHOWN */
--
--
--#endif /* __APPLE__ */
--
- if ((state->billion = PyLong_FromLong(1000000000)) == NULL)
- return -1;
- #if defined(HAVE_WAIT3) || defined(HAVE_WAIT4)
-@@ -15005,14 +15474,17 @@ posixmodule_exec(PyObject *m)
- if (!list) {
- return -1;
- }
-- for (const char * const *trace = have_functions; *trace; trace++) {
-- PyObject *unicode = PyUnicode_DecodeASCII(*trace, strlen(*trace), NULL);
-+ for (const struct have_function *trace = have_functions; trace->label; trace++) {
-+ PyObject *unicode;
-+ if (trace->probe && !trace->probe()) continue;
-+ unicode = PyUnicode_DecodeASCII(trace->label, strlen(trace->label), NULL);
- if (!unicode)
- return -1;
- if (PyList_Append(list, unicode))
- return -1;
- Py_DECREF(unicode);
- }
-+
- PyModule_AddObject(m, "_have_functions", list);
-
- return 0;
diff --git a/lang/python39/patches/patch-Modules_timemodule.c b/lang/python39/patches/patch-Modules_timemodule.c
deleted file mode 100644
index e3b177a6094..00000000000
--- a/lang/python39/patches/patch-Modules_timemodule.c
+++ /dev/null
@@ -1,322 +0,0 @@
-$NetBSD: patch-Modules_timemodule.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Modules/timemodule.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Modules/timemodule.c
-@@ -51,6 +51,15 @@
- #define _Py_tzname tzname
- #endif
-
-+#if defined(__APPLE__ ) && defined(__has_builtin)
-+# if __has_builtin(__builtin_available)
-+# define HAVE_CLOCK_GETTIME_RUNTIME __builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)
-+# endif
-+#endif
-+#ifndef HAVE_CLOCK_GETTIME_RUNTIME
-+# define HAVE_CLOCK_GETTIME_RUNTIME 1
-+#endif
-+
- #define SEC_TO_NS (1000 * 1000 * 1000)
-
- /* Forward declarations */
-@@ -149,6 +158,16 @@ perf_counter(_Py_clock_info_t *info)
- }
-
- #ifdef HAVE_CLOCK_GETTIME
-+
-+#ifdef __APPLE__
-+/*
-+ * The clock_* functions will be removed from the module
-+ * dict entirely when the C API is not available.
-+ */
-+#pragma clang diagnostic push
-+#pragma clang diagnostic ignored "-Wunguarded-availability"
-+#endif
-+
- static PyObject *
- time_clock_gettime(PyObject *self, PyObject *args)
- {
-@@ -297,6 +316,11 @@ PyDoc_STRVAR(clock_getres_doc,
- "clock_getres(clk_id) -> floating point number\n\
- \n\
- Return the resolution (precision) of the specified clock clk_id.");
-+
-+#ifdef __APPLE__
-+#pragma clang diagnostic pop
-+#endif
-+
- #endif /* HAVE_CLOCK_GETRES */
-
- #ifdef HAVE_PTHREAD_GETCPUCLOCKID
-@@ -1162,31 +1186,35 @@ _PyTime_GetProcessTimeWithInfo(_PyTime_t
- #if defined(HAVE_CLOCK_GETTIME) \
- && (defined(CLOCK_PROCESS_CPUTIME_ID) || defined(CLOCK_PROF))
- struct timespec ts;
-+
-+ if (HAVE_CLOCK_GETTIME_RUNTIME) {
-+
- #ifdef CLOCK_PROF
-- const clockid_t clk_id = CLOCK_PROF;
-- const char *function = "clock_gettime(CLOCK_PROF)";
-+ const clockid_t clk_id = CLOCK_PROF;
-+ const char *function = "clock_gettime(CLOCK_PROF)";
- #else
-- const clockid_t clk_id = CLOCK_PROCESS_CPUTIME_ID;
-- const char *function = "clock_gettime(CLOCK_PROCESS_CPUTIME_ID)";
-+ const clockid_t clk_id = CLOCK_PROCESS_CPUTIME_ID;
-+ const char *function = "clock_gettime(CLOCK_PROCESS_CPUTIME_ID)";
- #endif
-
-- if (clock_gettime(clk_id, &ts) == 0) {
-- if (info) {
-- struct timespec res;
-- info->implementation = function;
-- info->monotonic = 1;
-- info->adjustable = 0;
-- if (clock_getres(clk_id, &res)) {
-- PyErr_SetFromErrno(PyExc_OSError);
-- return -1;
-+ if (clock_gettime(clk_id, &ts) == 0) {
-+ if (info) {
-+ struct timespec res;
-+ info->implementation = function;
-+ info->monotonic = 1;
-+ info->adjustable = 0;
-+ if (clock_getres(clk_id, &res)) {
-+ PyErr_SetFromErrno(PyExc_OSError);
-+ return -1;
-+ }
-+ info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
- }
-- info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
-- }
-
-- if (_PyTime_FromTimespec(tp, &ts) < 0) {
-- return -1;
-+ if (_PyTime_FromTimespec(tp, &ts) < 0) {
-+ return -1;
-+ }
-+ return 0;
- }
-- return 0;
- }
- #endif
-
-@@ -1373,6 +1401,16 @@ _PyTime_GetThreadTimeWithInfo(_PyTime_t
-
- #elif defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
- #define HAVE_THREAD_TIME
-+
-+#if defined(__APPLE__) && defined(__has_attribute) && __has_attribute(availability)
-+static int
-+_PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info)
-+ __attribute__((availability(macos, introduced=10.12)))
-+ __attribute__((availability(ios, introduced=10.0)))
-+ __attribute__((availability(tvos, introduced=10.0)))
-+ __attribute__((availability(watchos, introduced=3.0)));
-+#endif
-+
- static int
- _PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info)
- {
-@@ -1404,6 +1442,15 @@ _PyTime_GetThreadTimeWithInfo(_PyTime_t
- #endif
-
- #ifdef HAVE_THREAD_TIME
-+#ifdef __APPLE__
-+/*
-+ * The clock_* functions will be removed from the module
-+ * dict entirely when the C API is not available.
-+ */
-+#pragma clang diagnostic push
-+#pragma clang diagnostic ignored "-Wunguarded-availability"
-+#endif
-+
- static PyObject *
- time_thread_time(PyObject *self, PyObject *unused)
- {
-@@ -1434,6 +1481,11 @@ PyDoc_STRVAR(thread_time_ns_doc,
- \n\
- Thread time for profiling as nanoseconds:\n\
- sum of the kernel and user-space CPU time.");
-+
-+#ifdef __APPLE__
-+#pragma clang diagnostic pop
-+#endif
-+
- #endif
-
-
-@@ -1483,9 +1535,19 @@ time_get_clock_info(PyObject *self, PyOb
- }
- #ifdef HAVE_THREAD_TIME
- else if (strcmp(name, "thread_time") == 0) {
-- if (_PyTime_GetThreadTimeWithInfo(&t, &info) < 0) {
-+
-+#ifdef __APPLE__
-+ if (HAVE_CLOCK_GETTIME_RUNTIME) {
-+#endif
-+ if (_PyTime_GetThreadTimeWithInfo(&t, &info) < 0) {
-+ return NULL;
-+ }
-+#ifdef __APPLE__
-+ } else {
-+ PyErr_SetString(PyExc_ValueError, "unknown clock");
- return NULL;
- }
-+#endif
- }
- #endif
- else {
-@@ -1766,68 +1828,116 @@ if it is -1, mktime() should guess based
- static int
- time_exec(PyObject *module)
- {
-+#if defined(__APPLE__) && defined(HAVE_CLOCK_GETTIME)
-+ if (HAVE_CLOCK_GETTIME_RUNTIME) {
-+ /* pass: ^^^ cannot use '!' here */
-+ } else {
-+ PyObject* dct = PyModule_GetDict(module);
-+ if (dct == NULL) {
-+ return -1;
-+ }
-+
-+ if (PyDict_DelItemString(dct, "clock_gettime") == -1) {
-+ PyErr_Clear();
-+ }
-+ if (PyDict_DelItemString(dct, "clock_gettime_ns") == -1) {
-+ PyErr_Clear();
-+ }
-+ if (PyDict_DelItemString(dct, "clock_settime") == -1) {
-+ PyErr_Clear();
-+ }
-+ if (PyDict_DelItemString(dct, "clock_settime_ns") == -1) {
-+ PyErr_Clear();
-+ }
-+ if (PyDict_DelItemString(dct, "clock_getres") == -1) {
-+ PyErr_Clear();
-+ }
-+ }
-+#endif
-+#if defined(__APPLE__) && defined(HAVE_THREAD_TIME)
-+ if (HAVE_CLOCK_GETTIME_RUNTIME) {
-+ /* pass: ^^^ cannot use '!' here */
-+ } else {
-+ PyObject* dct = PyModule_GetDict(module);
-+
-+ if (PyDict_DelItemString(dct, "thread_time") == -1) {
-+ PyErr_Clear();
-+ }
-+ if (PyDict_DelItemString(dct, "thread_time_ns") == -1) {
-+ PyErr_Clear();
-+ }
-+ }
-+#endif
- /* Set, or reset, module variables like time.timezone */
- if (init_timezone(module) < 0) {
- return -1;
- }
-
- #if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES)
-+ if (HAVE_CLOCK_GETTIME_RUNTIME) {
-
- #ifdef CLOCK_REALTIME
-- if (PyModule_AddIntMacro(module, CLOCK_REALTIME) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_REALTIME) < 0) {
-+ return -1;
-+ }
- #endif
-+
- #ifdef CLOCK_MONOTONIC
-- if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC) < 0) {
-- return -1;
-- }
-+
-+ if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC) < 0) {
-+ return -1;
-+ }
-+
- #endif
- #ifdef CLOCK_MONOTONIC_RAW
-- if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC_RAW) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC_RAW) < 0) {
-+ return -1;
-+ }
- #endif
-+
- #ifdef CLOCK_HIGHRES
-- if (PyModule_AddIntMacro(module, CLOCK_HIGHRES) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_HIGHRES) < 0) {
-+ return -1;
-+ }
- #endif
- #ifdef CLOCK_PROCESS_CPUTIME_ID
-- if (PyModule_AddIntMacro(module, CLOCK_PROCESS_CPUTIME_ID) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_PROCESS_CPUTIME_ID) < 0) {
-+ return -1;
-+ }
- #endif
-+
- #ifdef CLOCK_THREAD_CPUTIME_ID
-- if (PyModule_AddIntMacro(module, CLOCK_THREAD_CPUTIME_ID) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_THREAD_CPUTIME_ID) < 0) {
-+ return -1;
-+ }
- #endif
- #ifdef CLOCK_PROF
-- if (PyModule_AddIntMacro(module, CLOCK_PROF) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_PROF) < 0) {
-+ return -1;
-+ }
- #endif
- #ifdef CLOCK_BOOTTIME
-- if (PyModule_AddIntMacro(module, CLOCK_BOOTTIME) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_BOOTTIME) < 0) {
-+ return -1;
-+ }
- #endif
- #ifdef CLOCK_TAI
-- if (PyModule_AddIntMacro(module, CLOCK_TAI) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_TAI) < 0) {
-+ return -1;
-+ }
- #endif
- #ifdef CLOCK_UPTIME
-- if (PyModule_AddIntMacro(module, CLOCK_UPTIME) < 0) {
-- return -1;
-- }
-+ if (PyModule_AddIntMacro(module, CLOCK_UPTIME) < 0) {
-+ return -1;
-+ }
- #endif
- #ifdef CLOCK_UPTIME_RAW
-- if (PyModule_AddIntMacro(module, CLOCK_UPTIME_RAW) < 0) {
-- return -1;
-- }
-+
-+ if (PyModule_AddIntMacro(module, CLOCK_UPTIME_RAW) < 0) {
-+ return -1;
-+ }
- #endif
-+ }
-
- #endif /* defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES) */
-
diff --git a/lang/python39/patches/patch-Python_bootstrap__hash.c b/lang/python39/patches/patch-Python_bootstrap__hash.c
deleted file mode 100644
index 301c566d9ba..00000000000
--- a/lang/python39/patches/patch-Python_bootstrap__hash.c
+++ /dev/null
@@ -1,73 +0,0 @@
-$NetBSD: patch-Python_bootstrap__hash.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Python/bootstrap_hash.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Python/bootstrap_hash.c
-@@ -25,6 +25,16 @@
- # include <sanitizer/msan_interface.h>
- #endif
-
-+#if defined(__APPLE__) && defined(__has_builtin)
-+# if __has_builtin(__builtin_available)
-+# define HAVE_GETENTRYPY_GETRANDOM_RUNTIME __builtin_available(macOS 10.12, iOS 10.10, tvOS 10.0, watchOS 3.0, *)
-+# endif
-+#endif
-+#ifndef HAVE_GETENTRYPY_GETRANDOM_RUNTIME
-+# define HAVE_GETENTRYPY_GETRANDOM_RUNTIME 1
-+#endif
-+
-+
- #ifdef Py_DEBUG
- int _Py_HashSecret_Initialized = 0;
- #else
-@@ -208,6 +218,16 @@ py_getrandom(void *buffer, Py_ssize_t si
- error.
-
- getentropy() is retried if it failed with EINTR: interrupted by a signal. */
-+
-+#if defined(__APPLE__) && defined(__has_attribute) && __has_attribute(availability)
-+static int
-+py_getentropy(char *buffer, Py_ssize_t size, int raise)
-+ __attribute__((availability(macos,introduced=10.12)))
-+ __attribute__((availability(ios,introduced=10.0)))
-+ __attribute__((availability(tvos,introduced=10.0)))
-+ __attribute__((availability(watchos,introduced=3.0)));
-+#endif
-+
- static int
- py_getentropy(char *buffer, Py_ssize_t size, int raise)
- {
-@@ -498,19 +518,21 @@ pyurandom(void *buffer, Py_ssize_t size,
- #else
-
- #if defined(PY_GETRANDOM) || defined(PY_GETENTROPY)
-+ if (HAVE_GETENTRYPY_GETRANDOM_RUNTIME) {
- #ifdef PY_GETRANDOM
-- res = py_getrandom(buffer, size, blocking, raise);
-+ res = py_getrandom(buffer, size, blocking, raise);
- #else
-- res = py_getentropy(buffer, size, raise);
-+ res = py_getentropy(buffer, size, raise);
- #endif
-- if (res < 0) {
-- return -1;
-- }
-- if (res == 1) {
-- return 0;
-- }
-- /* getrandom() or getentropy() function is not available: failed with
-- ENOSYS or EPERM. Fall back on reading from /dev/urandom. */
-+ if (res < 0) {
-+ return -1;
-+ }
-+ if (res == 1) {
-+ return 0;
-+ }
-+ /* getrandom() or getentropy() function is not available: failed with
-+ ENOSYS or EPERM. Fall back on reading from /dev/urandom. */
-+ } /* end of availability block */
- #endif
-
- return dev_urandom(buffer, size, raise);
diff --git a/lang/python39/patches/patch-Python_pytime.c b/lang/python39/patches/patch-Python_pytime.c
deleted file mode 100644
index 31235692d27..00000000000
--- a/lang/python39/patches/patch-Python_pytime.c
+++ /dev/null
@@ -1,73 +0,0 @@
-$NetBSD: patch-Python_pytime.c,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- Python/pytime.c.orig 2020-10-05 15:07:58.000000000 +0000
-+++ Python/pytime.c
-@@ -5,6 +5,12 @@
-
- #if defined(__APPLE__)
- #include <mach/mach_time.h> /* mach_absolute_time(), mach_timebase_info() */
-+
-+#if defined(__APPLE__) && defined(__has_builtin)
-+# if __has_builtin(__builtin_available)
-+# define HAVE_CLOCK_GETTIME_RUNTIME __builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)
-+# endif
-+#endif
- #endif
-
- #define _PyTime_check_mul_overflow(a, b) \
-@@ -683,15 +689,22 @@ pygettimeofday(_PyTime_t *tp, _Py_clock_
-
- #else /* MS_WINDOWS */
- int err;
--#ifdef HAVE_CLOCK_GETTIME
-+#if defined(HAVE_CLOCK_GETTIME)
- struct timespec ts;
--#else
-+#endif
-+
-+#if !defined(HAVE_CLOCK_GETTIME) || defined(__APPLE__)
- struct timeval tv;
- #endif
-
- assert(info == NULL || raise);
-
- #ifdef HAVE_CLOCK_GETTIME
-+
-+#ifdef HAVE_CLOCK_GETTIME_RUNTIME
-+ if (HAVE_CLOCK_GETTIME_RUNTIME) {
-+#endif
-+
- err = clock_gettime(CLOCK_REALTIME, &ts);
- if (err) {
- if (raise) {
-@@ -715,7 +728,14 @@ pygettimeofday(_PyTime_t *tp, _Py_clock_
- info->resolution = 1e-9;
- }
- }
--#else /* HAVE_CLOCK_GETTIME */
-+
-+#ifdef HAVE_CLOCK_GETTIME_RUNTIME
-+ } else {
-+#endif
-+
-+#endif
-+
-+#if !defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_GETTIME_RUNTIME)
-
- /* test gettimeofday() */
- err = gettimeofday(&tv, (struct timezone *)NULL);
-@@ -735,6 +755,11 @@ pygettimeofday(_PyTime_t *tp, _Py_clock_
- info->monotonic = 0;
- info->adjustable = 1;
- }
-+
-+#if defined(HAVE_CLOCK_GETTIME_RUNTIME) && defined(HAVE_CLOCK_GETTIME)
-+ } /* end of availibity block */
-+#endif
-+
- #endif /* !HAVE_CLOCK_GETTIME */
- #endif /* !MS_WINDOWS */
- return 0;
diff --git a/lang/python39/patches/patch-configure b/lang/python39/patches/patch-configure
index cc2a0ca8c98..0e44e5846e4 100644
--- a/lang/python39/patches/patch-configure
+++ b/lang/python39/patches/patch-configure
@@ -1,34 +1,13 @@
-$NetBSD: patch-configure,v 1.2 2020/11/12 10:58:21 sjmulder Exp $
+$NetBSD: patch-configure,v 1.3 2020/12/08 14:30:40 adam Exp $
- - Use gnu99 instead of c99 to avoid "alloca() undefined" problems.
- - Fix linking on Darwin; don't use -stack_size.
- - Changes for consistency across pkgsrc platforms.
- - Simplify _sysconfigdata to include only platform name.
- - Support for macOS 11 and Apple Silicon (ARM). Backported from:
- https://github.com/python/cpython/pull/22855
+Use gnu99 instead of c99 to avoid "alloca() undefined" problems.
+Fix linking on Darwin; don't use -stack_size.
+Changes for consistency across pkgsrc platforms.
+Simplify _sysconfigdata to include only platform name.
---- configure.orig 2020-10-05 15:07:58.000000000 +0000
+--- configure.orig 2020-12-07 14:02:38.000000000 +0000
+++ configure
-@@ -1510,8 +1510,8 @@ Optional Packages:
- specify the kind of universal binary that should be
- created. this option is only valid when
- --enable-universalsdk is set; options are:
-- ("32-bit", "64-bit", "3-way", "intel", "intel-32",
-- "intel-64", or "all") see Mac/README.rst
-+ ("universal2", "32-bit", "64-bit", "3-way", "intel",
-+ "intel-32", "intel-64", or "all") see Mac/README.rst
- --with-framework-name=FRAMEWORK
- specify the name for the python framework on macOS
- only valid when --enable-framework is set. see
-@@ -6954,14 +6954,14 @@ fi
-
-
-
--# The -arch flags for universal builds on OSX
-+# The -arch flags for universal builds on macOS
- UNIVERSAL_ARCH_FLAGS=
-
-
+@@ -6961,7 +6961,7 @@ UNIVERSAL_ARCH_FLAGS=
# tweak BASECFLAGS based on compiler and platform
case $GCC in
yes)
@@ -37,51 +16,7 @@ $NetBSD: patch-configure,v 1.2 2020/11/12 10:58:21 sjmulder Exp $
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wextra" >&5
$as_echo_n "checking for -Wextra... " >&6; }
-@@ -7481,6 +7481,11 @@ $as_echo "$CC" >&6; }
- LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
- ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
- ;;
-+ universal2)
-+ UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
-+ LIPO_32BIT_FLAGS=""
-+ ARCH_RUN_32BIT="true"
-+ ;;
- intel)
- UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
- LIPO_32BIT_FLAGS="-extract i386"
-@@ -7502,7 +7507,7 @@ $as_echo "$CC" >&6; }
- ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
- ;;
- *)
-- as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5
-+ as_fn_error $? "proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way" "$LINENO" 5
- ;;
- esac
-
-@@ -9334,7 +9339,7 @@ fi
- MACOSX_DEFAULT_ARCH="ppc"
- ;;
- *)
-- as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5
-+ as_fn_error $? "Unexpected output of 'arch' on macOS" "$LINENO" 5
- ;;
- esac
- else
-@@ -9344,9 +9349,12 @@ fi
- ;;
- ppc)
- MACOSX_DEFAULT_ARCH="ppc64"
-+ ;;
-+ arm64)
-+ MACOSX_DEFAULT_ARCH="arm64"
- ;;
- *)
-- as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5
-+ as_fn_error $? "Unexpected output of 'arch' on macOS" "$LINENO" 5
- ;;
- esac
-
-@@ -9617,7 +9625,6 @@ then
+@@ -9650,7 +9650,6 @@ then
# to ensure that tests don't crash
# Note: This matches the value of THREAD_STACK_SIZE in
# thread_pthread.h
@@ -89,39 +24,7 @@ $NetBSD: patch-configure,v 1.2 2020/11/12 10:58:21 sjmulder Exp $
if test "$enable_framework"
then
-@@ -11989,6 +11996,31 @@ $as_echo "no" >&6; }
-
- fi
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _dyld_shared_cache_contains_path" >&5
-+$as_echo_n "checking for _dyld_shared_cache_contains_path... " >&6; }
-+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+#include <mach-o/dyld.h>
-+int
-+main ()
-+{
-+void *x=_dyld_shared_cache_contains_path
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+
-+$as_echo "#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH 1" >>confdefs.h
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memfd_create" >&5
- $as_echo_n "checking for memfd_create... " >&6; }
-@@ -14437,10 +14469,10 @@ _ACEOF
+@@ -14495,10 +14494,10 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
@@ -134,7 +37,7 @@ $NetBSD: patch-configure,v 1.2 2020/11/12 10:58:21 sjmulder Exp $
if test "$ax_cv_c_float_words_bigendian" = unknown; then
ax_cv_c_float_words_bigendian=no
else
-@@ -15326,8 +15358,6 @@ fi
+@@ -15384,8 +15383,6 @@ fi
case $ac_sys_system in
@@ -143,7 +46,7 @@ $NetBSD: patch-configure,v 1.2 2020/11/12 10:58:21 sjmulder Exp $
*)
EXT_SUFFIX=${SHLIB_SUFFIX};;
esac
-@@ -15383,11 +15413,7 @@ fi
+@@ -15441,11 +15438,7 @@ fi
diff --git a/lang/python39/patches/patch-configure.ac b/lang/python39/patches/patch-configure.ac
deleted file mode 100644
index 4e10110ca26..00000000000
--- a/lang/python39/patches/patch-configure.ac
+++ /dev/null
@@ -1,82 +0,0 @@
-$NetBSD: patch-configure.ac,v 1.1 2020/11/12 10:58:21 sjmulder Exp $
-
-Support for macOS 11 and Apple Silicon (ARM). Backported from:
-https://github.com/python/cpython/pull/22855
-
---- configure.ac.orig 2020-10-05 15:07:58.000000000 +0000
-+++ configure.ac
-@@ -218,7 +218,7 @@ AC_ARG_WITH(universal-archs,
- AS_HELP_STRING([--with-universal-archs=ARCH],
- [specify the kind of universal binary that should be created. this option is
- only valid when --enable-universalsdk is set; options are:
-- ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all")
-+ ("universal2", "32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all")
- see Mac/README.rst]),
- [
- UNIVERSAL_ARCHS="$withval"
-@@ -1587,7 +1587,7 @@ AC_SUBST(BASECFLAGS)
- AC_SUBST(CFLAGS_NODIST)
- AC_SUBST(LDFLAGS_NODIST)
-
--# The -arch flags for universal builds on OSX
-+# The -arch flags for universal builds on macOS
- UNIVERSAL_ARCH_FLAGS=
- AC_SUBST(UNIVERSAL_ARCH_FLAGS)
-
-@@ -1888,6 +1888,11 @@ yes)
- LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
- ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
- ;;
-+ universal2)
-+ UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
-+ LIPO_32BIT_FLAGS=""
-+ ARCH_RUN_32BIT="true"
-+ ;;
- intel)
- UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
- LIPO_32BIT_FLAGS="-extract i386"
-@@ -1909,7 +1914,7 @@ yes)
- ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
- ;;
- *)
-- AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way])
-+ AC_MSG_ERROR([proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way])
- ;;
- esac
-
-@@ -2479,7 +2484,7 @@ case $ac_sys_system/$ac_sys_release in
- MACOSX_DEFAULT_ARCH="ppc"
- ;;
- *)
-- AC_MSG_ERROR([Unexpected output of 'arch' on OSX])
-+ AC_MSG_ERROR([Unexpected output of 'arch' on macOS])
- ;;
- esac
- else
-@@ -2489,9 +2494,12 @@ case $ac_sys_system/$ac_sys_release in
- ;;
- ppc)
- MACOSX_DEFAULT_ARCH="ppc64"
-+ ;;
-+ arm64)
-+ MACOSX_DEFAULT_ARCH="arm64"
- ;;
- *)
-- AC_MSG_ERROR([Unexpected output of 'arch' on OSX])
-+ AC_MSG_ERROR([Unexpected output of 'arch' on macOS])
- ;;
- esac
-
-@@ -3770,6 +3778,12 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- AC_MSG_RESULT(yes)],
- [AC_MSG_RESULT(no)
- ])
-+AC_MSG_CHECKING(for _dyld_shared_cache_contains_path)
-+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mach-o/dyld.h>]], [[void *x=_dyld_shared_cache_contains_path]])],
-+ [AC_DEFINE(HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH, 1, Define if you have the '_dyld_shared_cache_contains_path' function.)
-+ AC_MSG_RESULT(yes)],
-+ [AC_MSG_RESULT(no)
-+])
-
- AC_MSG_CHECKING(for memfd_create)
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
diff --git a/lang/python39/patches/patch-pyconfig.h.in b/lang/python39/patches/patch-pyconfig.h.in
index 1fe5a3ff9f4..7b5c0cfa100 100644
--- a/lang/python39/patches/patch-pyconfig.h.in
+++ b/lang/python39/patches/patch-pyconfig.h.in
@@ -1,8 +1,6 @@
-$NetBSD: patch-pyconfig.h.in,v 1.2 2020/11/12 10:58:21 sjmulder Exp $
+$NetBSD: patch-pyconfig.h.in,v 1.3 2020/12/08 14:30:40 adam Exp $
- - detect netcan/can.h on NetBSD
- - Support for macOS 11 and Apple Silicon (ARM). Backported from:
- https://github.com/python/cpython/pull/22855
+Detect netcan/can.h on NetBSD
--- pyconfig.h.in.orig 2020-10-05 15:07:58.000000000 +0000
+++ pyconfig.h.in
@@ -16,13 +14,3 @@ $NetBSD: patch-pyconfig.h.in,v 1.2 2020/11/12 10:58:21 sjmulder Exp $
/* Define to 1 if you have the <linux/netlink.h> header file. */
#undef HAVE_LINUX_NETLINK_H
-@@ -778,6 +781,9 @@
- /* Define if you have the 'prlimit' functions. */
- #undef HAVE_PRLIMIT
-
-+/* Define if you have the '_dyld_shared_cache_contains_path' function. */
-+#undef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH
-+
- /* Define to 1 if you have the <process.h> header file. */
- #undef HAVE_PROCESS_H
-
diff --git a/lang/python39/patches/patch-setup.py b/lang/python39/patches/patch-setup.py
index 2102f3ea1b2..c84401a0a9a 100644
--- a/lang/python39/patches/patch-setup.py
+++ b/lang/python39/patches/patch-setup.py
@@ -1,16 +1,14 @@
-$NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
+$NetBSD: patch-setup.py,v 1.4 2020/12/08 14:30:40 adam Exp $
- - Disable certain modules, so they can be built as separate packages.
- - Do not look for ncursesw.
- - Assume panel_library is correct; this is a fix for ncurses' gnupanel
- which will get transformed to panel in buildlink.
- - Also look for uuid/uuid.h.
- - Support for macOS 11 and Apple Silicon (ARM). Backported from:
- https://github.com/python/cpython/pull/22855
+Disable certain modules, so they can be built as separate packages.
+Do not look for ncursesw.
+Assume panel_library is correct; this is a fix for ncurses' gnupanel
+which will get transformed to panel in buildlink.
+Also look for uuid/uuid.h.
---- setup.py.orig 2020-10-05 15:07:58.000000000 +0000
+--- setup.py.orig 2020-12-07 14:02:38.000000000 +0000
+++ setup.py
-@@ -29,7 +29,7 @@ except ImportError:
+@@ -30,7 +30,7 @@ except ImportError:
SUBPROCESS_BOOTSTRAP = True
@@ -19,7 +17,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
from distutils.command.build_ext import build_ext
from distutils.command.build_scripts import build_scripts
from distutils.command.install import install
-@@ -43,7 +43,7 @@ from distutils.spawn import find_executa
+@@ -44,7 +44,7 @@ from distutils.spawn import find_executa
TEST_EXTENSIONS = True
# This global variable is used to hold the list of modules to be disabled.
@@ -28,9 +26,9 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
def get_platform():
-@@ -239,6 +239,16 @@ def is_macosx_sdk_path(path):
- or path.startswith('/Library/') )
-
+@@ -224,6 +224,16 @@ def grep_headers_for(function, headers):
+ return True
+ return False
+def grep_headers_for(function, headers):
+ for header in headers:
@@ -45,7 +43,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
def find_file(filename, std_dirs, paths):
"""Searches for the directory where a given file is located,
and returns a possibly-empty list of additional directories, or None
-@@ -740,15 +750,15 @@ class PyBuildExt(build_ext):
+@@ -725,15 +735,15 @@ class PyBuildExt(build_ext):
add_dir_to_list(dir_list, directory)
def configure_compiler(self):
@@ -70,7 +68,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
self.add_multiarch_paths()
self.add_ldflags_cppflags()
-@@ -796,6 +806,9 @@ class PyBuildExt(build_ext):
+@@ -781,6 +791,9 @@ class PyBuildExt(build_ext):
self.lib_dirs += ['/usr/lib/hpux64', '/usr/lib/hpux32']
if MACOS:
@@ -80,7 +78,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
# This should work on any unixy platform ;-)
# If the user has bothered specifying additional -I and -L flags
# in OPT and LDFLAGS we might as well use them here.
-@@ -1013,8 +1026,6 @@ class PyBuildExt(build_ext):
+@@ -998,8 +1011,6 @@ class PyBuildExt(build_ext):
# use the same library for the readline and curses modules.
if 'curses' in readline_termcap_library:
curses_library = readline_termcap_library
@@ -89,7 +87,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
# Issue 36210: OSS provided ncurses does not link on AIX
# Use IBM supplied 'curses' for successful build of _curses
elif AIX and self.compiler.find_library_file(self.lib_dirs, 'curses'):
-@@ -1116,8 +1127,7 @@ class PyBuildExt(build_ext):
+@@ -1101,8 +1112,7 @@ class PyBuildExt(build_ext):
# If the curses module is enabled, check for the panel module
# _curses_panel needs some form of ncurses
skip_curses_panel = True if AIX else False
@@ -99,7 +97,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
self.add(Extension('_curses_panel', ['_curses_panel.c'],
include_dirs=curses_includes,
define_macros=curses_defines,
-@@ -1368,6 +1378,31 @@ class PyBuildExt(build_ext):
+@@ -1353,6 +1363,31 @@ class PyBuildExt(build_ext):
dbm_order = ['gdbm']
# The standard Unix dbm module:
if not CYGWIN:
@@ -131,7 +129,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
config_args = [arg.strip("'")
for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
dbm_args = [arg for arg in config_args
-@@ -1379,7 +1414,7 @@ class PyBuildExt(build_ext):
+@@ -1364,7 +1399,7 @@ class PyBuildExt(build_ext):
dbmext = None
for cand in dbm_order:
if cand == "ndbm":
@@ -140,7 +138,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
# Some systems have -lndbm, others have -lgdbm_compat,
# others don't have either
if self.compiler.find_library_file(self.lib_dirs,
-@@ -1779,6 +1814,8 @@ class PyBuildExt(build_ext):
+@@ -1764,6 +1799,8 @@ class PyBuildExt(build_ext):
def detect_uuid(self):
# Build the _uuid module if possible
uuid_incs = find_file("uuid.h", self.inc_dirs, ["/usr/include/uuid"])
@@ -149,133 +147,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
if uuid_incs is not None:
if self.compiler.find_library_file(self.lib_dirs, 'uuid'):
uuid_libs = ['uuid']
-@@ -2101,43 +2138,17 @@ class PyBuildExt(build_ext):
- library_dirs=added_lib_dirs))
- return True
-
-- def configure_ctypes_darwin(self, ext):
-- # Darwin (OS X) uses preconfigured files, in
-- # the Modules/_ctypes/libffi_osx directory.
-- ffi_srcdir = os.path.abspath(os.path.join(self.srcdir, 'Modules',
-- '_ctypes', 'libffi_osx'))
-- sources = [os.path.join(ffi_srcdir, p)
-- for p in ['ffi.c',
-- 'x86/darwin64.S',
-- 'x86/x86-darwin.S',
-- 'x86/x86-ffi_darwin.c',
-- 'x86/x86-ffi64.c',
-- 'powerpc/ppc-darwin.S',
-- 'powerpc/ppc-darwin_closure.S',
-- 'powerpc/ppc-ffi_darwin.c',
-- 'powerpc/ppc64-darwin_closure.S',
-- ]]
--
-- # Add .S (preprocessed assembly) to C compiler source extensions.
-- self.compiler.src_extensions.append('.S')
--
-- include_dirs = [os.path.join(ffi_srcdir, 'include'),
-- os.path.join(ffi_srcdir, 'powerpc')]
-- ext.include_dirs.extend(include_dirs)
-- ext.sources.extend(sources)
-- return True
--
- def configure_ctypes(self, ext):
-- if not self.use_system_libffi:
-- if MACOS:
-- return self.configure_ctypes_darwin(ext)
-- print('INFO: Could not locate ffi libs and/or headers')
-- return False
- return True
-
- def detect_ctypes(self):
- # Thomas Heller's _ctypes module
-- self.use_system_libffi = False
-+
-+ if (not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and MACOS):
-+ self.use_system_libffi = True
-+ else:
-+ self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS")
-+
- include_dirs = []
- extra_compile_args = ['-DPy_BUILD_CORE_MODULE']
- extra_link_args = []
-@@ -2150,11 +2161,9 @@ class PyBuildExt(build_ext):
-
- if MACOS:
- sources.append('_ctypes/malloc_closure.c')
-- sources.append('_ctypes/darwin/dlfcn_simple.c')
-+ extra_compile_args.append('-DUSING_MALLOC_CLOSURE_DOT_C=1')
- extra_compile_args.append('-DMACOSX')
- include_dirs.append('_ctypes/darwin')
-- # XXX Is this still needed?
-- # extra_link_args.extend(['-read_only_relocs', 'warning'])
-
- elif HOST_PLATFORM == 'sunos5':
- # XXX This shouldn't be necessary; it appears that some
-@@ -2184,31 +2193,48 @@ class PyBuildExt(build_ext):
- sources=['_ctypes/_ctypes_test.c'],
- libraries=['m']))
-
-+ ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR")
-+ ffi_lib = None
-+
- ffi_inc_dirs = self.inc_dirs.copy()
- if MACOS:
-- if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"):
-- return
-- # OS X 10.5 comes with libffi.dylib; the include files are
-- # in /usr/include/ffi
-- ffi_inc_dirs.append('/usr/include/ffi')
--
-- ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
-- if not ffi_inc or ffi_inc[0] == '':
-- ffi_inc = find_file('ffi.h', [], ffi_inc_dirs)
-- if ffi_inc is not None:
-- ffi_h = ffi_inc[0] + '/ffi.h'
-+ ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi")
-+
-+ if not ffi_inc:
-+ if os.path.exists(ffi_in_sdk):
-+ ext.extra_compile_args.append("-DUSING_APPLE_OS_LIBFFI=1")
-+ ffi_inc = ffi_in_sdk
-+ ffi_lib = 'ffi'
-+ else:
-+ # OS X 10.5 comes with libffi.dylib; the include files are
-+ # in /usr/include/ffi
-+ ffi_inc_dirs.append('/usr/include/ffi')
-+
-+ if not ffi_inc:
-+ found = find_file('ffi.h', [], ffi_inc_dirs)
-+ if found:
-+ ffi_inc = found[0]
-+ if ffi_inc:
-+ ffi_h = ffi_inc + '/ffi.h'
- if not os.path.exists(ffi_h):
- ffi_inc = None
- print('Header file {} does not exist'.format(ffi_h))
-- ffi_lib = None
-- if ffi_inc is not None:
-+ if ffi_lib is None and ffi_inc:
- for lib_name in ('ffi', 'ffi_pic'):
- if (self.compiler.find_library_file(self.lib_dirs, lib_name)):
- ffi_lib = lib_name
- break
-
- if ffi_inc and ffi_lib:
-- ext.include_dirs.extend(ffi_inc)
-+ ffi_headers = glob(os.path.join(ffi_inc, '*.h'))
-+ if grep_headers_for('ffi_prep_cif_var', ffi_headers):
-+ ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1")
-+ if grep_headers_for('ffi_prep_closure_loc', ffi_headers):
-+ ext.extra_compile_args.append("-DHAVE_FFI_PREP_CLOSURE_LOC=1")
-+ if grep_headers_for('ffi_closure_alloc', ffi_headers):
-+ ext.extra_compile_args.append("-DHAVE_FFI_CLOSURE_ALLOC=1")
-+
-+ ext.include_dirs.append(ffi_inc)
- ext.libraries.append(ffi_lib)
- self.use_system_libffi = True
-
-@@ -2226,10 +2252,7 @@ class PyBuildExt(build_ext):
+@@ -2200,10 +2237,7 @@ class PyBuildExt(build_ext):
sources = ['_decimal/_decimal.c']
depends = ['_decimal/docstrings.h']
else:
@@ -287,7 +159,7 @@ $NetBSD: patch-setup.py,v 1.3 2020/11/19 16:29:42 bsiegert Exp $
libraries = ['m']
sources = [
'_decimal/_decimal.c',
-@@ -2609,7 +2632,7 @@ def main():
+@@ -2583,7 +2617,7 @@ def main():
# If you change the scripts installed here, you also need to
# check the PyBuildScripts command above, and change the links
# created by the bininstall target in Makefile.pre.in