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):

Reply via email to