Wednesday, April 29, 2026

py3.14

I'm keen to move Python to 3.14 fairly soon after we're unlocked and building -current packages again, to give us a decent amount of time to fix any runtime issues that we run into. My bulk was reasonably clean - other than the usual s/313/314/ in various ports (boost etc), I ran into failures in: - archivers/py-backports-zstd (dep of py-flask-compress; zstd is in python core now, so the backport just needs removing) - devel/py-greenlet (update to 3.4.0 fixes) - security/theharvester (silly utf8 issue in code; this is very outdated though, i'm looking at updating rather than patching, various new deps will be needed - not included below) - firefox-esr, tor-browser, thunderbird (fixed by backporting upstream patches) Here's what I have if anyone wants to play along.. diff --git a/archivers/Makefile b/archivers/Makefile index 805ac230bff4..6bfc5391c52f 100644 --- a/archivers/Makefile +++ b/archivers/Makefile @@ -61,7 +61,6 @@ SUBDIR += pecl-lzf,php85 SUBDIR += pigz SUBDIR += pixz - SUBDIR += py-backports-zstd SUBDIR += py-brotli SUBDIR += py-brotlicffi SUBDIR += py-compressed_rtf diff --git a/devel/boost/Makefile b/devel/boost/Makefile index 39eb73905c5d..63f3b69aa80e 100644 --- a/devel/boost/Makefile +++ b/devel/boost/Makefile @@ -35,10 +35,10 @@ BOOST_LIBS= boost_atomic-mt \ boost_math_tr1f-mt boost_math_tr1f \ boost_math_tr1l-mt boost_math_tr1l \ boost_nowide-mt boost_nowide \ - boost_numpy313-mt boost_numpy313 \ + boost_numpy314-mt boost_numpy314 \ boost_prg_exec_monitor-mt boost_prg_exec_monitor \ boost_program_options-mt boost_program_options \ - boost_python313-mt boost_python313 \ + boost_python314-mt boost_python314 \ boost_random-mt boost_random \ boost_regex-mt boost_regex \ boost_serialization-mt boost_serialization \ diff --git a/devel/boost/pkg/PLIST-main b/devel/boost/pkg/PLIST-main index 40e35378c1c5..07b73226ab27 100644 --- a/devel/boost/pkg/PLIST-main +++ b/devel/boost/pkg/PLIST-main @@ -17653,10 +17653,10 @@ lib/cmake/boost_wserialization-${VERSION}/libboost_wserialization-variant-static @lib lib/libboost_nowide-mt.so.${LIBboost_nowide-mt_VERSION} @static-lib lib/libboost_nowide.a @lib lib/libboost_nowide.so.${LIBboost_nowide_VERSION} -@static-lib lib/libboost_numpy313-mt.a -@lib lib/libboost_numpy313-mt.so.${LIBboost_numpy313-mt_VERSION} -@static-lib lib/libboost_numpy313.a -@lib lib/libboost_numpy313.so.${LIBboost_numpy313_VERSION} +@static-lib lib/libboost_numpy314-mt.a +@lib lib/libboost_numpy314-mt.so.${LIBboost_numpy314-mt_VERSION} +@static-lib lib/libboost_numpy314.a +@lib lib/libboost_numpy314.so.${LIBboost_numpy314_VERSION} @static-lib lib/libboost_prg_exec_monitor-mt.a @lib lib/libboost_prg_exec_monitor-mt.so.${LIBboost_prg_exec_monitor-mt_VERSION} @static-lib lib/libboost_prg_exec_monitor.a @@ -17665,10 +17665,10 @@ lib/cmake/boost_wserialization-${VERSION}/libboost_wserialization-variant-static @lib lib/libboost_program_options-mt.so.${LIBboost_program_options-mt_VERSION} @static-lib lib/libboost_program_options.a @lib lib/libboost_program_options.so.${LIBboost_program_options_VERSION} -@static-lib lib/libboost_python313-mt.a -@lib lib/libboost_python313-mt.so.${LIBboost_python313-mt_VERSION} -@static-lib lib/libboost_python313.a -@lib lib/libboost_python313.so.${LIBboost_python313_VERSION} +@static-lib lib/libboost_python314-mt.a +@lib lib/libboost_python314-mt.so.${LIBboost_python314-mt_VERSION} +@static-lib lib/libboost_python314.a +@lib lib/libboost_python314.so.${LIBboost_python314_VERSION} @static-lib lib/libboost_random-mt.a @lib lib/libboost_random-mt.so.${LIBboost_random-mt_VERSION} @static-lib lib/libboost_random.a diff --git a/devel/py-greenlet/Makefile b/devel/py-greenlet/Makefile index 568ceda3d709..ebc6faba7ecd 100644 --- a/devel/py-greenlet/Makefile +++ b/devel/py-greenlet/Makefile @@ -1,9 +1,8 @@ COMMENT= lightweight in-process concurrent programming -MODPY_DISTV= 3.1.1 +MODPY_DISTV= 3.4.0 DISTNAME= greenlet-${MODPY_DISTV} PKGNAME= py-${DISTNAME} -REVISION= 3 CATEGORIES= devel diff --git a/devel/py-greenlet/distinfo b/devel/py-greenlet/distinfo index 0634e58e0c98..7f9e5da8ce1c 100644 --- a/devel/py-greenlet/distinfo +++ b/devel/py-greenlet/distinfo @@ -1,2 +1,2 @@ -SHA256 (greenlet-3.1.1.tar.gz) = TOOsbNtq33lGR11+8xd3wm2UvMw3fgcKeYa9LVxRVGc= -SIZE (greenlet-3.1.1.tar.gz) = 186022 +SHA256 (greenlet-3.4.0.tar.gz) = 9QqWtk2v1haeWVpcVskUbvgDM+Z9RHamWpxV9AD8Iv8= +SIZE (greenlet-3.4.0.tar.gz) = 195913 diff --git a/devel/py-greenlet/patches/patch-src_greenlet_slp_platformselect_h b/devel/py-greenlet/patches/patch-src_greenlet_slp_platformselect_h index 49f0256cfdb5..c4823553cdf4 100644 --- a/devel/py-greenlet/patches/patch-src_greenlet_slp_platformselect_h +++ b/devel/py-greenlet/patches/patch-src_greenlet_slp_platformselect_h @@ -15,7 +15,7 @@ Index: src/greenlet/slp_platformselect.h # include "platform/switch_ppc_linux.h" /* gcc on PowerPC */ #elif defined(__GNUC__) && defined(__POWERPC__) && defined(__APPLE__) # include "platform/switch_ppc_macosx.h" /* Apple MacOS X on 32-bit PowerPC */ -@@ -50,7 +50,7 @@ extern "C" { +@@ -52,7 +52,7 @@ extern "C" { # else # include "platform/switch_arm32_gcc.h" /* gcc using arm32 */ # endif diff --git a/devel/py-greenlet/pkg/PLIST b/devel/py-greenlet/pkg/PLIST index 6e3c1c896b68..8ae0744a868a 100644 --- a/devel/py-greenlet/pkg/PLIST +++ b/devel/py-greenlet/pkg/PLIST @@ -7,7 +7,6 @@ lib/python${MODPY_VERSION}/site-packages/greenlet-${MODPY_DISTV}.dist-info/METAD lib/python${MODPY_VERSION}/site-packages/greenlet-${MODPY_DISTV}.dist-info/RECORD lib/python${MODPY_VERSION}/site-packages/greenlet-${MODPY_DISTV}.dist-info/WHEEL lib/python${MODPY_VERSION}/site-packages/greenlet-${MODPY_DISTV}.dist-info/licenses/ -lib/python${MODPY_VERSION}/site-packages/greenlet-${MODPY_DISTV}.dist-info/licenses/AUTHORS lib/python${MODPY_VERSION}/site-packages/greenlet-${MODPY_DISTV}.dist-info/licenses/LICENSE lib/python${MODPY_VERSION}/site-packages/greenlet-${MODPY_DISTV}.dist-info/licenses/LICENSE.PSF lib/python${MODPY_VERSION}/site-packages/greenlet-${MODPY_DISTV}.dist-info/top_level.txt @@ -37,10 +36,10 @@ lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet.cpp lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet.h lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_allocator.hpp lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_compiler_compat.hpp -lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_cpython_add_pending.hpp lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_cpython_compat.hpp lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_exceptions.hpp lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_internal.hpp +lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_msvc_compat.hpp lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_refs.hpp lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_slp_switch.hpp lib/python${MODPY_VERSION}/site-packages/greenlet/greenlet_thread_support.hpp @@ -116,6 +115,8 @@ lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_gre lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_greenlet.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_greenlet_trash.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_greenlet_trash.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_interpreter_shutdown.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} +lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_interpreter_shutdown.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_leaks.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_leaks.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/greenlet/tests/${MODPY_PYCACHE}test_stack_saved.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} @@ -148,6 +149,7 @@ lib/python${MODPY_VERSION}/site-packages/greenlet/tests/test_generator.py lib/python${MODPY_VERSION}/site-packages/greenlet/tests/test_generator_nested.py lib/python${MODPY_VERSION}/site-packages/greenlet/tests/test_greenlet.py lib/python${MODPY_VERSION}/site-packages/greenlet/tests/test_greenlet_trash.py +lib/python${MODPY_VERSION}/site-packages/greenlet/tests/test_interpreter_shutdown.py lib/python${MODPY_VERSION}/site-packages/greenlet/tests/test_leaks.py lib/python${MODPY_VERSION}/site-packages/greenlet/tests/test_stack_saved.py lib/python${MODPY_VERSION}/site-packages/greenlet/tests/test_throw.py diff --git a/devel/spidermonkey140/patches/patch-python_mozbuild_mozbuild_frontend_reader_py b/devel/spidermonkey140/patches/patch-python_mozbuild_mozbuild_frontend_reader_py new file mode 100644 index 000000000000..ac7cb66861f7 --- /dev/null +++ b/devel/spidermonkey140/patches/patch-python_mozbuild_mozbuild_frontend_reader_py @@ -0,0 +1,41 @@ +https://hg-edge.mozilla.org/mozilla-central/rev/23efd7521978 + +Index: python/mozbuild/mozbuild/frontend/reader.py +--- python/mozbuild/mozbuild/frontend/reader.py.orig ++++ python/mozbuild/mozbuild/frontend/reader.py +@@ -470,7 +470,7 @@ class TemplateFunction: + return c( + ast.Subscript( + value=c(ast.Name(id=self._global_name, ctx=ast.Load())), +- slice=c(ast.Index(value=c(ast.Str(s=node.id)))), ++ slice=c(ast.Index(value=c(ast.Constant(value=node.id)))), + ctx=node.ctx, + ) + ) +@@ -1039,8 +1039,8 @@ class BuildReader: + else: + # Others + assert isinstance(target.slice, ast.Index) +- assert isinstance(target.slice.value, ast.Str) +- key = target.slice.value.s ++ assert isinstance(target.slice.value, ast.Constant) ++ key = target.slice.value.value + elif isinstance(target, ast.Attribute): + assert isinstance(target.attr, str) + key = target.attr +@@ -1051,11 +1051,11 @@ class BuildReader: + value = node.value + if isinstance(value, ast.List): + for v in value.elts: +- assert isinstance(v, ast.Str) +- yield v.s ++ assert isinstance(v, ast.Constant) ++ yield v.value + else: +- assert isinstance(value, ast.Str) +- yield value.s ++ assert isinstance(value, ast.Constant) ++ yield value.value + + assignments = [] + diff --git a/devel/spidermonkey140/patches/patch-python_mozbuild_mozbuild_vendor_rewrite_mozbuild_py b/devel/spidermonkey140/patches/patch-python_mozbuild_mozbuild_vendor_rewrite_mozbuild_py new file mode 100644 index 000000000000..407904763ebd --- /dev/null +++ b/devel/spidermonkey140/patches/patch-python_mozbuild_mozbuild_vendor_rewrite_mozbuild_py @@ -0,0 +1,23 @@ +https://hg-edge.mozilla.org/mozilla-central/rev/23efd7521978 + +Index: python/mozbuild/mozbuild/vendor/rewrite_mozbuild.py +--- python/mozbuild/mozbuild/vendor/rewrite_mozbuild.py.orig ++++ python/mozbuild/mozbuild/vendor/rewrite_mozbuild.py +@@ -327,15 +327,13 @@ def assignment_node_to_source_filename_list(code, node + """ + if isinstance(node.value, ast.List) and "elts" in node.value._fields: + for f in node.value.elts: +- if not isinstance(f, ast.Constant) and not isinstance(f, ast.Str): ++ if not isinstance(f, ast.Constant): + log( + "Found non-constant source file name in list: ", + ast_get_source_segment(code, f), + ) + return [] +- return [ +- f.value if isinstance(f, ast.Constant) else f.s for f in node.value.elts +- ] ++ return [f.value for f in node.value.elts] + elif isinstance(node.value, ast.ListComp): + # SOURCES += [f for f in foo if blah] + log("Could not find the files for " + ast_get_source_segment(code, node.value)) diff --git a/editors/libreoffice/Makefile b/editors/libreoffice/Makefile index d18069edabb8..2f6567845a44 100644 --- a/editors/libreoffice/Makefile +++ b/editors/libreoffice/Makefile @@ -234,7 +234,7 @@ WANTLIB-main += gstreamer-1.0 gstvideo-1.0 gtk-3 harfbuzz harfbuzz-icu WANTLIB-main += hunspell-1.7 iconv icudata icui18n icuuc intl jpeg WANTLIB-main += lber lcms2 ldap m mariadb nspr4 nss3 nssutil3 pango-1.0 WANTLIB-main += pangocairo-1.0 plc4 plds4 png poppler poppler-cpp pq -WANTLIB-main += python3.13 raptor2 rdf revenge-0.0 smime3 ssl ssl3 +WANTLIB-main += ${MODPY_WANTLIB} raptor2 rdf revenge-0.0 smime3 ssl ssl3 WANTLIB-main += tiff util webp wpd-0.10 xml2 xslt z zstd RUN_DEPENDS-main= devel/desktop-file-utils \ diff --git a/geo/py-geojson/Makefile b/geo/py-geojson/Makefile index 3cca0b5fa5e5..4f1128ac431f 100644 --- a/geo/py-geojson/Makefile +++ b/geo/py-geojson/Makefile @@ -3,7 +3,7 @@ COMMENT = encoder/decoder for simple GIS features MODPY_DISTV = 3.2.0 DISTNAME = geojson-${MODPY_DISTV} PKGNAME = py-${DISTNAME} -REVISION = 0 +REVISION = 1 CATEGORIES = geo devel diff --git a/geo/py-geojson/patches/patch-setup_py b/geo/py-geojson/patches/patch-setup_py new file mode 100644 index 000000000000..5cbc62eb3fe8 --- /dev/null +++ b/geo/py-geojson/patches/patch-setup_py @@ -0,0 +1,14 @@ +Index: setup.py +--- setup.py.orig ++++ setup.py +@@ -17,8 +17,8 @@ else: + + + major_version, minor_version = sys.version_info[:2] +-if not (major_version == 3 and 7 <= minor_version <= 13): +- sys.stderr.write("Sorry, only Python 3.7 - 3.13 are " ++if not (major_version == 3 and 7 <= minor_version <= 14): ++ sys.stderr.write("Sorry, only Python 3.7 - 3.14 are " + "supported at this time.\n") + exit(1) + diff --git a/lang/python/3/Makefile b/lang/python/3/Makefile index 052b8e1dedd9..804628cf371d 100644 --- a/lang/python/3/Makefile +++ b/lang/python/3/Makefile @@ -3,12 +3,12 @@ # requirement of the PSF license, if it constitutes a change to # Python itself. -FULL_VERSION = 3.13.13 -SHARED_LIBS = python3.13 0.0 -VERSION_SPEC = >=3.13,<3.14 -PORTROACH = limit:^3\.13 +FULL_VERSION = 3.14.4 +SHARED_LIBS = python3.14 0.0 +VERSION_SPEC = >=3.14 +PORTROACH = limit:^3\.14 -AUTOCONF_VERSION = 2.71 +AUTOCONF_VERSION = 2.72 # XXX - should come from expat_config.h, which isn't installed in base CFLAGS += -DXML_DTD -DXML_GE=1 diff --git a/lang/python/3/distinfo b/lang/python/3/distinfo index 62b3a3a97332..e47dc7d0bf83 100644 --- a/lang/python/3/distinfo +++ b/lang/python/3/distinfo @@ -1,2 +1,2 @@ -SHA256 (Python-3.13.13.tgz) = +c3nsOLsgWXXMm4qD1nqJobOnQxhfbuz1mp+VNMbdLk= -SIZE (Python-3.13.13.tgz) = 29842908 +SHA256 (Python-3.14.4.tgz) = tMBZ1YlfAw59+WY4lM43Mr+hsyzTqyiDmAJmpFzjyzs= +SIZE (Python-3.14.4.tgz) = 31148035 diff --git a/lang/python/3/patches/patch-Lib_ctypes_util_py b/lang/python/3/patches/patch-Lib_ctypes_util_py index 7bc2ab67626c..3d95384b8ef9 100644 --- a/lang/python/3/patches/patch-Lib_ctypes_util_py +++ b/lang/python/3/patches/patch-Lib_ctypes_util_py @@ -4,7 +4,7 @@ decide on a version number. Index: Lib/ctypes/util.py --- Lib/ctypes/util.py.orig +++ Lib/ctypes/util.py -@@ -216,6 +216,9 @@ elif os.name == "posix": +@@ -316,6 +316,9 @@ elif os.name == "posix": return nums or [sys.maxsize] def find_library(name): diff --git a/lang/python/3/patches/patch-Lib_test_test_webbrowser_py b/lang/python/3/patches/patch-Lib_test_test_webbrowser_py index 4f5d8f41a9b0..baa0f2f760c9 100644 --- a/lang/python/3/patches/patch-Lib_test_test_webbrowser_py +++ b/lang/python/3/patches/patch-Lib_test_test_webbrowser_py @@ -8,7 +8,7 @@ https://github.com/python/cpython/pull/148517 Index: Lib/test/test_webbrowser.py --- Lib/test/test_webbrowser.py.orig +++ Lib/test/test_webbrowser.py -@@ -118,6 +118,15 @@ class ChromeCommandTest(CommandTestMixin, unittest.Tes +@@ -119,6 +119,15 @@ class ChromeCommandTest(CommandTestMixin, unittest.Tes arguments=[URL], kw=dict(new=999)) diff --git a/lang/python/3/patches/patch-Lib_webbrowser_py b/lang/python/3/patches/patch-Lib_webbrowser_py index a3bd13d1d6a7..779ff3aafa87 100644 --- a/lang/python/3/patches/patch-Lib_webbrowser_py +++ b/lang/python/3/patches/patch-Lib_webbrowser_py @@ -7,7 +7,7 @@ https://github.com/python/cpython/pull/148517 Index: Lib/webbrowser.py --- Lib/webbrowser.py.orig +++ Lib/webbrowser.py -@@ -275,7 +275,6 @@ class UnixBrowser(BaseBrowser): +@@ -274,7 +274,6 @@ class UnixBrowser(BaseBrowser): def open(self, url, new=0, autoraise=True): sys.audit("webbrowser.open", url) @@ -15,7 +15,7 @@ Index: Lib/webbrowser.py if new == 0: action = self.remote_action elif new == 1: -@@ -289,7 +288,9 @@ class UnixBrowser(BaseBrowser): +@@ -288,7 +287,9 @@ class UnixBrowser(BaseBrowser): raise Error("Bad 'new' parameter to open(); " f"expected 0, 1, or 2, got {new}") diff --git a/lang/python/3/patches/patch-Makefile_pre_in b/lang/python/3/patches/patch-Makefile_pre_in index 1feb89ce8317..ef4cf8658057 100644 --- a/lang/python/3/patches/patch-Makefile_pre_in +++ b/lang/python/3/patches/patch-Makefile_pre_in @@ -3,7 +3,7 @@ Make bsd make happy Index: Makefile.pre.in --- Makefile.pre.in.orig +++ Makefile.pre.in -@@ -591,8 +591,6 @@ LIBMPDEC_OBJS= \ +@@ -607,8 +607,6 @@ LIBMPDEC_OBJS= \ Modules/_decimal/libmpdec/numbertheory.o \ Modules/_decimal/libmpdec/sixstep.o \ Modules/_decimal/libmpdec/transpose.o diff --git a/lang/python/3/patches/patch-Modules__bz2module_c b/lang/python/3/patches/patch-Modules__bz2module_c index 35f2ecb740ce..d0c7f1010b7f 100644 --- a/lang/python/3/patches/patch-Modules__bz2module_c +++ b/lang/python/3/patches/patch-Modules__bz2module_c @@ -11,7 +11,7 @@ https://github.com/python/cpython/pull/148479 Index: Modules/_bz2module.c --- Modules/_bz2module.c.orig +++ Modules/_bz2module.c -@@ -589,6 +589,7 @@ decompress(BZ2Decompressor *d, char *data, size_t len, +@@ -593,6 +593,7 @@ decompress(BZ2Decompressor *d, char *data, size_t len, return result; error: diff --git a/lang/python/3/patches/patch-Modules__hashopenssl_c b/lang/python/3/patches/patch-Modules__hashopenssl_c index f8d9ea3ea782..084763bd53bb 100644 --- a/lang/python/3/patches/patch-Modules__hashopenssl_c +++ b/lang/python/3/patches/patch-Modules__hashopenssl_c @@ -1,7 +1,7 @@ Index: Modules/_hashopenssl.c --- Modules/_hashopenssl.c.orig +++ Modules/_hashopenssl.c -@@ -45,7 +45,9 @@ +@@ -44,7 +44,9 @@ #define MUNCH_SIZE INT_MAX @@ -11,7 +11,7 @@ Index: Modules/_hashopenssl.c #if defined(NID_sha3_224) && defined(NID_sha3_256) && defined(NID_sha3_384) && defined(NID_sha3_512) #define PY_OPENSSL_HAS_SHA3 1

No comments:

Post a Comment