Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python314 for openSUSE:Factory checked in at 2026-07-02 20:06:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python314 (Old) and /work/SRC/openSUSE:Factory/.python314.new.1982 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python314" Thu Jul 2 20:06:47 2026 rev:37 rq:1362891 version:3.14.6 Changes: -------- --- /work/SRC/openSUSE:Factory/python314/python314.changes 2026-04-15 16:03:14.559723390 +0200 +++ /work/SRC/openSUSE:Factory/.python314.new.1982/python314.changes 2026-07-02 20:07:59.082325018 +0200 @@ -1,0 +2,543 @@ +Tue Jun 30 02:46:39 UTC 2026 - Matej Cepl <[email protected]> + +- add gcc and g++ dependencies to the -devel package (and BR for + the whole package) + +------------------------------------------------------------------- +Mon Jun 29 06:56:27 UTC 2026 - Jiri Slaby <[email protected]> + +- drop test_UDPLITE_support.patch, upstream already added + (similar) _have_udp_lite() + +------------------------------------------------------------------- +Fri Jun 19 18:12:49 UTC 2026 - Matej Cepl <[email protected]> + +- Fix shebang to use versioned Python interpreter. + +------------------------------------------------------------------- +Tue Jun 16 08:02:52 UTC 2026 - Matej Cepl <[email protected]> + +- Update to 3.14.6: + - Security + - gh-151159: Update Android and iOS installers to use OpenSSL + 3.5.7. + - gh-150599: Fix a possible stack buffer overflow in bz2 when + a bz2.BZ2Decompressor is reused after a decompression + error. The decompressor now becomes unusable after libbz2 + reports an error. (bsc#1267974, CVE-2026-9669) + - gh-149835: shutil.move() now resolves symlinks via + os.path.realpath() when checking whether the destination is + inside the source directory, preventing a symlink-based + bypass of that guard. + - gh-149698: Update bundled libexpat to version 2.8.1 for the + fix for CVE 2026-45186. + - gh-87451: The ftplib module’s undocumented ftpcp function + no longer trusts the IPv4 address value returned from the + source server in response to the PASV command by default, + completing the fix for CVE-2021-4189. As with ftplib.FTP, + the former behavior can be re-enabled by setting the + trust_server_pasv_ipv4_address attribute on the source + ftplib.FTP instance to True. Thanks to Qi Deng at Aurascape + AI for the report (bsc#1265268, CVE-2026-8328). + - gh-149486: tarfile.data_filter() now validates link targets + using the same normalised value that is written to disk, + strips trailing separators from the member name when + resolving a symlink’s directory, and rejects link members + that would replace the destination directory itself. This + closes several path-traversal bypasses of the data + extraction filter (bsc#1267821, CVE-2026-7774). + - gh-149079: Fix a potential denial of service in + unicodedata.normalize(). The canonical ordering step of + Unicode normalization used a quadratic-time insertion sort + for reordering combining characters, which could be + exploited with crafted input containing many combining + characters in non-canonical order. Replaced with + a linear-time counting sort for long runs (bsc#1267581, + CVE-2026-3276). + - gh-149018: Improved protection against XML hash-flooding + attacks in xml.parsers.expat and xml.etree.ElementTree when + Python is compiled with libExpat 2.8.0 or later + (bsc#1264962, CVE-2026-7210). + - Core and Builtins + - gh-151112: Fix a crash in the compiler that could occur + when running out of memory. + - gh-151126: Fix a crash, when there’s no memory left on + a device, which happened in: + - code compilation - _winapi.CreateProcess() + - Now these places raise proper MemoryError errors. + - gh-150700: Fix a SystemError when compiling a class-scope + comprehension containing a lambda that references + __class__, __classdict__, or __conditional_annotations__. + Patch by Bartosz Sławecki. + - gh-150633: Fix the frozen importer accepting module names + with embedded null bytes, which caused it to bypass the + sys.modules cache and create duplicate module objects. + - gh-148613: Fix a data race in the free-threaded build + between gc.set_threshold() and garbage collection + scheduling during object allocation. + - gh-149156: Fix an intermittent crash after os.fork() when + perf trampoline profiling is enabled and the child returns + through trampoline frames inherited from the parent + process. + - gh-149449: Fix a use-after-free crash when the unicodedata + module was removed from sys.modules and garbage-collected + between calls that decode \N{...} escapes or use the + namereplace codec error handler. + - gh-150207: Fix a crash when a memory allocation fails + during tokenizer initialization. A proper MemoryError is + now raised instead. + - gh-150107: asyncio: sendfile() and sock_sendfile() event + loop methods now call file.seek(offset) if file has + a seek() method, even if offset is 0 (default value). + - gh-150146: Fix a crash on a complex type variable + substitution. + - from typing import TypeVar; + memoryview[TypeVar("")][*typing.Mapping[..., ...]] used to + fail due to missing NULL check on _unpack_args C function + call. + - gh-149590: Fix crash when faulthandler is imported more + than once. + - gh-149816: Fix a race condition in _PyBytes_FromList in + free-threading mode. + - gh-149816: Fix a race condition in memoryview with + free-threading. + - gh-149805: Fix a SystemError when compiling a compiling + __classdict__ class annotation. Found by OSS-Fuzz in + #512907042. + - gh-149738: sqlite3: Disallow removing row_factory and + text_factory attributes of a connection to prevent a crash + on a query. + - gh-139808: Add branch protections for AArch64 (BTI/PAC) in + assembly code used by -X perf_jit (Linux perf profiler + integration). + - gh-148450: Fix abc.register() so it invalidates type + version tags for registered classes. + - Library + - gh-151039: Fix a crash when static datetime types outlive + the _datetime module. + - gh-150913: Fix sqlite3.Blob slice assignment to raise + TypeError and IndexError for type and size mismatches + respectively, even when the target slice is empty. + - gh-143008: Fix race conditions when re-initializing + a io.TextIOWrapper object. + - gh-150750: Fix a race condition in + collections.deque.index() with free-threading. + - gh-150685: Update bundled pip to 26.1.2 + - gh-150406: Fix a possible crash occurring during socket + module initialization when the system is out of memory on + platforms without a reentrant gethostbyname. + - gh-150372: readline: Fix a potential crash during tab + completion caused by an out-of-memory error during module + initialization. + - gh-150157: Fix a crash in free-threaded builds that occurs + when pickling by name objects without a __module__ + attribute while sys.modules is concurrently being modified. + - gh-150175: Fix race condition in + unittest.mock.ThreadingMock where concurrent calls could + lose increments to call_count and other attributes due to + a missing lock in _increment_mock_call. + - gh-84353: Preserve non-UTF-8 encoded filenames when + appending to a zipfile.ZipFile. Previously, non-ASCII names + stored in a legacy encoding (without the UTF-8 flag bit + set) could be corrupted when the central directory was + rewritten: they were decoded as cp437 and then re-stored as + UTF-8. + - gh-149816: Fix race condition in + ssl.SSLContext.sni_callback + - gh-149995: Update various docstrings in typing. + - gh-88726: The email package now uses standard MIME charset + names “gb2312” and “big5” instead of non-standard names + “eucgb2312_cn” and “big5_tw”. + - gh-149571: Fix the C implementation of + xml.etree.ElementTree.Element.itertext(): it no longer + emits text for comments and processing instructions. + - gh-149921: Fix reference leaks in error paths of the + _interpchannels and _interpqueues extension modules. + - gh-149816: Fix a race condition in _random.Random.__init__ + method in free-threading mode. + - gh-149801: Add IANA registered names and aliases with + leading zeros before number (like IBM00858, CP00858, + IBM01140, CP01140) for corresponding codecs. + - gh-149701: Fix bad return code from Lib/venv/bin/activate + if hashing is disabled + - gh-112821: In the REPL, autocompletion might run arbitrary + code in the getter of a descriptor. If that getter raised + an exception, autocompletion would fail to present any + options for the entire object. Autocompletion now works as + expected for these objects. + - gh-149489: Fix ElementTree serialization to HTML. The + content of elements “xmp”, “iframe”, “noembed”, “noframes”, + and “plaintext” is no longer escaped. The “plaintext” + element no longer have the closing tag. + - gh-149231: In tomllib, the number of parts in TOML keys is + now limited. + - gh-149046: io: Fix io.StringIO serialization: no longer + call str(obj) on str subclasses. Patch by Thomas Kowalski. + - gh-148954: Fix XML injection vulnerability in + xmlrpc.client.dumps() where the methodname was not being + escaped before interpolation into the XML body. + - gh-148441: xml.parsers.expat: prevent a crash in + CharacterDataHandler() when the character data size exceeds + the parser’s buffer size. + - gh-146452: Fix segfault in pickle when pickling + a dictionary concurrently mutated by another thread in the + free-threaded build. + - gh-142831: Fix a crash in the json module where + a use-after-free could occur if the object being encoded is + modified during serialization. + - gh-90949: Add + SetBillionLaughsAttackProtectionActivationThreshold() and + SetBillionLaughsAttackProtectionMaximumAmplification() to + xmlparser objects to tune protections against billion + laughs attacks. Patch by Bénédikt Tran. + - gh-134261: zip: On reproducible builds, ZipFile uses UTC + instead of the local time when writing file datetimes to + avoid underflows. + - gh-128110: Fix bug in the parsing of email address headers + that could result in extraneous spaces in the decoded text + when using a modern email policy. Space between pairs of + adjacent RFC 2047 encoded-words is now ignored, per section + 6.2 (and consistent with existing parsing of unstructured + headers like Subject). + - gh-107398: Fix tarfile stream mode exception when process + the file with the gzip extra field. + - gh-123853: Update the table of Windows language code + identifiers (LCIDs) used by locale.getdefaultlocale() on + Windows to protocol version 16.0 (2024-04-23). + - gh-91099: imaplib.IMAP4.login() now raises exceptions with + str instead of bytes. Patch by Florian Best. + - Documentation + - gh-150319: Generic builtin and standard library types now + document the meaning of their type parameters. + - gh-109503: Fix documentation for shutil.move() on usage of + os.rename() since nonatomic move might be used even if the + files are on the same filesystem. Patch by Fang Li + - Tests + - gh-151130: Add more tests for PyWeakref_* C API. + - gh-149776: Fix test_socket on Linux kernel 7.1 and newer: + skip UDP Lite tests if it’s not supported. Patch by Victor + Stinner. + - Build + - gh-148294: Corrected the use of AC_PATH_TOOL in + configure.ac to allow a C++ compiler to be found on PATH. + - IDLE + - bpo-6699: Warn the user if a file will be overwritten when + saving. + - C API + - gh-150907: Fix dynamic_annotations.h header file when built + with C++ and Valgrind: add extern "C++" scope for the C++ + template. Patch by Victor Stinner. + - gh-145235: Made PyDict_AddWatcher(), PyDict_ClearWatcher(), + PyDict_Watch(), and PyDict_Unwatch() thread-safe on the + free threaded build. +- Refreshed patches: + - bpo-31046_ensurepip_honours_prefix.patch + - CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch + - CVE-2024-6923-follow-up-EOL-email-headers.patch + - CVE-2025-12781-b64decode-alt-chars.patch + - CVE-2025-15366-imap-ctrl-chars.patch + - gh139257-Support-docutils-0.22.patch + - test_UDPLITE_support.patch + +------------------------------------------------------------------- +Tue Jun 9 15:20:12 UTC 2026 - Matej Cepl <[email protected]> + +- Upgrade to 3.14.5: + - Security + - gh-148178: Hardened _remote_debugging by validating remote + debug offset tables before using them to size memory reads + or interpret remote layouts (bsc#1262132, CVE-2026-5713). + - gh-149254: Update Android and iOS installer to use OpenSSL + 3.0.20. + - gh-149017: Update bundled libexpat to version 2.8.0. + - gh-90309: Base64-encode values when embedding cookies to + JavaScript using the http.cookies.BaseCookie.js_output() + method to avoid injection and escaping (bsc#1262654, + CVE-2026-6019). + - gh-148808: Added buffer boundary check when using nbytes + parameter with + asyncio.AbstractEventLoop.sock_recvfrom_into(). Only + relevant for Windows and the asyncio.ProactorEventLoop. + - gh-148395: Fix a dangling input pointer in + lzma.LZMADecompressor, bz2.BZ2Decompressor, and internal + zlib._ZlibDecompressor when memory allocation fails with + MemoryError, which could let a subsequent decompress() call + read or write through a stale pointer to the + already-released caller buffer (bsc#1262098, CVE-2026-6100). + - gh-148169: A bypass in webbrowser allowed URLs prefixed + with %action to pass the dash-prefix safety check + (bsc#1262319, CVE-2026-4786). + - gh-146581: Fix vulnerability in shutil.unpack_archive() for + ZIP files on Windows which allowed to write files outside + of the destination tree if the patch in the archive + contains a Windows drive prefix. Now such invalid paths + will be skipped. Files containing “..” in the name (like + “foo..bar”) are no longer skipped. + - gh-146333: Fix quadratic backtracking in + configparser.RawConfigParser option parsing regexes (OPTCRE + and OPTCRE_NV). A crafted configuration line with many + whitespace characters could cause excessive CPU usage. + - gh-146211: Reject CR/LF characters in tunnel request + headers for the HTTPConnection.set_tunnel() method + (bsc#1261969, CVE-2026-1502). + - Core and Builtins + - gh-146270: Fix a sequential consistency bug in + structmember.c. + - gh-137293: Fix SystemError when searching ELF Files in + sys.remote_exec(). + - gh-149122: Fix a crash in optimized calls to all(), any(), + tuple(), list(), and set() with an async generator + expression argument (for example, tuple(await x for x in + y)). These calls now correctly raise TypeError instead of + crashing. + - gh-113956: Fix a data race in sys.intern() in the + free-threaded build when interning a string owned by + another thread. An interned copy owned by the current + thread is used instead when it is not safe to immortalize + the original. ++++ 257 more lines (skipped) ++++ between /work/SRC/openSUSE:Factory/python314/python314.changes ++++ and /work/SRC/openSUSE:Factory/.python314.new.1982/python314.changes Old: ---- Python-3.14.4.tar.xz Python-3.14.4.tar.xz.sigstore macros.python3 New: ---- Python-3.14.6.tar.xz Python-3.14.6.tar.xz.sigstore ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python314.spec ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:03.090463600 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:03.098463877 +0200 @@ -124,7 +124,7 @@ # %%define tarversion %%{version} # %%endif # We don't process beta signs well -%define folderversion 3.14.4 +%define folderversion %{version} %define sitedir %{_libdir}/python%{python_version} # three possible ABI kinds: m - pymalloc, d - debug build; see PEP 3149 %define abi_kind %{nil} @@ -162,7 +162,7 @@ # _md5.cpython-38m-x86_64-linux-gnu.so %define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so Name: %{python_pkg_name}%{psuffix} -Version: 3.14.4 +Version: 3.14.6 %define tarversion %{version} %define tarname Python-%{tarversion} Release: 0 @@ -174,7 +174,6 @@ Source2: baselibs.conf Source3: README.SUSE Source4: externally_managed.in -Source7: macros.python3 Source8: import_failed.py Source9: import_failed.map Source10: pre_checkin.sh @@ -244,7 +243,10 @@ #### Python 3.14 END OF PATCHES BuildRequires: autoconf-archive BuildRequires: automake +BuildRequires: crypto-policies-scripts BuildRequires: fdupes +BuildRequires: gcc +BuildRequires: gcc-c++ BuildRequires: gmp-devel BuildRequires: lzma-devel BuildRequires: netcfg @@ -258,8 +260,9 @@ BuildRequires: pkgconfig(uuid) BuildRequires: pkgconfig(zlib) #!BuildIgnore: gdk-pixbuf-loader-rsvg -%if 0%{?suse_version} >= 1550 -# The provider for python(abi) is in rpm-build-python +%if 0%{?suse_version} >= 1550 && %{without base} +# Skip for the base flavor: rpm-build-python requires python3-base, which +# creates an unresolvable dependency loop when building python3xx-base itself. BuildRequires: rpm-build-python %endif %if 0%{?suse_version} >= 1500 && 0%{?suse_version} < 1599 @@ -313,11 +316,6 @@ Recommends: %{python_pkg_name}-dbm Recommends: %{python_pkg_name}-pip %obsolete_python_versioned -%if %{primary_interpreter} -Provides: python3 = %{python_version} -Provides: python3-readline -Provides: python3-sqlite3 -%endif %endif %{?suse_build_hwcaps_libs} @@ -345,9 +343,6 @@ Summary: TkInter, a Python Tk Interface Requires: %{python_pkg_name} = %{version} %obsolete_python_versioned tk -%if %{primary_interpreter} -Provides: python3-tk = %{version} -%endif %description -n %{python_pkg_name}-tk Python interface to Tk. Tk is the GUI toolkit that comes with Tcl. @@ -356,9 +351,6 @@ Summary: Python Interface to the (N)Curses Library Requires: %{python_pkg_name} = %{version} %obsolete_python_versioned curses -%if %{primary_interpreter} -Provides: python3-curses -%endif %description -n %{python_pkg_name}-curses An easy to use interface to the (n)curses CUI library. CUI stands for @@ -368,9 +360,6 @@ Summary: Python Interface to the GDBM Library Requires: %{python_pkg_name} = %{version} %obsolete_python_versioned dbm -%if %{primary_interpreter} -Provides: python3-dbm -%endif %description -n %{python_pkg_name}-dbm An easy to use interface for Unix DBM databases, and more specifically, @@ -381,9 +370,6 @@ Requires: %{python_pkg_name} = %{version} Requires: %{python_pkg_name}-tk %obsolete_python_versioned idle -%if %{primary_interpreter} -Provides: python3-idle = %{version} -%endif %description -n %{python_pkg_name}-idle IDLE is a Tkinter based integrated development environment for Python. @@ -395,9 +381,6 @@ Summary: Package Documentation for Python 3 Enhances: %{python_pkg_name} = %{python_version} %obsolete_python_versioned doc -%if %{primary_interpreter} -Provides: python3-doc = %{version} -%endif %description -n %{python_pkg_name}-doc Tutorial, Global Module Index, Language Reference, Library Reference, @@ -407,9 +390,6 @@ %package -n %{python_pkg_name}-doc-devhelp Summary: Additional Package Documentation for Python 3 in devhelp format %obsolete_python_versioned doc-devhelp -%if %{primary_interpreter} -Provides: python3-doc-devhelp = %{version} -%endif %description -n %{python_pkg_name}-doc-devhelp Tutorial, Global Module Index, Language Reference, Library Reference, @@ -434,15 +414,11 @@ %obsolete_python_versioned typing # python3-xml was merged into python3, now moved into -base Provides: %{python_pkg_name}-xml = %{version} -%if %{primary_interpreter} -Provides: python3-asyncio = %{version} -Obsoletes: python3-asyncio < %{version} -Provides: python3-base = %{version} -Obsoletes: python3-base < %{version} -Provides: python3-typing = %{version} -Obsoletes: python3-typing < %{version} -Provides: python3-xml = %{version} -Obsoletes: python3-xml < %{version} +# Explicitly provided because rpm-build-python (which auto-generates this) +# cannot be installed in the base flavor build root due to a bootstrap cycle: +# rpm-build-python -> python3-base -> (this package) +%if %{with GIL} +Provides: python(abi) = %{python_version} %endif %description -n %{python_pkg_name}-base @@ -467,11 +443,6 @@ Requires: %{python_pkg_name}-base = %{version} Provides: %{python_pkg_name}-demo = %{version} %obsolete_python_versioned tools -%if %{primary_interpreter} -Provides: python3-demo = %{version} -Provides: python3-tools = %{version} -Obsoletes: python3-demo < %{version} -%endif %description -n %{python_pkg_name}-tools A number of scripts that are useful for building, testing or extending Python, @@ -480,10 +451,9 @@ %package -n %{python_pkg_name}-devel Summary: Include Files and Libraries Mandatory for Building Python Modules Requires: %{python_pkg_name}-base = %{version} +Requires: gcc +Requires: gcc-c++ %obsolete_python_versioned devel -%if %{primary_interpreter} -Provides: python3-devel = %{version} -%endif %description -n %{python_pkg_name}-devel The Python programming language's interpreter can be extended with @@ -501,9 +471,6 @@ Requires: %{python_pkg_name} = %{version} Requires: %{python_pkg_name}-tk = %{version} %obsolete_python_versioned testsuite -%if %{primary_interpreter} -Provides: python3-testsuite = %{version} -%endif %description -n %{python_pkg_name}-testsuite Unit tests that are useful for verifying integrity and functionality @@ -533,7 +500,7 @@ # break up "/""usr" like this to prevent replacing with %%{_prefix} find $dir -name '*.py' -type f -print0 \ | xargs -0 grep -lE '^#! *(/''usr/.*bin/(env +)?)?python' \ - | xargs sed -r -i -e '1s@^#![[:space:]]*(/''usr/(local/)?bin/(env +)?)?python([0-9]+(\.[0-9]+)?)?@#!%{_bindir}/python3@' + | xargs sed -r -i -e '1s@^#![[:space:]]*(/''usr/(local/)?bin/(env +)?)?python([0-9]+(\.[0-9]+)?)?@#!%{_bindir}/python%{python_version}@' done %else # For non-primary Python, just don't bother (bsc#1193179) and remove all @@ -768,7 +735,7 @@ # keep just idle3.X rm %{buildroot}%{_bindir}/idle3 -# mve idle binary to idle3.14t to avoid conflict +# move idle binary to idle3.14t to avoid conflict %if %{without GIL} mv %{buildroot}%{_bindir}/idle%{python_version} %{buildroot}%{_bindir}/idle%{python_abi} %endif @@ -808,20 +775,12 @@ find "%{buildroot}/%{sitedir}/$dir"/* -maxdepth 0 -name "test" -o -exec rm -rf {} + done -# overwrite the copied binary with a link -ln -sf python%{python_version} %{buildroot}%{_bindir}/python3 - -# decide to ship python3 or just python3.X -%if !%{primary_interpreter} -# base rm %{buildroot}%{_bindir}/python3 rm %{buildroot}%{_bindir}/pydoc3 rm %{buildroot}%{_mandir}/man1/python3.1 -# devel rm %{buildroot}%{_bindir}/python3-config rm %{buildroot}%{_libdir}/libpython3.so rm %{buildroot}%{_libdir}/pkgconfig/{python3,python3-embed}.pc -%endif %if %{with externally_managed} # PEP-0668 mark this as a distro maintained python @@ -854,7 +813,13 @@ find "$PDOCS" -name "*.bat" -delete # put gdb helper script into place -install -m 755 -D Tools/gdb/libpython.py %{buildroot}%{_datadir}/gdb/auto-load/%{_libdir}/libpython%{python_abi}.so.%{so_major}.%{so_minor}-gdb.py +%define gdb_help_script libpython%{python_abi}.so.%{so_major}.%{so_minor}-gdb.py +install -m 755 -D Tools/gdb/libpython.py \ + %{buildroot}%{_datadir}/gdb/auto-load/%{_libdir}/%{gdb_help_script} +# don't use %python314_fix_shebang_path to avoid circular dependency via +# python-rpm-macros +sed -i "1s@#\!.*python[^ ]*@#\!%{_bindir}/python%{python_version}@" \ + %{buildroot}%{_datadir}/gdb/auto-load/%{_libdir}/%{gdb_help_script} # install devel files to /config #cp Makefile Makefile.pre.in Makefile.pre $RPM_BUILD_ROOT%%{sitedir}/config-%%{python_abi}/ @@ -862,12 +827,6 @@ # Remove -IVendor/ from python-config boo#1231795 sed -i 's/-IVendor\///' %{buildroot}%{_bindir}/python%{python_abi}-config -# RPM macros -%if %{primary_interpreter} -mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d/ -install -m 644 %{SOURCE7} %{buildroot}%{_rpmconfigdir}/macros.d/ # macros.python3 -%endif - # import_failed hooks FAILDIR=%{buildroot}/%{sitedir}/_import_failed mkdir $FAILDIR @@ -891,8 +850,8 @@ # not packaged without GIL %if %{without GIL} -rm -rf %{buildroot}%{_libdir}/pkgconfig/python-%{python_version}.pc -rm -rf %{buildroot}%{_libdir}/pkgconfig/python-%{python_version}-embed.pc +rm -f %{buildroot}%{_libdir}/pkgconfig/python-%{python_abi}*.pc +rm -f %{buildroot}%{_libdir}/pkgconfig/python-%{python_version}*.pc rm %{buildroot}%{_bindir}/python%{python_version} rm %{buildroot}%{_bindir}/pydoc%{python_version} rm %{buildroot}%{_bindir}/python%{python_version}-config @@ -974,16 +933,13 @@ %files -n %{python_pkg_name}-devel %{_libdir}/libpython%{python_abi}.so -%if %{primary_interpreter} -%{_libdir}/libpython3.so +%if %{with GIL} +%{_libdir}/pkgconfig/python-%{python_abi}.pc +%{_libdir}/pkgconfig/python-%{python_abi}-embed.pc %endif -%{_libdir}/pkgconfig/* %{_includedir}/python%{python_abi} %{sitedir}/config-%{python_abi}-* %{_bindir}/python%{python_abi}-config -%if %{primary_interpreter} -%{_bindir}/python3-config -%endif # Own these directories to not depend on gdb %dir %{_datadir}/gdb %dir %{_datadir}/gdb/auto-load @@ -1017,9 +973,6 @@ %doc %{_docdir}/%{name}/README.rst %license LICENSE %doc %{_docdir}/%{name}/README.SUSE -%if %{primary_interpreter} -%{_mandir}/man1/python3.1%{?ext_man} -%endif %if %{with GIL} %{_mandir}/man1/python%{python_version}.1%{?ext_man} @@ -1031,10 +984,6 @@ %endif # license text, not a doc because the code can use it at run-time %{sitedir}/LICENSE.txt -# RPM macros -%if %{primary_interpreter} -%{_rpmconfigdir}/macros.d/macros.python3 -%endif # build-details %{_libdir}/python3*/build-details.json @@ -1148,11 +1097,6 @@ # import-failed hooks %{sitedir}/_import_failed %{sitedir}/site-packages/zzzz-import-failed-hooks.pth -# symlinks -%if %{primary_interpreter} -%{_bindir}/python3 -%{_bindir}/pydoc3 -%endif # executables %if %{with GIL} %attr(755, root, root) %{_bindir}/pydoc%{python_version} ++++++ CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:03.426475221 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:03.478477020 +0200 @@ -4,11 +4,11 @@ Lib/test/test_xml_etree.py | 10 ++++++++++ 3 files changed, 17 insertions(+) -Index: Python-3.14.2/Lib/test/test_pyexpat.py +Index: Python-3.14.6/Lib/test/test_pyexpat.py =================================================================== ---- Python-3.14.2.orig/Lib/test/test_pyexpat.py 2025-12-11 18:10:58.057084164 +0100 -+++ Python-3.14.2/Lib/test/test_pyexpat.py 2025-12-11 18:12:07.480767746 +0100 -@@ -848,6 +848,10 @@ +--- Python-3.14.6.orig/Lib/test/test_pyexpat.py 2026-06-16 10:10:27.487668052 +0200 ++++ Python-3.14.6/Lib/test/test_pyexpat.py 2026-06-16 10:12:18.364066546 +0200 +@@ -1032,6 +1032,10 @@ self.assertEqual(started, ['doc']) def test_reparse_deferral_disabled(self): @@ -19,10 +19,10 @@ started = [] def start_element(name, _): -Index: Python-3.14.2/Lib/test/test_sax.py +Index: Python-3.14.6/Lib/test/test_sax.py =================================================================== ---- Python-3.14.2.orig/Lib/test/test_sax.py 2025-12-11 18:10:58.116419305 +0100 -+++ Python-3.14.2/Lib/test/test_sax.py 2025-12-11 18:12:07.481506046 +0100 +--- Python-3.14.6.orig/Lib/test/test_sax.py 2026-06-16 10:10:27.552009501 +0200 ++++ Python-3.14.6/Lib/test/test_sax.py 2026-06-16 10:12:18.364564564 +0200 @@ -1241,6 +1241,9 @@ self.assertEqual(result.getvalue(), start + b"<doc></doc>") @@ -33,10 +33,10 @@ def test_flush_reparse_deferral_disabled(self): result = BytesIO() xmlgen = XMLGenerator(result) -Index: Python-3.14.2/Lib/test/test_xml_etree.py +Index: Python-3.14.6/Lib/test/test_xml_etree.py =================================================================== ---- Python-3.14.2.orig/Lib/test/test_xml_etree.py 2025-12-11 18:10:58.548740381 +0100 -+++ Python-3.14.2/Lib/test/test_xml_etree.py 2025-12-11 18:12:07.481767744 +0100 +--- Python-3.14.6.orig/Lib/test/test_xml_etree.py 2026-06-16 10:10:28.031254289 +0200 ++++ Python-3.14.6/Lib/test/test_xml_etree.py 2026-06-16 10:12:18.365162471 +0200 @@ -138,6 +138,11 @@ return mock.patch.object(cls, "__eq__", autospec=True, wraps=eq) @@ -49,7 +49,7 @@ def checkwarnings(*filters, quiet=False): def decorator(test): def newtest(*args, **kwargs): -@@ -1573,9 +1578,11 @@ +@@ -1598,9 +1603,11 @@ self.assert_event_tags(parser, [('end', 'root')]) self.assertIsNone(parser.close()) @@ -61,7 +61,7 @@ def test_simple_xml_chunk_5(self): self.test_simple_xml(chunk_size=5, flush=True) -@@ -1802,6 +1809,9 @@ +@@ -1827,6 +1834,9 @@ self.assert_event_tags(parser, [('end', 'doc')]) ++++++ CVE-2024-6923-follow-up-EOL-email-headers.patch ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:03.706484905 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:03.770487119 +0200 @@ -15,10 +15,10 @@ 2 files changed, 8 insertions(+) create mode 100644 Misc/NEWS.d/next/Security/2026-01-21-12-34-05.gh-issue-144125.TAz5uo.rst -Index: Python-3.14.3/Lib/test/test_email/test_policy.py +Index: Python-3.14.6/Lib/test/test_email/test_policy.py =================================================================== ---- Python-3.14.3.orig/Lib/test/test_email/test_policy.py 2026-02-03 16:32:20.000000000 +0100 -+++ Python-3.14.3/Lib/test/test_email/test_policy.py 2026-02-13 17:09:32.641745760 +0100 +--- Python-3.14.6.orig/Lib/test/test_email/test_policy.py 2026-06-16 10:10:26.617927695 +0200 ++++ Python-3.14.6/Lib/test/test_email/test_policy.py 2026-06-16 10:20:06.557238349 +0200 @@ -323,6 +323,10 @@ message.as_bytes(), f"{text}\nBody".encode(), @@ -30,10 +30,10 @@ # XXX: Need subclassing tests. # For adding subclassed objects, make sure the usual rules apply (subclass -Index: Python-3.14.3/Misc/NEWS.d/next/Security/2026-01-21-12-34-05.gh-issue-144125.TAz5uo.rst +Index: Python-3.14.6/Misc/NEWS.d/next/Security/2026-01-21-12-34-05.gh-issue-144125.TAz5uo.rst =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ Python-3.14.3/Misc/NEWS.d/next/Security/2026-01-21-12-34-05.gh-issue-144125.TAz5uo.rst 2026-02-13 17:09:32.642152246 +0100 ++++ Python-3.14.6/Misc/NEWS.d/next/Security/2026-01-21-12-34-05.gh-issue-144125.TAz5uo.rst 2026-06-16 10:20:06.557642029 +0200 @@ -0,0 +1,4 @@ +:mod:`~email.generator.BytesGenerator` will now refuse to serialize (write) headers +that are unsafely folded or delimited; see ++++++ CVE-2025-12781-b64decode-alt-chars.patch ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:03.938492929 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:03.994494866 +0200 @@ -12,11 +12,11 @@ Misc/NEWS.d/next/Library/2025-11-06-12-03-29.gh-issue-125346.7Gfpgw.rst | 5 + 4 files changed, 91 insertions(+), 17 deletions(-) -Index: Python-3.14.3/Doc/library/base64.rst +Index: Python-3.14.6/Doc/library/base64.rst =================================================================== ---- Python-3.14.3.orig/Doc/library/base64.rst 2026-02-03 16:32:20.000000000 +0100 -+++ Python-3.14.3/Doc/library/base64.rst 2026-02-13 15:43:18.030360439 +0100 -@@ -77,15 +77,20 @@ +--- Python-3.14.6.orig/Doc/library/base64.rst 2026-06-10 12:03:53.000000000 +0200 ++++ Python-3.14.6/Doc/library/base64.rst 2026-06-16 10:20:09.201159771 +0200 +@@ -79,15 +79,20 @@ A :exc:`binascii.Error` exception is raised if *s* is incorrectly padded. @@ -42,7 +42,7 @@ .. function:: standard_b64encode(s) -@@ -116,6 +121,9 @@ +@@ -118,6 +123,9 @@ ``/`` in the standard Base64 alphabet, and return the decoded :class:`bytes`. @@ -52,10 +52,10 @@ .. function:: b32encode(s) -Index: Python-3.14.3/Lib/base64.py +Index: Python-3.14.6/Lib/base64.py =================================================================== ---- Python-3.14.3.orig/Lib/base64.py 2026-02-13 15:20:33.905228929 +0100 -+++ Python-3.14.3/Lib/base64.py 2026-02-13 15:43:18.030771327 +0100 +--- Python-3.14.6.orig/Lib/base64.py 2026-06-16 10:10:24.614984342 +0200 ++++ Python-3.14.6/Lib/base64.py 2026-06-16 10:20:09.201586104 +0200 @@ -69,20 +69,39 @@ The result is returned as a bytes object. A binascii.Error is raised if s is incorrectly padded. @@ -121,10 +121,10 @@ -Index: Python-3.14.3/Lib/test/test_base64.py +Index: Python-3.14.6/Lib/test/test_base64.py =================================================================== ---- Python-3.14.3.orig/Lib/test/test_base64.py 2026-02-13 15:20:35.393785541 +0100 -+++ Python-3.14.3/Lib/test/test_base64.py 2026-02-13 15:43:18.031706655 +0100 +--- Python-3.14.6.orig/Lib/test/test_base64.py 2026-06-16 10:10:26.133184434 +0200 ++++ Python-3.14.6/Lib/test/test_base64.py 2026-06-16 10:20:09.201937526 +0200 @@ -242,6 +242,25 @@ eq(base64.b64decode(data, altchars=altchars_str), res) eq(base64.b64decode(data_str, altchars=altchars_str), res) @@ -184,10 +184,10 @@ def test_b32encode(self): eq = self.assertEqual -Index: Python-3.14.3/Misc/NEWS.d/next/Library/2025-11-06-12-03-29.gh-issue-125346.7Gfpgw.rst +Index: Python-3.14.6/Misc/NEWS.d/next/Library/2025-11-06-12-03-29.gh-issue-125346.7Gfpgw.rst =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ Python-3.14.3/Misc/NEWS.d/next/Library/2025-11-06-12-03-29.gh-issue-125346.7Gfpgw.rst 2026-02-13 15:43:18.032082102 +0100 ++++ Python-3.14.6/Misc/NEWS.d/next/Library/2025-11-06-12-03-29.gh-issue-125346.7Gfpgw.rst 2026-06-16 10:20:09.202290421 +0200 @@ -0,0 +1,5 @@ +Accepting ``+`` and ``/`` characters with an alternative alphabet in +:func:`base64.b64decode` and :func:`base64.urlsafe_b64decode` is now ++++++ CVE-2025-15366-imap-ctrl-chars.patch ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:04.226502890 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:04.246503582 +0200 @@ -9,10 +9,10 @@ Misc/NEWS.d/next/Security/2026-01-16-11-41-06.gh-issue-143921.AeCOor.rst | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) -Index: Python-3.14.3/Lib/imaplib.py +Index: Python-3.14.6/Lib/imaplib.py =================================================================== ---- Python-3.14.3.orig/Lib/imaplib.py 2026-02-13 15:20:34.675850664 +0100 -+++ Python-3.14.3/Lib/imaplib.py 2026-02-13 15:43:20.726880248 +0100 +--- Python-3.14.6.orig/Lib/imaplib.py 2026-06-16 10:10:25.426137173 +0200 ++++ Python-3.14.6/Lib/imaplib.py 2026-06-16 10:20:12.294105039 +0200 @@ -131,7 +131,7 @@ # We compile these in _mode_xxx. _Literal = br'.*{(?P<size>\d+)}$' @@ -31,11 +31,11 @@ data = data + b' ' + arg literal = self.literal -Index: Python-3.14.3/Lib/test/test_imaplib.py +Index: Python-3.14.6/Lib/test/test_imaplib.py =================================================================== ---- Python-3.14.3.orig/Lib/test/test_imaplib.py 2026-02-13 15:20:36.132236378 +0100 -+++ Python-3.14.3/Lib/test/test_imaplib.py 2026-02-13 15:43:20.727593302 +0100 -@@ -663,6 +663,12 @@ +--- Python-3.14.6.orig/Lib/test/test_imaplib.py 2026-06-16 10:10:26.876094523 +0200 ++++ Python-3.14.6/Lib/test/test_imaplib.py 2026-06-16 10:20:12.295388531 +0200 +@@ -673,6 +673,12 @@ self.assertEqual(data[0], b'Returned to authenticated state. (Success)') self.assertEqual(client.state, 'AUTH') @@ -48,10 +48,10 @@ # property tests def test_file_property_should_not_be_accessed(self): -Index: Python-3.14.3/Misc/NEWS.d/next/Security/2026-01-16-11-41-06.gh-issue-143921.AeCOor.rst +Index: Python-3.14.6/Misc/NEWS.d/next/Security/2026-01-16-11-41-06.gh-issue-143921.AeCOor.rst =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ Python-3.14.3/Misc/NEWS.d/next/Security/2026-01-16-11-41-06.gh-issue-143921.AeCOor.rst 2026-02-13 15:43:20.727873249 +0100 ++++ Python-3.14.6/Misc/NEWS.d/next/Security/2026-01-16-11-41-06.gh-issue-143921.AeCOor.rst 2026-06-16 10:20:12.295741997 +0200 @@ -0,0 +1 @@ +Reject control characters in IMAP commands. ++++++ Python-3.14.4.tar.xz -> Python-3.14.6.tar.xz ++++++ /work/SRC/openSUSE:Factory/python314/Python-3.14.4.tar.xz /work/SRC/openSUSE:Factory/.python314.new.1982/Python-3.14.6.tar.xz differ: char 26, line 1 ++++++ Python-3.14.4.tar.xz.sigstore -> Python-3.14.6.tar.xz.sigstore ++++++ --- /work/SRC/openSUSE:Factory/python314/Python-3.14.4.tar.xz.sigstore 2026-04-15 16:03:14.519721746 +0200 +++ /work/SRC/openSUSE:Factory/.python314.new.1982/Python-3.14.6.tar.xz.sigstore 2026-07-02 20:07:56.466234596 +0200 @@ -1 +1 @@ -{"mediaType": "application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial": {"certificate": {"rawBytes": "MIICzTCCAlSgAwIBAgIUNKmgm8crGeqcaZGe+UcKIkC6eeMwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNDA3MTc0ODI3WhcNMjYwNDA3MTc1ODI3WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8GWpcLUVObEUDkYGyztWraUKIIh7R/lw+i6Byw6iUgoyO7SeWt/O1Gr4v5bLBvDr9Zf3qH0ZYpPPy7mEWjpX5aOCAXMwggFvMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUsLccaNXB35sDVjPPrG4MSXLmDPAwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHQYDVR0RAQH/BBMwEYEPaHVnb0BweXRob24ub3JnMCwGCisGAQQBg78wAQEEHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDAuBgorBgEEAYO/MAEIBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnWkPW1IAAAQDAEcwRQIgbfqtlIPOp3dexdPPIw8P2dB7LWUGpwxzlrHeehtcCwICIQDf8s5K9AJQfzX0+PF+/WI/1qiWsJIQP0kmGfZd3t3WsTAKBggqhkjOPQQDAwNnADBkAjAWOvDGxPInHozw71vK+D0hBicVo6EnON/DtyL7ibZFehA/GQT7 4s0vg7BJVxr1v7YCMH4KTfKB5uZKIRJOr5OdHB0c9DYtZb8Rvuag5g4e48GhKVaW1yDsRKhFJ6uevehvbg=="}, "tlogEntries": [{"logIndex": "1247676092", "logId": {"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion": {"kind": "hashedrekord", "version": "0.0.1"}, "integratedTime": "1775584107", "inclusionPromise": {"signedEntryTimestamp": "MEUCIFF1ZkKHkOfCGGlc25+n2BiMTGlgW4VdLYCZwOZKcGTqAiEA91EgqiYvuRUdudBKpPsVQb/E05TCR993D8kRW6Hk8io="}, "inclusionProof": {"logIndex": "1125771830", "rootHash": "7AwwN9ITapmRRfpMaltblXB/KVxly9DcOGDHeFPjdeo=", "treeSize": "1125771836", "hashes": ["756uhIKcieJ+hbtjS3a1kEODI683klDcC43zOgVG6/0=", "Ct3LP6+4l/UhDNZNhiuC/GcPV0jUDyZVp4HRoj0poaY=", "RXkU0cJhMqEd0Zyy9YeHPH8JHonofzADND438l33X0U=", "6Wg3vEwO12L72STDZN9L79qgdwxsY9zT7hqSb1HXZXA=", "IfRWcPrix0hDOpyycaEQVejN9YyiPN67yhz1YR4NIDY=", "yTa95BXAWI9bH35Oy1diIUgjjJKAec3GLyLfaRrI0Tg=", "dJtu8pJ3yhn0rC0EFdgoebJF3MldcpHMX00y2eHPYDY=", "81dr9W/Ax/UfYIsxNTxjBYK7sYU/az3TPo6rdJosDO0=", "4rt9/yEt1Zy95yQxSCxpoOu6E3CWDDxp Gd37aEEFadg=", "+wrWv/cO9uKKpjC+BMIC/Fv2Ipe50C7wL0wd+YlH5Kw=", "ZxCK8NmXD/qxQEyqBRFYo8WOz/kUHRHA+BXOPC6789o=", "civ0dM20+gns15I1mfWo9Jt0YBzbex5QVYwaGjqgcs4=", "2v7+H4Fejl7qkIhG2G79UQH+wJ0QpPreOZwulFGWzLI=", "vXMaHYsu3vXUFKr78h1vCtaZWhgh1OwZh5O05RGwxkw=", "WbswTMpSfvjDqroD6lDGb2VDeljBPlMsAchJ+0L+3U4=", "psQ1PrYXqFtm6T3uF1q91rl1dhNiykO58GpOdq1ZaKI=", "DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="], "checkpoint": {"envelope": "rekor.sigstore.dev - 1193050959916656506\n1125771836\n7AwwN9ITapmRRfpMaltblXB/KVxly9DcOGDHeFPjdeo=\n\n\u2014 rekor.sigstore.dev wNI9ajBFAiEAhlJOgNDM16Po1F/3oPqb2r4rB3hBUPnExynP522NFOoCIC9OJcZfCU82PD4B55yXArKxDdxHEX56JyNgu8XTcC2y\n"}}, "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJkOTIzYzUxMzAzZTM4ZTI0OTEzNmZjMWJkZjM1NjhkNTZlY2IwMzIxNGVmZGVmNDg1MTYxNzZkM2Q3ZmFhZWY4In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUM0eDhwYklTeEJta2VoNWxDYjA1aUI1MXRyOHVzVklYL1MyandH VnAxMVJBSWhBT21pR0NndlJISFUrTGVnYWFKSjgzbUNtN0NkclBtM2F3MVNKdnIydGhDKyIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVTjZWRU5EUVd4VFowRjNTVUpCWjBsVlRrdHRaMjA0WTNKSFpYRmpZVnBIWlN0VlkwdEphME0yWldWTmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVFUVROTlZHTXdUMFJKTTFkb1kwNU5hbGwzVGtSQk0wMVVZekZQUkVrelYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVU0UjFkd1kweFZWazlpUlZWRWExbEhlWHAwVjNKaFZVdEpTV2czVWk5c2R5dHBOa0lLZVhjMmFWVm5iM2xQTjFObFYzUXZUekZIY2pSMk5XSk1RblpFY2psYVpqTnhTREJhV1hCUVVIazNiVVZYYW5CWU5XRlBRMEZZVFhkblowWjJUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZ6VEdOakNtRk9XRUl6TlhORVZtcFFVSEpITkUxVFdFeHRSRkJCZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDBoUldVUldVakJTUVZGSUwwSkNUW GRGV1VWUVlVaFdibUl3UW5kbFdGSnZZakkwZFdJelNtNU5RM2RIUTJselIwRlJVVUpuTnpoM1FWRkZSUXBJYldnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemx6WWpKa2NHSnBPWFpaV0ZZd1lVUkJkVUpuYjNKQ1owVkZRVmxQTDAxQlJVbENRMEZOQ2todGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1hOaU1tUndZbWs1ZGxsWVZqQmhSRU5DYVdkWlMwdDNXVUpDUVVoWFpWRkpSVUZuVWpnS1FraHZRV1ZCUWpKQlRqQTVUVWR5UjNoNFJYbFplR3RsU0Vwc2JrNTNTMmxUYkRZME0ycDVkQzgwWlV0amIwRjJTMlUyVDBGQlFVSnVWMnRRVnpGSlFRcEJRVkZFUVVWamQxSlJTV2RpWm5GMGJFbFFUM0F6WkdWNFpGQlFTWGM0VURKa1FqZE1WMVZIY0hkNGVteHlTR1ZsYUhSalEzZEpRMGxSUkdZNGN6VkxDamxCU2xGbWVsZ3dLMUJHS3k5WFNTOHhjV2xYYzBwSlVWQXdhMjFIWmxwa00zUXpWM05VUVV0Q1oyZHhhR3RxVDFCUlVVUkJkMDV1UVVSQ2EwRnFRVmNLVDNaRVIzaFFTVzVJYjNwM056RjJTeXRFTUdoQ2FXTldielpGYms5T0wwUjBlVXczYVdKYVJtVm9RUzlIVVZRM05ITXdkbWMzUWtwV2VISXhkamRaUXdwTlNEUkxWR1pMUWpWMVdrdEpVa3BQY2pWUFpFaENNR001UkZsMFdtSTRVbloxWVdjMVp6UmxORGhIYUV0V1lWY3hlVVJ6VWt0b1JrbzJkV1YyWldoMkNtSm5QVDBLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In19fX0="}], "timestampVerificationData": {}}, "me ssageSignature": {"messageDigest": {"algorithm": "SHA2_256", "digest": "2SPFEwPjjiSRNvwb3zVo1W7LAyFO/e9IUWF209f6rvg="}, "signature": "MEYCIQC4x8pbISxBmkeh5lCb05iB51tr8usVIX/S2jwGVp11RAIhAOmiGCgvRHHU+LegaaJJ83mCm7CdrPm3aw1SJvr2thC+"}} +{"mediaType": "application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial": {"certificate": {"rawBytes": "MIIDIjCCAqmgAwIBAgIULkeeHVLebzeKX+03cM5j8kDhiSgwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjEwMTMxMTEyWhcNMjYwNjEwMTMyMTEyWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ+TWhqkbMElNdRRWS8DnLzynKtn9tf3UgFD0gf9cSoZDkq/B5tGR/DjiDMrZzh55GRs6bZa/+BYQH8awUAq/W6OCAcgwggHEMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQULkRpDZ2dwvwt+eV0xpF5mrc7ipIwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHQYDVR0RAQH/BBMwEYEPaHVnb0BweXRob24ub3JnMCwGCisGAQQBg78wAQEEHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDAuBgorBgEEAYO/MAEIBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aDBSBgorBgEEAYO/MAEYBEQMQkNnY3hNekkwTWpJMUVpWm9kSFJ3Y3pvbE1rWWxNa1puYVhSb2RXSXVZMjl0SlRKR2JHOW5hVzRsTWtadllYVjBhQTCBiwYKKwYBBAHWeQIEAgR9BHsAeQB3AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnrGoh70AAAQDAEgwRgIhAJlet4AMGmjtESDZwbTZP3JxqpkuPNLd2ynKoJSER6PPAiEAvlpy ohxYUFvrgalexO673wDjZDuAp2FgOVQvRrAbdjowCgYIKoZIzj0EAwMDZwAwZAIwMphCvp78RpPcyPuhHqMUNgbYMFHDcY2AB7FWETmVbpwhqaACSICPDkYmDwkH5H4gAjBVcklCSMj5TF8+ezEtsjsWH0ubihdYPmcyZcex3lJ7MHI1jsC00FMpt7ZCuzbKAMU="}, "tlogEntries": [{"logIndex": "1779450776", "logId": {"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion": {"kind": "hashedrekord", "version": "0.0.1"}, "integratedTime": "1781097073", "inclusionPromise": {"signedEntryTimestamp": "MEQCIC7lJDNXEwW901DTrmqipF8X542vkKWpPrizH113LT30AiAjOXr76ssc7mmuc0tGONUh5NVvzQYZIbmK5hLaF+nQRA=="}, "inclusionProof": {"logIndex": "1657546514", "rootHash": "0m2umLO+lqcF7koOZP+01JIJJldfGMH8cDsdWVt0aMA=", "treeSize": "1657546545", "hashes": ["fX2kxxsiws+tyGDcuhm1Bcc5sA0jYheWqT261AsOFeA=", "rIqkz50Pnn6BtzHFC0HU7qxoXLTqZIT4BjaaacYJzWs=", "GViuZ0wlIU9G6I+yAqAFql5A57pkRWyYBpIXLg/oHLg=", "3rkkmOJp2MaBqtUH7f+1iZehvWIsMScIqgIPgBMVGxc=", "2kA2FuT2Y8ELOJOvDXltrByw483Js1R79fXuIFfVB7k=", "v/zSXPVfubc3/VCAy8CdjknD7ro87A3InMhVXc7Iz6Q=", "lfvD66pLCHkxLvHN AI9NmQlGnF/VuM8rxE4wHlMymtQ=", "YKXYAopRdd7Gaq+8RaEaNzT3lC/XGwrGusuWsPwAyxg=", "uZxh5RpoVTYrvwPqUFfYUd7V3MNDza3o4MCR70SHMDs=", "PUY304hukZpnE6QuNQYojqF3bYfbI29bEcDPo7CAebI=", "g+V3slT2z05RxYCCDoBaY6CX+OmrM/MhEcIrdc9U5cs=", "A4fJfaFHp2z9e1dHp9ADqQU6Lk0K292ifWE1buyw5sg=", "phbrqVrscGmqV5frx3cP3FZg0R9d16flgXnmF8YlBJs=", "JeFJuYar3D4uBzvMd7x3qts+CGhYQOGMaAiiYVFCxto=", "mDCdA8t/LGc+hqiV0SOyqPXlOYPyWpasRaDDvCC8JAE=", "daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=", "DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="], "checkpoint": {"envelope": "rekor.sigstore.dev - 1193050959916656506\n1657546545\n0m2umLO+lqcF7koOZP+01JIJJldfGMH8cDsdWVt0aMA=\n\n\u2014 rekor.sigstore.dev wNI9ajBGAiEAkM2f0vvZfOvp1piRnKN1uUPwdIk7li+MXpcnopKsta4CIQCGS4DDntVzYa0gfFFgZkqW0PWB7SPLRpiGzoe2rpC2CQ==\n"}}, "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIxNDNiMWRkZGVmYWVjM2JkMmUyMWUzYjgzOWIzNGEyYjdmYjk4NDIyNzI4ODNjNTc2 NDIwZDYwNWU5ZjMwYzYzIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJQitJOTY2ZEg2K20zRktNeXdaRU8zaUdZQmFscGN2amJTQ3NEKzFHdTNqSUFpQThrNEZ5UzRxdS9mNTkzOVJwZ3Ayb1RVRlhaM1NSa3M3WGdpZkxqUmNsVUE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVUkpha05EUVhGdFowRjNTVUpCWjBsVlRHdGxaVWhXVEdWaWVtVkxXQ3N3TTJOTk5XbzRhMFJvYVZObmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlhkTlZFMTRUVlJGZVZkb1kwNU5hbGwzVG1wRmQwMVVUWGxOVkVWNVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZLSzFSWGFIRnJZazFGYkU1a1VsSlhVemhFYmt4NmVXNUxkRzQ1ZEdZelZXZEdSREFLWjJZNVkxTnZXa1JyY1M5Q05YUkhVaTlFYW1sRVRYSmFlbWcxTlVkU2N6WmlXbUV2SzBKWlVVZzRZWGRWUVhFdlZ6WlBRMEZqWjNkblowaEZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZNYTFKd0NrUmFNbVIzZG5kMEsyVldNSGh3UmpWdGNtT TNhWEJKZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDBoUldVUldVakJTUVZGSUwwSkNUWGRGV1VWUVlVaFdibUl3UW5kbFdGSnZZakkwZFdJelNtNU5RM2RIUTJselIwRlJVVUpuTnpoM1FWRkZSUXBJYldnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemx6WWpKa2NHSnBPWFpaV0ZZd1lVUkJkVUpuYjNKQ1owVkZRVmxQTDAxQlJVbENRMEZOQ2todGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1hOaU1tUndZbWs1ZGxsWVZqQmhSRUpUUW1kdmNrSm5SVVZCV1U4dlRVRkZXVUpGVVUwS1VXdE9ibGt6YUU1bGEydDNWRmR3U2sxVlZuQlhiVGxyVTBaS00xa3pjSFppUlRGeVYxZDRUbUV4Y0hWWlZtaFRZakpTV0ZOWVZscE5hbXd3VTJ4U1N3cFNNa3BJVDFjMWFGWjZVbk5VVjNSaFpHeHNXVlpxUW1oUlZFTkNhWGRaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamxDU0hOQlpWRkNNMEZPTURsTlIzSkhDbmg0UlhsWmVHdGxTRXBzYms1M1MybFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdWNrZHZhRGN3UVVGQlVVUkJSV2QzVW1kSmFFRktiR1VLZERSQlRVZHRhblJGVTBSYWQySlVXbEF6U25oeGNHdDFVRTVNWkRKNWJrdHZTbE5GVWpaUVVFRnBSVUYyYkhCNWIyaDRXVlZHZG5KbllXeGxlRTgyTndvemQwUnFXa1IxUVhBeVJtZFBWbEYyVW5KQlltUnFiM2REWjFsSlMyOWFTWHBxTUVWQmQwMUVXbmRCZDFwQlNYZE5jR2hEZG5BM09GSndVR0 41VUhWb0NraHhUVlZPWjJKWlRVWklSR05aTWtGQ04wWlhSVlJ0Vm1Kd2QyaHhZVUZEVTBsRFVFUnJXVzFFZDJ0SU5VZzBaMEZxUWxaamEyeERVMDFxTlZSR09Dc0taWHBGZEhOcWMxZElNSFZpYVdoa1dWQnRZM2xhWTJWNE0yeEtOMDFJU1RGcWMwTXdNRVpOY0hRM1drTjFlbUpMUVUxVlBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifX19fQ=="}], "timestampVerificationData": {}}, "messageSignature": {"messageDigest": {"algorithm": "SHA2_256", "digest": "FDsd3e+uw70uIeO4ObNKK3+5hCJyiDxXZCDWBenzDGM="}, "signature": "MEQCIB+I966dH6+m3FKMywZEO3iGYBalpcvjbSCsD+1Gu3jIAiA8k4FyS4qu/f5939Rpgp2oTUFXZ3SRks7XgifLjRclUA=="}} ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:05.494546744 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:05.542548405 +0200 @@ -1,6 +1,6 @@ -mtime: 1775642886 -commit: 65ff5d2cbd7dea9ce4f595de9862807ec326e9bf35f8580fb639e571c42b37f5 -url: https://src.opensuse.org/python-interpreters/python314.git -revision: 65ff5d2cbd7dea9ce4f595de9862807ec326e9bf35f8580fb639e571c42b37f5 +mtime: 1782860245 +commit: c2d17451a9c9e5192ab08ece6c401e67c08253be2fa04fc35f86e31f3dc7f65a +url: https://src.opensuse.org/python-interpreters/python314 +revision: c2d17451a9c9e5192ab08ece6c401e67c08253be2fa04fc35f86e31f3dc7f65a projectscmsync: https://src.opensuse.org/python-interpreters/_ObsPrj ++++++ bpo-31046_ensurepip_honours_prefix.patch ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:05.866559610 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:05.902560856 +0200 @@ -13,10 +13,10 @@ 5 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst -Index: Python-3.14.2/Doc/library/ensurepip.rst +Index: Python-3.14.6/Doc/library/ensurepip.rst =================================================================== ---- Python-3.14.2.orig/Doc/library/ensurepip.rst 2025-12-11 18:11:54.214805989 +0100 -+++ Python-3.14.2/Doc/library/ensurepip.rst 2025-12-11 18:12:02.573781892 +0100 +--- Python-3.14.6.orig/Doc/library/ensurepip.rst 2026-06-10 12:03:53.000000000 +0200 ++++ Python-3.14.6/Doc/library/ensurepip.rst 2026-06-16 10:12:08.808157797 +0200 @@ -65,7 +65,11 @@ By default, ``pip`` is installed into the current virtual environment (if one is active) or into the system site packages (if there is no @@ -57,11 +57,11 @@ .. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap .. note:: -Index: Python-3.14.2/Lib/ensurepip/__init__.py +Index: Python-3.14.6/Lib/ensurepip/__init__.py =================================================================== ---- Python-3.14.2.orig/Lib/ensurepip/__init__.py 2025-12-11 18:11:54.214805989 +0100 -+++ Python-3.14.2/Lib/ensurepip/__init__.py 2025-12-11 18:12:02.574381834 +0100 -@@ -106,27 +106,27 @@ +--- Python-3.14.6.orig/Lib/ensurepip/__init__.py 2026-06-16 10:10:25.098374643 +0200 ++++ Python-3.14.6/Lib/ensurepip/__init__.py 2026-06-16 10:12:08.808547231 +0200 +@@ -107,27 +107,27 @@ os.environ['PIP_CONFIG_FILE'] = os.devnull @@ -94,7 +94,7 @@ Note that calling this function will alter both sys.path and os.environ. """ -@@ -162,6 +162,8 @@ +@@ -163,6 +163,8 @@ args = ["install", "--no-cache-dir", "--no-index", "--find-links", tmpdir] if root: args += ["--root", root] @@ -103,7 +103,7 @@ if upgrade: args += ["--upgrade"] if user: -@@ -238,6 +240,11 @@ +@@ -239,6 +241,11 @@ help="Install everything relative to this alternate root directory.", ) parser.add_argument( @@ -115,7 +115,7 @@ "--altinstall", action="store_true", default=False, -@@ -256,6 +263,7 @@ +@@ -257,6 +264,7 @@ return _bootstrap( root=args.root, @@ -123,11 +123,11 @@ upgrade=args.upgrade, user=args.user, verbosity=args.verbosity, -Index: Python-3.14.2/Lib/test/test_ensurepip.py +Index: Python-3.14.6/Lib/test/test_ensurepip.py =================================================================== ---- Python-3.14.2.orig/Lib/test/test_ensurepip.py 2025-12-11 18:11:54.214805989 +0100 -+++ Python-3.14.2/Lib/test/test_ensurepip.py 2025-12-11 18:12:02.574698987 +0100 -@@ -100,6 +100,17 @@ +--- Python-3.14.6.orig/Lib/test/test_ensurepip.py 2026-06-16 10:10:26.627138884 +0200 ++++ Python-3.14.6/Lib/test/test_ensurepip.py 2026-06-16 10:12:08.808857075 +0200 +@@ -110,6 +110,17 @@ unittest.mock.ANY, ) @@ -145,11 +145,11 @@ def test_bootstrapping_with_user(self): ensurepip.bootstrap(user=True) -Index: Python-3.14.2/Makefile.pre.in +Index: Python-3.14.6/Makefile.pre.in =================================================================== ---- Python-3.14.2.orig/Makefile.pre.in 2025-12-11 18:11:58.776792838 +0100 -+++ Python-3.14.2/Makefile.pre.in 2025-12-11 18:12:02.575189138 +0100 -@@ -2375,7 +2375,7 @@ +--- Python-3.14.6.orig/Makefile.pre.in 2026-06-16 10:10:41.827230687 +0200 ++++ Python-3.14.6/Makefile.pre.in 2026-06-16 10:12:08.809364732 +0200 +@@ -2377,7 +2377,7 @@ install|*) ensurepip="" ;; \ esac; \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ @@ -158,7 +158,7 @@ fi .PHONY: altinstall -@@ -2386,7 +2386,7 @@ +@@ -2388,7 +2388,7 @@ install|*) ensurepip="--altinstall" ;; \ esac; \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ @@ -167,10 +167,10 @@ fi .PHONY: commoninstall -Index: Python-3.14.2/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst +Index: Python-3.14.6/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ Python-3.14.2/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst 2025-12-11 18:12:02.575697168 +0100 ++++ Python-3.14.6/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst 2026-06-16 10:12:08.809892476 +0200 @@ -0,0 +1 @@ +A directory prefix can now be specified when using :mod:`ensurepip`. ++++++ bsc1260884-llvm21-support.patch ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:06.206571370 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:06.270573583 +0200 @@ -47,16 +47,16 @@ 6 files changed, 129 insertions(+), 47 deletions(-) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2025-10-19-10-32-28.gh-issue-136895.HfsEh0.rst -Index: Python-3.14.4/Misc/NEWS.d/next/Core_and_Builtins/2025-10-19-10-32-28.gh-issue-136895.HfsEh0.rst +Index: Python-3.14.5/Misc/NEWS.d/next/Core_and_Builtins/2025-10-19-10-32-28.gh-issue-136895.HfsEh0.rst =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ Python-3.14.4/Misc/NEWS.d/next/Core_and_Builtins/2025-10-19-10-32-28.gh-issue-136895.HfsEh0.rst 2026-04-08 11:17:17.883764230 +0200 ++++ Python-3.14.5/Misc/NEWS.d/next/Core_and_Builtins/2025-10-19-10-32-28.gh-issue-136895.HfsEh0.rst 2026-06-09 17:46:26.697055741 +0200 @@ -0,0 +1 @@ +Update JIT compilation to use LLVM 21 at build time. -Index: Python-3.14.4/Python/jit.c +Index: Python-3.14.5/Python/jit.c =================================================================== ---- Python-3.14.4.orig/Python/jit.c 2026-04-07 15:13:20.000000000 +0200 -+++ Python-3.14.4/Python/jit.c 2026-04-08 11:17:17.884330327 +0200 +--- Python-3.14.5.orig/Python/jit.c 2026-05-10 12:21:34.000000000 +0200 ++++ Python-3.14.5/Python/jit.c 2026-06-09 17:46:26.697445194 +0200 @@ -355,15 +355,43 @@ } @@ -198,10 +198,10 @@ if (mark_executable(memory, total_size)) { jit_free(memory, total_size); return -1; -Index: Python-3.14.4/Tools/jit/README.md +Index: Python-3.14.5/Tools/jit/README.md =================================================================== ---- Python-3.14.4.orig/Tools/jit/README.md 2026-04-07 15:13:20.000000000 +0200 -+++ Python-3.14.4/Tools/jit/README.md 2026-04-08 11:17:17.884838104 +0200 +--- Python-3.14.5.orig/Tools/jit/README.md 2026-05-10 12:21:34.000000000 +0200 ++++ Python-3.14.5/Tools/jit/README.md 2026-06-09 17:46:26.697785736 +0200 @@ -9,32 +9,32 @@ The JIT compiler does not require end users to install any third-party dependencies, but part of it must be *built* using LLVM[^why-llvm]. You are *not* required to build the rest of CPython using LLVM, or even the same version of LLVM (in fact, this is uncommon). @@ -263,23 +263,25 @@ ## Building -Index: Python-3.14.4/Tools/jit/_llvm.py +Index: Python-3.14.5/Tools/jit/_llvm.py =================================================================== ---- Python-3.14.4.orig/Tools/jit/_llvm.py 2026-04-08 10:56:15.619727417 +0200 -+++ Python-3.14.4/Tools/jit/_llvm.py 2026-04-08 11:17:17.885158548 +0200 -@@ -10,9 +10,9 @@ +--- Python-3.14.5.orig/Tools/jit/_llvm.py 2026-06-09 17:44:38.670623837 +0200 ++++ Python-3.14.5/Tools/jit/_llvm.py 2026-06-09 17:47:08.195123227 +0200 +@@ -10,11 +10,11 @@ import _targets -_LLVM_VERSION = 19 +_LLVM_VERSION = 21 - _LLVM_VERSION_PATTERN = re.compile(rf"version\s+{_LLVM_VERSION}\.\d+\.\d+\S*\s+") + _LLVM_VERSION_PATTERN = re.compile( + rf"(?<!Apple )(LLVM|clang) version\s+{_LLVM_VERSION}\.\d+\.\d+\S*\s+" + ) -_EXTERNALS_LLVM_TAG = "llvm-19.1.7.0" +_EXTERNALS_LLVM_TAG = "llvm-21.1.4.0" _P = typing.ParamSpec("_P") _R = typing.TypeVar("_R") -@@ -38,6 +38,13 @@ +@@ -40,6 +40,13 @@ _CORES = asyncio.BoundedSemaphore(os.cpu_count() or 1) @@ -293,7 +295,7 @@ async def _run(tool: str, args: typing.Iterable[str], echo: bool = False) -> str | None: command = [tool, *args] async with _CORES: -@@ -70,24 +77,26 @@ +@@ -72,24 +79,26 @@ @_async_cache async def _find_tool(tool: str, *, echo: bool = False) -> str | None: # Unversioned executables: @@ -332,10 +334,10 @@ # Nothing found: return None -Index: Python-3.14.4/Tools/jit/_stencils.py +Index: Python-3.14.5/Tools/jit/_stencils.py =================================================================== ---- Python-3.14.4.orig/Tools/jit/_stencils.py 2026-04-08 10:56:15.623184158 +0200 -+++ Python-3.14.4/Tools/jit/_stencils.py 2026-04-08 11:17:17.885412907 +0200 +--- Python-3.14.5.orig/Tools/jit/_stencils.py 2026-06-09 17:44:38.674278273 +0200 ++++ Python-3.14.5/Tools/jit/_stencils.py 2026-06-09 17:46:26.698349709 +0200 @@ -274,6 +274,23 @@ self._trampolines.add(ordinal) hole.addend = ordinal @@ -360,10 +362,10 @@ self.code.remove_jump() self.code.add_nops(nop=nop, alignment=alignment) self.data.pad(8) -Index: Python-3.14.4/Tools/jit/_targets.py +Index: Python-3.14.5/Tools/jit/_targets.py =================================================================== ---- Python-3.14.4.orig/Tools/jit/_targets.py 2026-04-08 10:56:15.625514156 +0200 -+++ Python-3.14.4/Tools/jit/_targets.py 2026-04-08 11:17:17.885705308 +0200 +--- Python-3.14.5.orig/Tools/jit/_targets.py 2026-06-09 17:44:38.676793727 +0200 ++++ Python-3.14.5/Tools/jit/_targets.py 2026-06-09 17:46:26.698569463 +0200 @@ -150,10 +150,6 @@ "-fno-asynchronous-unwind-tables", # Don't call built-in functions that we can't find or patch: ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-07-01 00:57:25.000000000 +0200 @@ -0,0 +1,5 @@ +.osc +*.obscpio +_build.* +.pbuild +python314-*-build/ ++++++ gh139257-Support-docutils-0.22.patch ++++++ --- /var/tmp/diff_new_pack.Ybm7VD/_old 2026-07-02 20:08:08.062635561 +0200 +++ /var/tmp/diff_new_pack.Ybm7VD/_new 2026-07-02 20:08:08.102636944 +0200 @@ -6,13 +6,13 @@ --- Doc/Makefile | 2 - Doc/conf.py | 3 + - Doc/tools/extensions/pyspecific.py | 68 +++++++++++++++++++++++++------------ - 3 files changed, 50 insertions(+), 23 deletions(-) + Doc/tools/extensions/pyspecific.py | 56 +++++++++++++++++++++++++------------ + 3 files changed, 43 insertions(+), 18 deletions(-) -Index: Python-3.14.3/Doc/Makefile +Index: Python-3.14.6/Doc/Makefile =================================================================== ---- Python-3.14.3.orig/Doc/Makefile 2026-02-03 16:32:20.000000000 +0100 -+++ Python-3.14.3/Doc/Makefile 2026-02-13 20:28:48.460059340 +0100 +--- Python-3.14.6.orig/Doc/Makefile 2026-06-10 12:03:53.000000000 +0200 ++++ Python-3.14.6/Doc/Makefile 2026-06-16 10:12:27.727028281 +0200 @@ -14,7 +14,7 @@ SOURCES = DISTVERSION = $(shell $(PYTHON) tools/extensions/patchlevel.py) @@ -22,22 +22,22 @@ # Internal variables. PAPEROPT_a4 = --define latex_elements.papersize=a4paper -Index: Python-3.14.3/Doc/conf.py +Index: Python-3.14.6/Doc/conf.py =================================================================== ---- Python-3.14.3.orig/Doc/conf.py 2026-02-03 16:32:20.000000000 +0100 -+++ Python-3.14.3/Doc/conf.py 2026-02-13 20:21:11.034520886 +0100 -@@ -582,3 +582,6 @@ +--- Python-3.14.6.orig/Doc/conf.py 2026-06-10 12:03:53.000000000 +0200 ++++ Python-3.14.6/Doc/conf.py 2026-06-16 10:12:27.727305694 +0200 +@@ -606,3 +606,6 @@ '<meta property="og:image:width" content="200">', '<meta property="og:image:height" content="200">', ) + +# Fix devhelp doc build gh#python/cpython#120150 +master_doc = 'contents' -Index: Python-3.14.3/Doc/tools/extensions/pyspecific.py +Index: Python-3.14.6/Doc/tools/extensions/pyspecific.py =================================================================== ---- Python-3.14.3.orig/Doc/tools/extensions/pyspecific.py 2026-02-03 16:32:20.000000000 +0100 -+++ Python-3.14.3/Doc/tools/extensions/pyspecific.py 2026-02-13 17:09:31.987767795 +0100 -@@ -1,12 +1,12 @@ +--- Python-3.14.6.orig/Doc/tools/extensions/pyspecific.py 2026-06-10 12:03:53.000000000 +0200 ++++ Python-3.14.6/Doc/tools/extensions/pyspecific.py 2026-06-16 10:19:55.558368946 +0200 +@@ -1,20 +1,37 @@ # -*- coding: utf-8 -*- """ - pyspecific.py @@ -55,22 +55,12 @@ """ import re -@@ -15,6 +15,7 @@ - from docutils import nodes - from docutils.parsers.rst import directives +from docutils.parsers.rst.states import Body - from docutils.utils import unescape from sphinx import addnodes - from sphinx.domains.python import PyFunction, PyMethod, PyModule -@@ -22,30 +23,48 @@ - from sphinx.util.docutils import SphinxDirective - - # Used in conf.py and updated here by python/release-tools/run_release.py --SOURCE_URI = 'https://github.com/python/cpython/tree/3.14/%s' -+SOURCE_URI = "https://github.com/python/cpython/tree/3.14/%s" -+ -+ + from sphinx.domains.python import PyFunction, PyMethod + + +# monkey-patch reST parser to disable alphabetic and roman enumerated lists +def _disable_alphabetic_and_roman(text): + try: @@ -82,42 +72,15 @@ + # docutils < 0.22 + return None + -+ +Body.enum.converters["loweralpha"] = Body.enum.converters["upperalpha"] = ( + Body.enum.converters["lowerroman"] +) = Body.enum.converters["upperroman"] = _disable_alphabetic_and_roman + - ++ class PyAwaitableMixin(object): def handle_signature(self, sig, signode): ret = super(PyAwaitableMixin, self).handle_signature(sig, signode) -- signode.insert(0, addnodes.desc_annotation('awaitable ', 'awaitable ')) -+ signode.insert(0, addnodes.desc_annotation("awaitable ", "awaitable ")) - return ret - - - class PyAwaitableFunction(PyAwaitableMixin, PyFunction): - def run(self): -- self.name = 'py:function' -+ self.name = "py:function" - return PyFunction.run(self) - - - class PyAwaitableMethod(PyAwaitableMixin, PyMethod): - def run(self): -- self.name = 'py:method' -+ self.name = "py:method" - return PyMethod.run(self) - - - # Support for documenting Opcodes - --opcode_sig_re = re.compile(r'(\w+(?:\+\d)?)(?:\s*\((.*)\))?') -+opcode_sig_re = re.compile(r"(\w+(?:\+\d)?)(?:\s*\((.*)\))?") - - - def parse_opcode_signature(env, sig, signode): -@@ -64,7 +83,7 @@ +@@ -55,7 +72,7 @@ # Support for documenting pdb commands @@ -126,7 +89,7 @@ # later... # pdbargs_tokens_re = re.compile(r'''[a-zA-Z]+ | # identifiers -@@ -80,16 +99,16 @@ +@@ -71,16 +88,16 @@ if m is None: raise ValueError name, args = m.groups() @@ -146,7 +109,7 @@ signode += addnodes.desc_name(sig, sig) return sig -@@ -102,7 +121,7 @@ +@@ -93,7 +110,7 @@ As such, we link this to ``env-check-consistency``, even though it has nothing to do with the environment consistency check. """ @@ -155,7 +118,7 @@ return # allow translating deprecated index entries -@@ -119,10 +138,15 @@ +@@ -110,10 +127,15 @@ def setup(app):
