diff --git a/00486-gh-148646-add---enable-prebuilt-jit-stencils-configure-flag.patch b/00486-gh-148646-add---enable-prebuilt-jit-stencils-configure-flag.patch new file mode 100644 index 0000000..7fdfd52 --- /dev/null +++ b/00486-gh-148646-add---enable-prebuilt-jit-stencils-configure-flag.patch @@ -0,0 +1,146 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= +Date: Thu, 16 Apr 2026 14:39:41 +0200 +Subject: 00486: gh-148646: Add --enable-prebuilt-jit-stencils configure flag + +--- + ...-04-16-14-39-33.gh-issue-148646.iIIgWF.rst | 6 +++++ + Tools/jit/_targets.py | 3 ++- + Tools/jit/build.py | 6 +++++ + configure | 26 +++++++++++++++++++ + configure.ac | 13 ++++++++++ + 5 files changed, 53 insertions(+), 1 deletion(-) + create mode 100644 Misc/NEWS.d/next/Build/2026-04-16-14-39-33.gh-issue-148646.iIIgWF.rst + +diff --git a/Misc/NEWS.d/next/Build/2026-04-16-14-39-33.gh-issue-148646.iIIgWF.rst b/Misc/NEWS.d/next/Build/2026-04-16-14-39-33.gh-issue-148646.iIIgWF.rst +new file mode 100644 +index 0000000000..52dbc347a0 +--- /dev/null ++++ b/Misc/NEWS.d/next/Build/2026-04-16-14-39-33.gh-issue-148646.iIIgWF.rst +@@ -0,0 +1,6 @@ ++Add a new ``--enable-prebuilt-jit-stencils`` configure flag that forces the ++build to use the existing provided JIT stencils even when the digest at the ++beginning of the file does not match expectations. That allows ++redistributors who prebuilt the JIT stencils on a system with a different ++autoconf version to still use them even when ``pyconfig.h`` is slightly ++different. +diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py +index f1085cc9bf..3d8af735e2 100644 +--- a/Tools/jit/_targets.py ++++ b/Tools/jit/_targets.py +@@ -205,6 +205,7 @@ def build( + *, + comment: str = "", + force: bool = False, ++ prebuilt: bool = False, + jit_stencils: pathlib.Path, + ) -> None: + """Build jit_stencils.h in the given directory.""" +@@ -218,7 +219,7 @@ def build( + if ( + not force + and jit_stencils.exists() +- and jit_stencils.read_text().startswith(digest) ++ and (prebuilt or jit_stencils.read_text().startswith(digest)) + ): + return + stencil_groups = ASYNCIO_RUNNER.run(self._build_stencils()) +diff --git a/Tools/jit/build.py b/Tools/jit/build.py +index a073300592..5580985974 100644 +--- a/Tools/jit/build.py ++++ b/Tools/jit/build.py +@@ -42,6 +42,11 @@ + parser.add_argument( + "--cflags", help="additional flags to pass to the compiler", default="" + ) ++ parser.add_argument( ++ "--prebuilt", ++ action="store_true", ++ help="accept prebuilt stencils even if the digest does not match", ++ ) + args = parser.parse_args() + for target in args.target: + target.debug = args.debug +@@ -52,6 +57,7 @@ + target.build( + comment=comment, + force=args.force, ++ prebuilt=args.prebuilt, + jit_stencils=args.output_dir / f"jit_stencils-{target.triple}.h", + ) + jit_stencils_h = args.output_dir / "jit_stencils.h" +diff --git a/configure b/configure +index 8cfdda5a29..e3f51f1f86 100755 +--- a/configure ++++ b/configure +@@ -1104,6 +1104,7 @@ with_strict_overflow + enable_safety + enable_slower_safety + enable_experimental_jit ++enable_prebuilt_jit_stencils + with_dsymutil + with_address_sanitizer + with_memory_sanitizer +@@ -1841,6 +1842,9 @@ Optional Features: + --enable-experimental-jit[=no|yes|yes-off|interpreter] + build the experimental just-in-time compiler + (default is no) ++ --enable-prebuilt-jit-stencils ++ accept prebuilt JIT stencils even if the digest does ++ not match (default is no) + --enable-loadable-sqlite-extensions + support loadable extensions in the sqlite3 module, + see Doc/library/sqlite3.rst (default is no) +@@ -10932,6 +10936,28 @@ fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tier2_flags $jit_flags" >&5 + printf "%s\n" "$tier2_flags $jit_flags" >&6; } + ++# Check for --enable-prebuilt-jit-stencils: ++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-prebuilt-jit-stencils" >&5 ++printf %s "checking for --enable-prebuilt-jit-stencils... " >&6; } ++# Check whether --enable-prebuilt-jit-stencils was given. ++if test ${enable_prebuilt_jit_stencils+y} ++then : ++ enableval=$enable_prebuilt_jit_stencils; ++else case e in #( ++ e) enable_prebuilt_jit_stencils=no ;; ++esac ++fi ++ ++if test "x$enable_prebuilt_jit_stencils" = xno ++then : ++ ++else case e in #( ++ e) as_fn_append REGEN_JIT_COMMAND " --prebuilt" ;; ++esac ++fi ++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_prebuilt_jit_stencils" >&5 ++printf "%s\n" "$enable_prebuilt_jit_stencils" >&6; } ++ + if test "$disable_gil" = "yes" -a "$enable_experimental_jit" != "no"; then + # GH-133171: This configuration builds the JIT but never actually uses it, + # which is surprising (and strictly worse than not building it at all): +diff --git a/configure.ac b/configure.ac +index 1acb91fd27..462152c656 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2800,6 +2800,19 @@ AC_SUBST([REGEN_JIT_COMMAND]) + AC_SUBST([JIT_STENCILS_H]) + AC_MSG_RESULT([$tier2_flags $jit_flags]) + ++# Check for --enable-prebuilt-jit-stencils: ++AC_MSG_CHECKING([for --enable-prebuilt-jit-stencils]) ++AC_ARG_ENABLE([prebuilt-jit-stencils], ++ [AS_HELP_STRING([--enable-prebuilt-jit-stencils], ++ [accept prebuilt JIT stencils even if the digest does not match (default is no)])], ++ [], ++ [enable_prebuilt_jit_stencils=no]) ++AS_VAR_IF([enable_prebuilt_jit_stencils], ++ [no], ++ [], ++ [AS_VAR_APPEND([REGEN_JIT_COMMAND], [" --prebuilt"])]) ++AC_MSG_RESULT([$enable_prebuilt_jit_stencils]) ++ + if test "$disable_gil" = "yes" -a "$enable_experimental_jit" != "no"; then + # GH-133171: This configuration builds the JIT but never actually uses it, + # which is surprising (and strictly worse than not building it at all): diff --git a/python3.14.spec b/python3.14.spec index 62c8a57..84fa23c 100644 --- a/python3.14.spec +++ b/python3.14.spec @@ -87,7 +87,7 @@ License: Python-2.0.1 %bcond jit_build_stencils %[%{with jit} && 0%{?fedora} >= 41] %if %{with jit} # When built with JIT, it still needs to be enabled on runtime via PYTHON_JIT=1 -%global jit_flag --enable-experimental-jit=yes-off +%global jit_flag --enable-experimental-jit=yes-off %{!?with_jit_build_stencils:--enable-prebuilt-jit-stencils} %endif # Main interpreter loop optimization @@ -471,6 +471,10 @@ Patch481: 00481-cve-2026-5713.patch # Fix a possible UAF in {LZMA,BZ2,_Zlib}Decompressor Patch482: 00482-cve-2026-6100.patch +# 00486 # 5ae0b81b3135319f8d75a886fb7a11fa40ac11f4 +# gh-148646: Add --enable-prebuilt-jit-stencils configure flag +Patch486: 00486-gh-148646-add---enable-prebuilt-jit-stencils-configure-flag.patch + # (New patches go here ^^^) # # When adding new patches to "python" and "python3" in Fedora, EL, etc.,