Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 09 May 2026 22:03:26 +0000
From:      Vladimir Druzenko <vvd@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Cc:        Matthias Andree <mandree@FreeBSD.org>
Subject:   git: 3778d515a560 - main - lang/python315: Repocopy of lang/python314
Message-ID:  <69ffaf2e.32ccc.5b3dafbb@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by vvd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=3778d515a560449213af111ecdfd0f1d9d0b81b3

commit 3778d515a560449213af111ecdfd0f1d9d0b81b3
Author:     Matthias Andree <mandree@FreeBSD.org>
AuthorDate: 2026-05-09 21:57:35 +0000
Commit:     Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2026-05-09 22:02:59 +0000

    lang/python315: Repocopy of lang/python314
    
    PR:             295131
    Sponsored by:   UNIS Labs
---
 lang/python315/Makefile                            |  201 +
 lang/python315/Makefile.version                    |    7 +
 lang/python315/distinfo                            |    3 +
 lang/python315/files/patch-Lib_test_test__posix.py |   18 +
 lang/python315/files/patch-Makefile.pre.in         |   62 +
 .../python315/files/patch-Misc_python-config.sh.in |   11 +
 ...211-reject-CR_LF-in-HTTP-tunnel-request-headers |  108 +
 ...ix-quadratic-regex-backtracking-in-configparser |   83 +
 ...action_substitution-bypass-of-dash-prefix-check |   66 +
 ...tch-gh-148395-fix-possible-uaf-in-decompressors |   65 +
 lang/python315/files/pkg-message.in                |   12 +
 lang/python315/pkg-descr                           |    2 +
 lang/python315/pkg-plist                           | 8316 ++++++++++++++++++++
 13 files changed, 8954 insertions(+)

diff --git a/lang/python315/Makefile b/lang/python315/Makefile
new file mode 100644
index 000000000000..404a636e7cf6
--- /dev/null
+++ b/lang/python315/Makefile
@@ -0,0 +1,201 @@
+PORTNAME=	python
+DISTVERSION=	${PYTHON_DISTVERSION}  # see Makefile.version
+PORTREVISION=	2
+CATEGORIES=	lang python
+MASTER_SITES=	PYTHON/ftp/python/${DISTVERSION:C/[a-z].*//}
+PKGNAMESUFFIX=	${PYTHON_SUFFIX}
+DISTNAME=	Python-${DISTVERSION}
+DIST_SUBDIR=	python
+
+MAINTAINER=	mandree@FreeBSD.org
+COMMENT=	Interpreted object-oriented programming language
+WWW=		https://www.python.org/
+
+LICENSE=	PSFL
+
+LIB_DEPENDS=	libexpat.so:textproc/expat2 \
+		libffi.so:devel/libffi \
+		libzstd.so:archivers/zstd
+
+USES=		compiler:c11 cpe ncurses pathfix pkgconfig readline \
+		shebangfix ssl tar:xz
+PATHFIX_MAKEFILEIN=	Makefile.pre.in
+USE_LDCONFIG=	yes
+GNU_CONFIGURE=	yes
+python_CMD=	${PREFIX}/bin/python${PYTHON_DISTVERSION:R}
+SHEBANG_FILES=	Lib/*.py Lib/*/*.py Lib/*/*/*.py Lib/*/*/*/*.py
+SHEBANG_FILES+=	Lib/test/archivetestdata/exe_with_z64 \
+		Lib/test/archivetestdata/exe_with_zip \
+		Lib/test/archivetestdata/header.sh
+
+# Duplicate python.mk variables. TODO: Let lang/python?? ports use python.mk bits.
+PYTHON_VER=		${PYTHON_DISTVERSION:R}
+PYTHON_VERSION=		python${PYTHON_VER}
+PYTHON_SUFFIX=		${PYTHON_VER:S/.//g}
+
+DISABLED_EXTENSIONS=	 _gdbm _sqlite3 _tkinter
+CONFIGURE_ARGS+=	--enable-shared --without-ensurepip --with-system-expat
+CONFIGURE_ENV+=		OPT="" # Null out OPT to respect user CFLAGS and remove optimizations
+
+INSTALL_TARGET=		altinstall						# Don't want cloberring of unprefixed files
+
+# TEST_TARGET=		buildbottest # that's the --slow-ci with more resources/longer timeouts
+TEST_TARGET=		test # that's the --fast-ci with tighter timeouts and using less resources
+# TEST_ARGS: test_gdb requires debug symbols for the test_gdb.test_pretty_print test, so skip it unless defined(WITH_DEBUG)
+TEST_ARGS=		TESTOPTS="-j${MAKE_JOBS_NUMBER} ${WITH_DEBUG:U-x test_gdb}"
+
+MAKE_ARGS+=		COMPILEALL_OPTS=-j${MAKE_JOBS_NUMBER} \
+			INSTALL_SHARED="${INSTALL_LIB}"				# Strip shared library
+
+SUB_FILES=		pkg-message
+SUB_LIST=		PYTHON_SUFFIX=${PYTHON_SUFFIX}
+
+PLIST_SUB=		ABI=${ABIFLAGS} \
+			XY=${PYTHON_SUFFIX} \
+			XYDOT=${PYTHON_VER} \
+			XYZDOT=${DISTVERSION:C/[a-z].*//} \
+			OSMAJOR=${OSVERSION:C/([0-9]*)[0-9]{5}/\1/}		# For plat-freebsd* in pkg-plist. https://bugs.python.org/issue19554
+
+OPTIONS_DEFINE=		DEBUG IPV6 LIBMPDEC LTO NLS PYMALLOC
+OPTIONS_DEFAULT=	LIBMPDEC LTO PYMALLOC
+OPTIONS_EXCLUDE_powerpc64=	LTO
+OPTIONS_EXCLUDE_riscv64=	LTO
+OPTIONS_RADIO=		HASH
+OPTIONS_RADIO_HASH=	FNV SIPHASH
+OPTIONS_SUB=		yes
+
+LIBMPDEC_DESC=		Use libmpdec from ports instead of bundled version
+LTO_DESC=		Use Link-Time Optimization with -flto=thin
+LTOFULL_DESC=		Use -flto=full (not =thin) (faster build at more CPU time)
+NLS_DESC=		Enable gettext support for the locale module
+PYMALLOC_DESC=		Enable specialized mallocs
+
+HASH_DESC=		Hash Algorithm (PEP-456)
+FNV_DESC=		Modified Fowler-Noll-Vo Algorithm
+SIPHASH_DESC=		SipHash24 Algorithm
+
+FNV_CONFIGURE_ON=	--with-hash-algorithm=fnv
+SIPHASH_CONFIGURE_ON=	--with-hash-algorithm=siphash24
+
+DEBUG_CONFIGURE_WITH=	pydebug
+IPV6_CONFIGURE_ENABLE=	ipv6
+
+LIBMPDEC_CONFIGURE_ON=	--with-system-libmpdec
+LIBMPDEC_LIB_DEPENDS=	libmpdec.so:math/mpdecimal
+
+LTO_CONFIGURE_ON=	--with-lto=full
+
+# Use CPPFLAGS over CFLAGS due to -I ordering, causing elementtree and pyexpat
+# to break in Python 2.7, or preprocessor complaints in Python >= 3.3
+# Upstream Issue: https://bugs.python.org/issue6299
+NLS_USES=		gettext-runtime
+NLS_CPPFLAGS=		-I${LOCALBASE}/include
+NLS_LIBS=		-L${LOCALBASE}/lib -lintl
+NLS_CONFIGURE_ENV_OFF=	ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no
+
+PYMALLOC_CONFIGURE_WITH=	pymalloc
+
+.include "${.CURDIR}/Makefile.version"
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MDEBUG}
+ABIFLAGS:=	d${ABIFLAGS}
+.endif
+
+.if !empty(ABIFLAGS)
+PLIST_FILES+=	bin/python${PYTHON_VER}${ABIFLAGS} \
+		bin/python${PYTHON_VER}${ABIFLAGS}-config \
+		libdata/pkgconfig/python-${PYTHON_VER}${ABIFLAGS}.pc \
+		libdata/pkgconfig/python-${PYTHON_VER}${ABIFLAGS}-embed.pc
+.endif
+
+.if ${ARCH} == sparc64
+CFLAGS+=	-DPYTHON_DEFAULT_RECURSION_LIMIT=900
+.endif
+
+# See https://bugs.freebsd.org/115940 and https://bugs.freebsd.org/193650
+.if !exists(/usr/bin/ypcat) || defined(WITHOUT_NIS)
+PLIST_SUB+=	NO_NIS="@comment "
+DISABLED_EXTENSIONS+=	nis
+.else
+PLIST_SUB+=	NO_NIS=""
+.endif
+
+# Python 3.10 requires OpenSSL >= 1.1.1 (PEP 644), so with
+# libressl, some modules are not built
+.if ${SSL_DEFAULT:Mlibressl*}
+PLIST_SUB+=	SUPPORTED_OPENSSL="@comment "
+.else
+PLIST_SUB+=	SUPPORTED_OPENSSL=""
+.endif
+
+post-patch:
+# disable the detection of includes and library from e2fsprogs-libuuid,
+# which introduces hidden dependency and breaks build
+	@${REINPLACE_CMD} -e 's|uuid/uuid.h|ignore_&|' ${WRKSRC}/configure
+# disable detection of multiarch as it breaks with clang >= 13, which adds a
+# major.minor version number in -print-multiarch output, confusing Python
+	@${REINPLACE_CMD} -e 's|^\( *MULTIARCH=\).*--print-multiarch.*|\1|' ${WRKSRC}/configure
+# Apply DISABLED_EXTENSIONS
+	@${ECHO_CMD} '*disabled*' > ${WRKSRC}/Modules/Setup.local
+.  for _module in ${DISABLED_EXTENSIONS}
+		@${ECHO_CMD} ${_module} >> ${WRKSRC}/Modules/Setup.local
+.  endfor
+# Strip Expat module
+	${RM} -R ${WRKSRC}/Modules/expat
+
+post-install:
+.if ! ${PORT_OPTIONS:MDEBUG}
+	${RM} ${STAGEDIR}${PREFIX}/lib/libpython3.so						# Upstream Issue: https://bugs.python.org/issue17975
+.endif
+	${LN} -sf libpython${PYTHON_VER}${ABIFLAGS}.so.1.0 ${STAGEDIR}${PREFIX}/lib/libpython${PYTHON_VER}${ABIFLAGS}.so.1
+# This code block exists for the qemu-user enabled cross build environment.
+# When using this environment in poudriere, CC is not set to the default
+# of /usr/bin/cc and a cross-compile toolchain is used.  We need to hand
+# edit this so that the run time configuration for python matches what the
+# FreeBSD base system provides.  sbruno 02Aug2017
+.if ${CC} == /nxb-bin/usr/bin/cc
+	@${REINPLACE_CMD} -e 's=/nxb-bin==g' \
+		${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${ABIFLAGS}_freebsd_.py
+	@cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \
+		./python -E -m compileall -d ${PREFIX}/lib/python${PYTHON_VER} \
+		${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${ABIFLAGS}_freebsd_.py
+	@cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \
+		./python -E -O -m compileall -d ${PREFIX}/lib/python${PYTHON_VER} \
+		${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${ABIFLAGS}_freebsd_.py
+	@${REINPLACE_CMD} -e 's=/nxb-bin==g' \
+		${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/config-${PYTHON_VER}${ABIFLAGS}/Makefile
+.endif
+	for i in ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/lib-dynload/*.so; do \
+		${STRIP_CMD} $$i; done								# Strip shared extensions
+	${INSTALL_DATA} ${WRKSRC}/Tools/gdb/libpython.py \
+		${STAGEDIR}${PREFIX}/lib/libpython${PYTHON_VER}${ABIFLAGS}.so.1.0-gdb.py
+
+_sigstorebundle=${DISTFILES}.sigstore
+${_sigstorebundle}:
+	${FETCH_CMD} ${MASTER_SITES}/${_sigstorebundle}
+
+sigstore-verify: ${_sigstorebundle} checksum
+	sigstore verify identity \
+		--bundle ${DISTFILES}.sigstore \
+		--cert-identity hugo@python.org \
+		--cert-oidc-issuer https://github.com/login/oauth \
+		${DISTDIR}/${DIST_SUBDIR}/${DISTFILES}
+
+pre-test:
+	@${ECHO_CMD} "=== NOTE: the py314-* gdbm, sqlite3, tkinter modules must be rebuilt before the test ==="
+.if ${PORT_OPTIONS:MDEBUG}
+	@${ECHO_CMD} "=== NOTE: The test_ssl test is known to fail with DEBUG option enabled ==="
+.endif
+.if empty(PORT_OPTIONS:MIPV6)
+	@${ECHO_CMD} "=== NOTE: Some asynch tests require IPV6 support enabled, expect some test failures ==="
+.endif
+.if empty(PORT_OPTIONS:MPYMALLOC)
+	@${ECHO_CMD} "=== NOTE: Some tests depend on PYMALLOC option enabled, expect some test failures ==="
+.endif
+	sleep 5
+
+post-clean:
+	@${RM} ${_sigstorebundle}
+
+.include <bsd.port.mk>
diff --git a/lang/python315/Makefile.version b/lang/python315/Makefile.version
new file mode 100644
index 000000000000..c8ccfa3963b0
--- /dev/null
+++ b/lang/python315/Makefile.version
@@ -0,0 +1,7 @@
+# Mk/Uses/python.mk includes this file, don't remove it!
+
+# Do not forget to
+# 1. Update python documentation (lang/python-doc-*)
+#    Run "make -C lang/python-doc-html makesum"
+# 2. Remove PORTREVISION in Makefile
+PYTHON_DISTVERSION=	3.14.4
diff --git a/lang/python315/distinfo b/lang/python315/distinfo
new file mode 100644
index 000000000000..7c5dead58955
--- /dev/null
+++ b/lang/python315/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1775640582
+SHA256 (python/Python-3.14.4.tar.xz) = d923c51303e38e249136fc1bdf3568d56ecb03214efdef48516176d3d7faaef8
+SIZE (python/Python-3.14.4.tar.xz) = 23855332
diff --git a/lang/python315/files/patch-Lib_test_test__posix.py b/lang/python315/files/patch-Lib_test_test__posix.py
new file mode 100644
index 000000000000..6dc5ab44b540
--- /dev/null
+++ b/lang/python315/files/patch-Lib_test_test__posix.py
@@ -0,0 +1,18 @@
+--- Lib/test/test_posix.py.orig	2025-11-01 21:42:35 UTC
++++ Lib/test/test_posix.py
+@@ -412,11 +412,12 @@ class PosixTester(unittest.TestCase):
+             # so skip Solaris-based since they are likely to have ZFS.
+             # issue33655: Also ignore EINVAL on *BSD since ZFS is also
+             # often used there.
+-            if inst.errno == errno.EINVAL and sys.platform.startswith(
++            if (inst.errno == errno.EINVAL or inst.errno == errno.ENODEV) and sys.platform.startswith(
+                 ('sunos', 'freebsd', 'openbsd', 'gnukfreebsd')):
+                 raise unittest.SkipTest("test may fail on ZFS filesystems")
+-            elif inst.errno == errno.EOPNOTSUPP and sys.platform.startswith("netbsd"):
+-                raise unittest.SkipTest("test may fail on FFS filesystems")
++	    # FreeBSD may return EOPNOTSUPP in some versions
++            elif inst.errno == errno.EOPNOTSUPP and sys.platform.startswith(('netbsd', 'freebsd')):
++                raise unittest.SkipTest("test may fail on ZFS and FFS filesystems")
+             else:
+                 raise
+         finally:
diff --git a/lang/python315/files/patch-Makefile.pre.in b/lang/python315/files/patch-Makefile.pre.in
new file mode 100644
index 000000000000..e5e8bfa7e0e9
--- /dev/null
+++ b/lang/python315/files/patch-Makefile.pre.in
@@ -0,0 +1,62 @@
+--- Makefile.pre.in.orig	2025-11-01 17:59:00 UTC
++++ Makefile.pre.in
+@@ -84,7 +84,6 @@ BASECPPFLAGS=	@BASECPPFLAGS@
+ OPT=		@OPT@
+ BASECFLAGS=	@BASECFLAGS@
+ BASECPPFLAGS=	@BASECPPFLAGS@
+-CONFIGURE_CFLAGS=	@CFLAGS@
+ # CFLAGS_NODIST is used for building the interpreter and stdlib C extensions.
+ # Use it when a compiler flag should _not_ be part of the distutils CFLAGS
+ # once Python is installed (Issue #21121).
+@@ -96,18 +95,16 @@ CONFIGURE_LDFLAGS_NOLTO=@LDFLAGS_NOLTO@
+ # LDFLAGS_NOLTO is an extra flag to disable lto. It is used to speed up building
+ # of _bootstrap_python and _freeze_module tools, which don't need LTO.
+ CONFIGURE_LDFLAGS_NOLTO=@LDFLAGS_NOLTO@
+-CONFIGURE_CPPFLAGS=	@CPPFLAGS@
+-CONFIGURE_LDFLAGS=	@LDFLAGS@
+ # Avoid assigning CFLAGS, LDFLAGS, etc. so users can use them on the
+ # command line to append to these values without stomping the pre-set
+ # values.
+-PY_CFLAGS=	$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
++PY_CFLAGS=	$(BASECFLAGS) $(OPT) $(CFLAGS) $(EXTRA_CFLAGS)
+ PY_CFLAGS_NODIST=$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal -I$(srcdir)/Include/internal/mimalloc
+ # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to
+ # be able to build extension modules using the directories specified in the
+ # environment variables
+-PY_CPPFLAGS=	$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)
+-PY_LDFLAGS=	$(CONFIGURE_LDFLAGS) $(LDFLAGS)
++PY_CPPFLAGS=	$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CPPFLAGS)
++PY_LDFLAGS=	$(LDFLAGS)
+ PY_LDFLAGS_NODIST=$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)
+ PY_LDFLAGS_NOLTO=$(PY_LDFLAGS) $(CONFIGURE_LDFLAGS_NOLTO) $(LDFLAGS_NODIST)
+ NO_AS_NEEDED=	@NO_AS_NEEDED@
+@@ -2492,14 +2489,6 @@ bininstall: commoninstall altbininstall
+ 	else true; \
+ 	fi
+ 	(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) python3$(EXE))
+-	-if test "$(VERSION)" != "$(LDVERSION)"; then \
+-		rm -f $(DESTDIR)$(BINDIR)/python$(VERSION)-config; \
+-		(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(LDVERSION)-config python$(VERSION)-config); \
+-		rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION).pc; \
+-		(cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION).pc python-$(VERSION).pc); \
+-		rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION)-embed.pc; \
+-		(cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION)-embed.pc python-$(VERSION)-embed.pc); \
+-	fi
+ 	-rm -f $(DESTDIR)$(BINDIR)/python3-config
+ 	(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python3-config)
+ 	-rm -f $(DESTDIR)$(LIBPC)/python3.pc
+@@ -2952,6 +2941,14 @@ libainstall: all scripts
+ 	$(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh
+ 	$(INSTALL_SCRIPT) python-config.py $(DESTDIR)$(LIBPL)/python-config.py
+ 	$(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(LDVERSION)-config
++	-if test "$(VERSION)" != "$(LDVERSION)"; then \
++		rm -f $(DESTDIR)$(BINDIR)/python$(VERSION)-config; \
++		(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(LDVERSION)-config python$(VERSION)-config); \
++		rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION).pc; \
++		(cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION).pc python-$(VERSION).pc); \
++		rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION)-embed.pc; \
++		(cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION)-embed.pc python-$(VERSION)-embed.pc); \
++	fi
+ 	$(INSTALL_SCRIPT) $(SCRIPT_IDLE) $(DESTDIR)$(BINDIR)/idle$(VERSION)
+ 	$(INSTALL_SCRIPT) $(SCRIPT_PYDOC) $(DESTDIR)$(BINDIR)/pydoc$(VERSION)
+ 	@if [ -s Modules/python.exp -a \
diff --git a/lang/python315/files/patch-Misc_python-config.sh.in b/lang/python315/files/patch-Misc_python-config.sh.in
new file mode 100644
index 000000000000..7da9da93d197
--- /dev/null
+++ b/lang/python315/files/patch-Misc_python-config.sh.in
@@ -0,0 +1,11 @@
+--- Misc/python-config.sh.in.orig	2025-01-16 01:47:29 UTC
++++ Misc/python-config.sh.in
+@@ -21,7 +21,7 @@ installed_prefix ()
+ # Returns the actual prefix where this script was installed to.
+ installed_prefix ()
+ {
+-    RESULT=$(dirname $(cd $(dirname "$1") && pwd -P))
++    RESULT=$(dirname $(cd $(dirname $(realpath "$1")) && pwd -P))
+     if which readlink >/dev/null 2>&1 ; then
+         if readlink -f "$RESULT" >/dev/null 2>&1; then
+           RESULT=$(readlink -f "$RESULT")
diff --git a/lang/python315/files/patch-gh-146211-reject-CR_LF-in-HTTP-tunnel-request-headers b/lang/python315/files/patch-gh-146211-reject-CR_LF-in-HTTP-tunnel-request-headers
new file mode 100644
index 000000000000..989f22a0529b
--- /dev/null
+++ b/lang/python315/files/patch-gh-146211-reject-CR_LF-in-HTTP-tunnel-request-headers
@@ -0,0 +1,108 @@
+From afdd351544e8112d4070a31f2218f99256697472 Mon Sep 17 00:00:00 2001
+From: Seth Larson <seth@python.org>
+Date: Fri, 10 Apr 2026 10:21:42 -0500
+Subject: [PATCH] gh-146211: Reject CR/LF in HTTP tunnel request headers
+ (GH-146212) (cherry picked from commit
+ 05ed7ce7ae9e17c23a04085b2539fe6d6d3cef69)
+
+Co-authored-by: Seth Larson <seth@python.org>
+Co-authored-by: Illia Volochii <illia.volochii@gmail.com>
+---
+ Lib/http/client.py                            | 11 ++++-
+ Lib/test/test_httplib.py                      | 45 +++++++++++++++++++
+ ...-03-20-09-29-42.gh-issue-146211.PQVbs7.rst |  2 +
+ 3 files changed, 57 insertions(+), 1 deletion(-)
+ create mode 100644 Misc/NEWS.d/next/Security/2026-03-20-09-29-42.gh-issue-146211.PQVbs7.rst
+
+diff --git a/Lib/http/client.py b/Lib/http/client.py
+index 77f8d26291dfc2..6fb7d254ea9c27 100644
+--- ./Lib/http/client.py
++++ b/Lib/http/client.py
+@@ -972,13 +972,22 @@ def _wrap_ipv6(self, ip):
+         return ip
+ 
+     def _tunnel(self):
++        if _contains_disallowed_url_pchar_re.search(self._tunnel_host):
++            raise ValueError('Tunnel host can\'t contain control characters %r'
++                             % (self._tunnel_host,))
+         connect = b"CONNECT %s:%d %s\r\n" % (
+             self._wrap_ipv6(self._tunnel_host.encode("idna")),
+             self._tunnel_port,
+             self._http_vsn_str.encode("ascii"))
+         headers = [connect]
+         for header, value in self._tunnel_headers.items():
+-            headers.append(f"{header}: {value}\r\n".encode("latin-1"))
++            header_bytes = header.encode("latin-1")
++            value_bytes = value.encode("latin-1")
++            if not _is_legal_header_name(header_bytes):
++                raise ValueError('Invalid header name %r' % (header_bytes,))
++            if _is_illegal_header_value(value_bytes):
++                raise ValueError('Invalid header value %r' % (value_bytes,))
++            headers.append(b"%s: %s\r\n" % (header_bytes, value_bytes))
+         headers.append(b"\r\n")
+         # Making a single send() call instead of one per line encourages
+         # the host OS to use a more optimal packet size instead of
+diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py
+index bcb828edec7c39..6f3eac6b98a4de 100644
+--- ./Lib/test/test_httplib.py
++++ b/Lib/test/test_httplib.py
+@@ -369,6 +369,51 @@ def test_invalid_headers(self):
+                 with self.assertRaisesRegex(ValueError, 'Invalid header'):
+                     conn.putheader(name, value)
+ 
++    def test_invalid_tunnel_headers(self):
++        cases = (
++            ('Invalid\r\nName', 'ValidValue'),
++            ('Invalid\rName', 'ValidValue'),
++            ('Invalid\nName', 'ValidValue'),
++            ('\r\nInvalidName', 'ValidValue'),
++            ('\rInvalidName', 'ValidValue'),
++            ('\nInvalidName', 'ValidValue'),
++            (' InvalidName', 'ValidValue'),
++            ('\tInvalidName', 'ValidValue'),
++            ('Invalid:Name', 'ValidValue'),
++            (':InvalidName', 'ValidValue'),
++            ('ValidName', 'Invalid\r\nValue'),
++            ('ValidName', 'Invalid\rValue'),
++            ('ValidName', 'Invalid\nValue'),
++            ('ValidName', 'InvalidValue\r\n'),
++            ('ValidName', 'InvalidValue\r'),
++            ('ValidName', 'InvalidValue\n'),
++        )
++        for name, value in cases:
++            with self.subTest((name, value)):
++                conn = client.HTTPConnection('example.com')
++                conn.set_tunnel('tunnel', headers={
++                    name: value
++                })
++                conn.sock = FakeSocket('')
++                with self.assertRaisesRegex(ValueError, 'Invalid header'):
++                    conn._tunnel()  # Called in .connect()
++
++    def test_invalid_tunnel_host(self):
++        cases = (
++            'invalid\r.host',
++            '\ninvalid.host',
++            'invalid.host\r\n',
++            'invalid.host\x00',
++            'invalid host',
++        )
++        for tunnel_host in cases:
++            with self.subTest(tunnel_host):
++                conn = client.HTTPConnection('example.com')
++                conn.set_tunnel(tunnel_host)
++                conn.sock = FakeSocket('')
++                with self.assertRaisesRegex(ValueError, 'Tunnel host can\'t contain control characters'):
++                    conn._tunnel()  # Called in .connect()
++
+     def test_headers_debuglevel(self):
+         body = (
+             b'HTTP/1.1 200 OK\r\n'
+diff --git a/Misc/NEWS.d/next/Security/2026-03-20-09-29-42.gh-issue-146211.PQVbs7.rst b/Misc/NEWS.d/next/Security/2026-03-20-09-29-42.gh-issue-146211.PQVbs7.rst
+new file mode 100644
+index 00000000000000..4993633b8ebebb
+--- /dev/null
++++ ./Misc/NEWS.d/next/Security/2026-03-20-09-29-42.gh-issue-146211.PQVbs7.rst
+@@ -0,0 +1,2 @@
++Reject CR/LF characters in tunnel request headers for the
++HTTPConnection.set_tunnel() method.
diff --git a/lang/python315/files/patch-gh-146333-Fix-quadratic-regex-backtracking-in-configparser b/lang/python315/files/patch-gh-146333-Fix-quadratic-regex-backtracking-in-configparser
new file mode 100644
index 000000000000..7dffa8ff1cfe
--- /dev/null
+++ b/lang/python315/files/patch-gh-146333-Fix-quadratic-regex-backtracking-in-configparser
@@ -0,0 +1,83 @@
+From ab8704a8e05e2f926c10f994e4085e8726048fa4 Mon Sep 17 00:00:00 2001
+From: Joshua Swanson <22283299+joshuaswanson@users.noreply.github.com>
+Date: Tue, 7 Apr 2026 16:10:34 +0200
+Subject: [PATCH] gh-146333: Fix quadratic regex backtracking in configparser
+ option parsing (GH-146399)
+
+Use negative lookahead in option regex to prevent backtracking, and to avoid changing logic outside the regexes (since people could use the regex directly).
+(cherry picked from commit 7e0a0be4097f9d29d66fe23f5af86f18a34ed7dd)
+
+Co-authored-by: Joshua Swanson <22283299+joshuaswanson@users.noreply.github.com>
+---
+ Lib/configparser.py                           |  8 ++++++--
+ Lib/test/test_configparser.py                 | 20 +++++++++++++++++++
+ ...3-25-00-51-03.gh-issue-146333.LqdL__bn.rst |  3 +++
+ 3 files changed, 29 insertions(+), 2 deletions(-)
+ create mode 100644 Misc/NEWS.d/next/Security/2026-03-25-00-51-03.gh-issue-146333.LqdL__bn.rst
+
+diff --git a/Lib/configparser.py b/Lib/configparser.py
+index d435a5c2fe0da2..e76647d339e913 100644
+--- ./Lib/configparser.py
++++ b/Lib/configparser.py
+@@ -613,7 +613,9 @@ class RawConfigParser(MutableMapping):
+         \]                                 # ]
+         """
+     _OPT_TMPL = r"""
+-        (?P<option>.*?)                    # very permissive!
++        (?P<option>                        # very permissive!
++            (?:(?!{delim})\S)*             # non-delimiter non-whitespace
++            (?:\s+(?:(?!{delim})\S)+)*)    # optionally more words
+         \s*(?P<vi>{delim})\s*              # any number of space/tab,
+                                            # followed by any of the
+                                            # allowed delimiters,
+@@ -621,7 +623,9 @@ class RawConfigParser(MutableMapping):
+         (?P<value>.*)$                     # everything up to eol
+         """
+     _OPT_NV_TMPL = r"""
+-        (?P<option>.*?)                    # very permissive!
++        (?P<option>                        # very permissive!
++            (?:(?!{delim})\S)*             # non-delimiter non-whitespace
++            (?:\s+(?:(?!{delim})\S)+)*)    # optionally more words
+         \s*(?:                             # any number of space/tab,
+         (?P<vi>{delim})\s*                 # optionally followed by
+                                            # any of the allowed
+diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py
+index 1bfb53ccbb1398..d7c4f19c1a5ef0 100644
+--- ./Lib/test/test_configparser.py
++++ b/Lib/test/test_configparser.py
+@@ -2270,6 +2270,26 @@ def test_section_bracket_in_key(self):
+         output.close()
+ 
+ 
++class ReDoSTestCase(unittest.TestCase):
++    """Regression tests for quadratic regex backtracking (gh-146333)."""
++
++    def test_option_regex_does_not_backtrack(self):
++        # A line with many spaces between non-delimiter characters
++        # should be parsed in linear time, not quadratic.
++        parser = configparser.RawConfigParser()
++        content = "[section]\n" + "x" + " " * 40000 + "y" + "\n"
++        # This should complete almost instantly. Before the fix,
++        # it would take over a minute due to catastrophic backtracking.
++        with self.assertRaises(configparser.ParsingError):
++            parser.read_string(content)
++
++    def test_option_regex_no_value_does_not_backtrack(self):
++        parser = configparser.RawConfigParser(allow_no_value=True)
++        content = "[section]\n" + "x" + " " * 40000 + "y" + "\n"
++        parser.read_string(content)
++        self.assertTrue(parser.has_option("section", "x" + " " * 40000 + "y"))
++
++
+ class MiscTestCase(unittest.TestCase):
+     def test__all__(self):
+         support.check__all__(self, configparser, not_exported={"Error"})
+diff --git a/Misc/NEWS.d/next/Security/2026-03-25-00-51-03.gh-issue-146333.LqdL__bn.rst b/Misc/NEWS.d/next/Security/2026-03-25-00-51-03.gh-issue-146333.LqdL__bn.rst
+new file mode 100644
+index 00000000000000..96d86ecc0a0fb3
+--- /dev/null
++++ ./Misc/NEWS.d/next/Security/2026-03-25-00-51-03.gh-issue-146333.LqdL__bn.rst
+@@ -0,0 +1,3 @@
++Fix quadratic backtracking in :class:`configparser.RawConfigParser` option
++parsing regexes (``OPTCRE`` and ``OPTCRE_NV``). A crafted configuration line
++with many whitespace characters could cause excessive CPU usage.
diff --git a/lang/python315/files/patch-gh-148169-fix-webbrowser-_action_substitution-bypass-of-dash-prefix-check b/lang/python315/files/patch-gh-148169-fix-webbrowser-_action_substitution-bypass-of-dash-prefix-check
new file mode 100644
index 000000000000..5407326b750a
--- /dev/null
+++ b/lang/python315/files/patch-gh-148169-fix-webbrowser-_action_substitution-bypass-of-dash-prefix-check
@@ -0,0 +1,66 @@
+From f529b9470752c28ab69c96f31b0dbc10db69b404 Mon Sep 17 00:00:00 2001
+From: Stan Ulbrych <stan@python.org>
+Date: Mon, 13 Apr 2026 20:02:52 +0100
+Subject: [PATCH] gh-148169: Fix webbrowser `%action` substitution bypass of
+ dash-prefix check (GH-148170) (cherry picked from commit
+ d22922c8a7958353689dc4763dd72da2dea03fff)
+
+Co-authored-by: Stan Ulbrych <stan@python.org>
+---
+ Lib/test/test_webbrowser.py                              | 9 +++++++++
+ Lib/webbrowser.py                                        | 5 +++--
+ .../2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst       | 2 ++
+ 3 files changed, 14 insertions(+), 2 deletions(-)
+ create mode 100644 Misc/NEWS.d/next/Security/2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst
+
+diff --git a/Lib/test/test_webbrowser.py b/Lib/test/test_webbrowser.py
+index 404b3a31a5d2c9..bfbcf112b0b085 100644
+--- ./Lib/test/test_webbrowser.py
++++ b/Lib/test/test_webbrowser.py
+@@ -119,6 +119,15 @@ def test_open_bad_new_parameter(self):
+                        arguments=[URL],
+                        kw=dict(new=999))
+ 
++    def test_reject_action_dash_prefixes(self):
++        browser = self.browser_class(name=CMD_NAME)
++        with self.assertRaises(ValueError):
++            browser.open('%action--incognito')
++        # new=1: action is "--new-window", so "%action" itself expands to
++        # a dash-prefixed flag even with no dash in the original URL.
++        with self.assertRaises(ValueError):
++            browser.open('%action', new=1)
++
+ 
+ class EdgeCommandTest(CommandTestMixin, unittest.TestCase):
+ 
+diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py
+index 0e0b5034e5f53d..97aad6eea509eb 100644
+--- ./Lib/webbrowser.py
++++ b/Lib/webbrowser.py
+@@ -274,7 +274,6 @@ def _invoke(self, args, remote, autoraise, url=None):
+ 
+     def open(self, url, new=0, autoraise=True):
+         sys.audit("webbrowser.open", url)
+-        self._check_url(url)
+         if new == 0:
+             action = self.remote_action
+         elif new == 1:
+@@ -288,7 +287,9 @@ def open(self, url, new=0, autoraise=True):
+             raise Error("Bad 'new' parameter to open(); "
+                         f"expected 0, 1, or 2, got {new}")
+ 
+-        args = [arg.replace("%s", url).replace("%action", action)
++        self._check_url(url.replace("%action", action))
++
++        args = [arg.replace("%action", action).replace("%s", url)
+                 for arg in self.remote_args]
+         args = [arg for arg in args if arg]
+         success = self._invoke(args, True, autoraise, url)
+diff --git a/Misc/NEWS.d/next/Security/2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst b/Misc/NEWS.d/next/Security/2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst
+new file mode 100644
+index 00000000000000..45cdeebe1b6d64
+--- /dev/null
++++ ./Misc/NEWS.d/next/Security/2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst
+@@ -0,0 +1,2 @@
++A bypass in :mod:`webbrowser` allowed URLs prefixed with ``%action`` to pass
++the dash-prefix safety check.
diff --git a/lang/python315/files/patch-gh-148395-fix-possible-uaf-in-decompressors b/lang/python315/files/patch-gh-148395-fix-possible-uaf-in-decompressors
new file mode 100644
index 000000000000..d5532033752e
--- /dev/null
+++ b/lang/python315/files/patch-gh-148395-fix-possible-uaf-in-decompressors
@@ -0,0 +1,65 @@
+From c8d8173c4b06d06902c99ec010ad785a30952880 Mon Sep 17 00:00:00 2001
+From: Stan Ulbrych <stan@python.org>
+Date: Mon, 13 Apr 2026 02:14:54 +0100
+Subject: [PATCH] gh-148395: Fix a possible UAF in
+ `{LZMA,BZ2,_Zlib}Decompressor` (GH-148396)
+
+Fix dangling input pointer after `MemoryError` in _lzma/_bz2/_ZlibDecompressor.decompress
+(cherry picked from commit 8fc66aef6d7b3ae58f43f5c66f9366cc8cbbfcd2)
+
+Co-authored-by: Stan Ulbrych <stan@python.org>
+---
+ .../Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst  | 5 +++++
+ Modules/_bz2module.c                                         | 1 +
+ Modules/_lzmamodule.c                                        | 1 +
+ Modules/zlibmodule.c                                         | 1 +
+ 4 files changed, 8 insertions(+)
+ create mode 100644 Misc/NEWS.d/next/Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst
+
+diff --git a/Misc/NEWS.d/next/Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst b/Misc/NEWS.d/next/Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst
+new file mode 100644
+index 00000000000000..9502189ab199c1
+--- /dev/null
++++ ./Misc/NEWS.d/next/Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst
+@@ -0,0 +1,5 @@
++Fix a dangling input pointer in :class:`lzma.LZMADecompressor`,
++:class:`bz2.BZ2Decompressor`, and internal :class:`!zlib._ZlibDecompressor`
++when memory allocation fails with :exc:`MemoryError`, which could let a
++subsequent :meth:`!decompress` call read or write through a stale pointer to
++the already-released caller buffer.
+diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c
+index 9e85e0de42cd8d..055ce82e7d2863 100644
+--- ./Modules/_bz2module.c
++++ b/Modules/_bz2module.c
+@@ -593,6 +593,7 @@ decompress(BZ2Decompressor *d, char *data, size_t len, Py_ssize_t max_length)
+     return result;
+ 
+ error:
++    bzs->next_in = NULL;
+     Py_XDECREF(result);
+     return NULL;
+ }
+diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c
+index 462c2181fa6036..6785dc56730c5c 100644
+--- ./Modules/_lzmamodule.c
++++ b/Modules/_lzmamodule.c
+@@ -1120,6 +1120,7 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length)
+     return result;
+ 
+ error:
++    lzs->next_in = NULL;
+     Py_XDECREF(result);
+     return NULL;
+ }
+diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
+index 5b6b0c5cac864a..a86aa5fdbb576c 100644
+--- ./Modules/zlibmodule.c
++++ b/Modules/zlibmodule.c
+@@ -1675,6 +1675,7 @@ decompress(ZlibDecompressor *self, uint8_t *data,
+     return result;
+ 
+ error:
++    self->zst.next_in = NULL;
+     Py_XDECREF(result);
+     return NULL;
+ }
diff --git a/lang/python315/files/pkg-message.in b/lang/python315/files/pkg-message.in
new file mode 100644
index 000000000000..286359c9f272
--- /dev/null
+++ b/lang/python315/files/pkg-message.in
@@ -0,0 +1,12 @@
+[
+{ type: install
+  message: <<EOM
+Note that some standard Python modules are provided as separate ports
+as they require additional dependencies. They are available as:
+
+py%%PYTHON_SUFFIX%%-gdbm       databases/py-gdbm@py%%PYTHON_SUFFIX%%
+py%%PYTHON_SUFFIX%%-sqlite3    databases/py-sqlite3@py%%PYTHON_SUFFIX%%
+py%%PYTHON_SUFFIX%%-tkinter    x11-toolkits/py-tkinter@py%%PYTHON_SUFFIX%%
+EOM
+}
+]
diff --git a/lang/python315/pkg-descr b/lang/python315/pkg-descr
new file mode 100644
index 000000000000..a2103f1521db
--- /dev/null
+++ b/lang/python315/pkg-descr
@@ -0,0 +1,2 @@
+Python is an interpreted object-oriented programming language, and is
+often compared to Tcl, Perl or Scheme.
diff --git a/lang/python315/pkg-plist b/lang/python315/pkg-plist
new file mode 100644
index 000000000000..b5fe9727f492
--- /dev/null
+++ b/lang/python315/pkg-plist
@@ -0,0 +1,8316 @@
+bin/idle%%XYDOT%%
+bin/pydoc%%XYDOT%%
+bin/python%%XYDOT%%
+bin/python%%XYDOT%%-config
+include/python%%XYDOT%%%%ABI%%/Python.h
+include/python%%XYDOT%%%%ABI%%/abstract.h
+include/python%%XYDOT%%%%ABI%%/audit.h
+include/python%%XYDOT%%%%ABI%%/bltinmodule.h
+include/python%%XYDOT%%%%ABI%%/boolobject.h
+include/python%%XYDOT%%%%ABI%%/bytearrayobject.h
+include/python%%XYDOT%%%%ABI%%/bytesobject.h
+include/python%%XYDOT%%%%ABI%%/ceval.h
+include/python%%XYDOT%%%%ABI%%/codecs.h
+include/python%%XYDOT%%%%ABI%%/compile.h
+include/python%%XYDOT%%%%ABI%%/complexobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/abstract.h
+include/python%%XYDOT%%%%ABI%%/cpython/audit.h
+include/python%%XYDOT%%%%ABI%%/cpython/bytearrayobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/bytesobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/cellobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/ceval.h
+include/python%%XYDOT%%%%ABI%%/cpython/classobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/code.h
+include/python%%XYDOT%%%%ABI%%/cpython/compile.h
+include/python%%XYDOT%%%%ABI%%/cpython/complexobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/context.h
+include/python%%XYDOT%%%%ABI%%/cpython/critical_section.h
+include/python%%XYDOT%%%%ABI%%/cpython/descrobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/dictobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/fileobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/fileutils.h
+include/python%%XYDOT%%%%ABI%%/cpython/floatobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/frameobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/funcobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/genobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/import.h
+include/python%%XYDOT%%%%ABI%%/cpython/initconfig.h
+include/python%%XYDOT%%%%ABI%%/cpython/listobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/lock.h
+include/python%%XYDOT%%%%ABI%%/cpython/longintrepr.h
+include/python%%XYDOT%%%%ABI%%/cpython/longobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/memoryobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/methodobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/modsupport.h
+include/python%%XYDOT%%%%ABI%%/cpython/monitoring.h
+include/python%%XYDOT%%%%ABI%%/cpython/object.h
+include/python%%XYDOT%%%%ABI%%/cpython/objimpl.h
+include/python%%XYDOT%%%%ABI%%/cpython/odictobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/picklebufobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/pthread_stubs.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyatomic.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyatomic_gcc.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyatomic_msc.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyatomic_std.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyctype.h
+include/python%%XYDOT%%%%ABI%%/cpython/pydebug.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyerrors.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyfpe.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyframe.h
+include/python%%XYDOT%%%%ABI%%/cpython/pyhash.h
+include/python%%XYDOT%%%%ABI%%/cpython/pylifecycle.h
+include/python%%XYDOT%%%%ABI%%/cpython/pymem.h
+include/python%%XYDOT%%%%ABI%%/cpython/pystate.h
+include/python%%XYDOT%%%%ABI%%/cpython/pystats.h
+include/python%%XYDOT%%%%ABI%%/cpython/pythonrun.h
+include/python%%XYDOT%%%%ABI%%/cpython/pythread.h
+include/python%%XYDOT%%%%ABI%%/cpython/pytime.h
+include/python%%XYDOT%%%%ABI%%/cpython/setobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/traceback.h
+include/python%%XYDOT%%%%ABI%%/cpython/tracemalloc.h
+include/python%%XYDOT%%%%ABI%%/cpython/tupleobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/unicodeobject.h
+include/python%%XYDOT%%%%ABI%%/cpython/warnings.h
+include/python%%XYDOT%%%%ABI%%/cpython/weakrefobject.h
+include/python%%XYDOT%%%%ABI%%/critical_section.h
+include/python%%XYDOT%%%%ABI%%/datetime.h
+include/python%%XYDOT%%%%ABI%%/descrobject.h
+include/python%%XYDOT%%%%ABI%%/dictobject.h
+include/python%%XYDOT%%%%ABI%%/dynamic_annotations.h
+include/python%%XYDOT%%%%ABI%%/enumobject.h
+include/python%%XYDOT%%%%ABI%%/errcode.h
+include/python%%XYDOT%%%%ABI%%/exports.h
+include/python%%XYDOT%%%%ABI%%/fileobject.h
+include/python%%XYDOT%%%%ABI%%/fileutils.h
+include/python%%XYDOT%%%%ABI%%/floatobject.h
+include/python%%XYDOT%%%%ABI%%/frameobject.h
+include/python%%XYDOT%%%%ABI%%/genericaliasobject.h
+include/python%%XYDOT%%%%ABI%%/import.h
+include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc.h
+include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/atomic.h
+include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/internal.h
+include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/prim.h
+include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/track.h
+include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/types.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_abstract.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_asdl.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_ast.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_ast_state.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_atexit.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_audit.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_backoff.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_bitutils.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_blocks_output_buffer.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_brc.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_bytes_methods.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_bytesobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_c_array.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_call.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_capsule.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_cell.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_ceval.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_ceval_state.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_code.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_codecs.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_compile.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_complexobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_condvar.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_context.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_critical_section.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_crossinterp.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_crossinterp_data_registry.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_debug_offsets.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_descrobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_dict.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_dict_state.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_dtoa.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_emscripten_signal.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_emscripten_trampoline.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_exceptions.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_faulthandler.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_fileutils.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_fileutils_windows.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_floatobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_flowgraph.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_format.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_frame.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_freelist.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_freelist_state.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_function.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_gc.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_genobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_getopt.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_gil.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_global_objects.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_global_objects_fini_generated.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_global_strings.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_hamt.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_hashtable.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_import.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_importdl.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_index_pool.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_initconfig.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_instruction_sequence.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_instruments.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_interp.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_interp_structs.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_interpframe.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_interpframe_structs.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_interpolation.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_intrinsics.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_jit.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_list.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_llist.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_lock.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_long.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_magic_number.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_mimalloc.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_memoryobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_modsupport.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_moduleobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_namespace.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_object.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_object_alloc.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_object_deferred.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_object_stack.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_object_state.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_obmalloc.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_obmalloc_init.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_opcode_metadata.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_opcode_utils.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_optimizer.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_parking_lot.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_parser.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pathconfig.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pyarena.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pyatomic_ft_wrappers.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pybuffer.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pyerrors.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pyhash.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pylifecycle.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pymath.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pymem.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pymem_init.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pystate.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pystats.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pythonrun.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_pythread.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_qsbr.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_range.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_runtime.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_runtime_structs.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_runtime_init.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_runtime_init_generated.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_semaphore.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_setobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_signal.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_sliceobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_stackref.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_stats.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_strhex.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_structs.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_structseq.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_symtable.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_sysmodule.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_template.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_time.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_typedefs.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_token.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_traceback.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_tracemalloc.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_tstate.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_tuple.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_typeobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_typevarobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_ucnhash.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_unicodeobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_unicodeobject_generated.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_unionobject.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_uniqueid.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_uop_ids.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_uop_metadata.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_warnings.h
+include/python%%XYDOT%%%%ABI%%/internal/pycore_weakref.h
+include/python%%XYDOT%%%%ABI%%/intrcheck.h
+include/python%%XYDOT%%%%ABI%%/iterobject.h
+include/python%%XYDOT%%%%ABI%%/listobject.h
+include/python%%XYDOT%%%%ABI%%/lock.h
+include/python%%XYDOT%%%%ABI%%/longobject.h
+include/python%%XYDOT%%%%ABI%%/marshal.h
+include/python%%XYDOT%%%%ABI%%/memoryobject.h
*** 8076 LINES SKIPPED ***


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ffaf2e.32ccc.5b3dafbb>