Bug 274671 - lang/python313: New port, 3.13.9 release
Summary: lang/python313: New port, 3.13.9 release
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Many People
Assignee: freebsd-python (Nobody)
URL:
Keywords:
: 287408 (view as bug list)
Depends on: 270510 286298
Blocks:
  Show dependency treegraph
 
Reported: 2023-10-23 11:05 UTC by Wen Heping
Modified: 2025-11-04 14:45 UTC (History)
32 users (show)

See Also:


Attachments
python-3.13.0a1 (39.49 KB, application/x-gzip)
2023-10-23 11:05 UTC, Wen Heping
no flags Details
Update to alpha3 (40.97 KB, application/x-gzip)
2024-01-19 08:59 UTC, wen
no flags Details
python-3.13.0a4 (40.69 KB, application/x-gzip)
2024-02-17 09:33 UTC, Wen Heping
no flags Details
Update to 3.13.0 alpha5 (40.81 KB, application/x-gzip)
2024-03-17 00:56 UTC, Wen Heping
no flags Details
Update to 3.13.0a6 (41.04 KB, application/x-gzip)
2024-04-12 09:18 UTC, Wen Heping
no flags Details
Update to 3.13.0beta1 (41.81 KB, application/x-gzip)
2024-05-09 13:12 UTC, Wen Heping
no flags Details
Update to 3.13.0 beta2 (42.11 KB, application/x-gzip)
2024-06-07 06:03 UTC, Wen Heping
no flags Details
Python-3.13.0rc1 (42.29 KB, application/x-gzip)
2024-08-02 00:22 UTC, Wen Heping
no flags Details
Update to 3.13.0rc3 (42.07 KB, application/x-gzip)
2024-10-03 02:21 UTC, Wen Heping
no flags Details
Update to 3.13.0 release (42.07 KB, application/x-gzip)
2024-10-08 12:37 UTC, Wen Heping
no flags Details
Update to 3.13.1 (42.29 KB, application/x-gzip)
2024-12-05 12:44 UTC, Wen Heping
no flags Details
Update to 3.13.2 (42.41 KB, application/x-gzip)
2025-02-07 03:00 UTC, Wen Heping
no flags Details
Update to python-3.13.4 (42.27 KB, application/x-gzip)
2025-06-05 03:06 UTC, wen
no flags Details
Update to 3.13.6 (42.62 KB, application/x-gzip)
2025-08-06 23:39 UTC, Wen Heping
no flags Details
Update to 3.13.7 (42.63 KB, application/x-gzip)
2025-08-15 12:44 UTC, Wen Heping
no flags Details
Update to 3.13.8 (42.68 KB, application/x-gzip)
2025-10-08 13:52 UTC, Wen Heping
no flags Details
Update to 3.13.9 (42.67 KB, application/x-gzip)
2025-10-15 13:36 UTC, Wen Heping
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Wen Heping freebsd_committer freebsd_triage 2023-10-23 11:05:59 UTC
Created attachment 245824 [details]
python-3.13.0a1

- New ports, python-3.13.0a1

test results:

== Tests result: FAILURE then FAILURE ==

10 slowest tests:
- test_tools: 6 min 26 sec
- test_smtpnet: 5 min
- test_socket: 4 min 15 sec
- test_ssl: 1 min 15 sec
- test_imaplib: 51.2 sec
- test.test_concurrent_futures.test_wait: 47.9 sec
- test_signal: 47.0 sec
- test_subprocess: 45.1 sec
- test.test_multiprocessing_spawn.test_processes: 43.7 sec
- test.test_multiprocessing_spawn.test_threads: 42.1 sec

27 tests skipped:
    test.test_asyncio.test_windows_events
    test.test_asyncio.test_windows_utils test.test_gdb.test_backtrace
    test.test_gdb.test_cfunction test.test_gdb.test_cfunction_full
    test.test_gdb.test_misc test.test_gdb.test_pretty_print
    test_dbm_gnu test_devpoll test_epoll test_idle test_ioctl
    test_launcher test_msvcrt test_perf_profiler test_perfmaps
    test_sqlite3 test_startfile test_tcl test_tkinter test_ttk
    test_ttk_textonly test_turtle test_winconsoleio test_winreg
    test_winsound test_wmi

1 test skipped (resource denied):
    test_zipfile64

2 re-run tests:
    test.test_concurrent_futures.test_shutdown test_dtrace

1 test failed:
    test_dtrace

440 tests OK.

Total duration: 8 min 19 sec
Total tests: run=39,403 failures=17 skipped=1,334
Total test files: run=470/469 failed=1 skipped=27 resource_denied=1 rerun=2
Result: FAILURE then FAILURE
*** Error code 2
Comment 1 wen 2024-01-19 08:59:03 UTC
Created attachment 247766 [details]
Update to alpha3

Update to alpha3
Comment 2 Wen Heping freebsd_committer freebsd_triage 2024-02-17 09:33:27 UTC
Created attachment 248522 [details]
python-3.13.0a4

Python-3.13.0 alpha4
Comment 3 Wen Heping freebsd_committer freebsd_triage 2024-03-17 00:56:56 UTC
Created attachment 249232 [details]
Update to 3.13.0 alpha5

Update to 3.13.0 alpha5
Comment 4 Wen Heping freebsd_committer freebsd_triage 2024-04-12 09:18:58 UTC
Created attachment 249928 [details]
Update to 3.13.0a6

Update to alpha6
Comment 5 Wen Heping freebsd_committer freebsd_triage 2024-05-09 13:12:51 UTC
Created attachment 250546 [details]
Update to 3.13.0beta1

Update to python-3.13.0beta1
Comment 6 Wen Heping freebsd_committer freebsd_triage 2024-06-07 06:03:14 UTC
Created attachment 251261 [details]
Update to 3.13.0 beta2

Update to 3.13.0 beta2
Comment 7 Wen Heping freebsd_committer freebsd_triage 2024-08-02 00:22:34 UTC
Created attachment 252441 [details]
Python-3.13.0rc1

Python-3.13.0rc1
Comment 8 Wen Heping freebsd_committer freebsd_triage 2024-10-03 02:21:01 UTC
Created attachment 253973 [details]
Update to 3.13.0rc3

Update to 3.13.0rc3
Comment 9 Wen Heping freebsd_committer freebsd_triage 2024-10-08 12:37:11 UTC
Created attachment 254094 [details]
Update to 3.13.0 release

Update to 3.13.0 release
Comment 10 Wen Heping freebsd_committer freebsd_triage 2024-12-05 12:44:39 UTC
Created attachment 255638 [details]
Update to 3.13.1

Update to 3.13.1
Comment 11 doctor 2025-01-19 02:44:38 UTC
When will this be added to the FreeBSD port tree?
Comment 12 Wen Heping freebsd_committer freebsd_triage 2025-02-07 03:00:03 UTC
Created attachment 257308 [details]
Update to 3.13.2

Update to 3.13.2
Comment 13 p5B2EA84B3 2025-04-02 14:16:01 UTC
What exactly prevents the committing of lang/python3.13 as a new port.

I do see Wen's attachments but not an initial commit for creating the port.

I do need to understand the criteria/policy if any for porting new Python releases. 

We had python 3.10.0.beta4, 3.10.0rc1, 3.10.0rc2 as ports but do fail to provide actual Python releases for 3.12 and 3.12. 

What's going on here please? What is the point of failure?

I do NOT criticize Wen here, as he is doing a great job by providing port-upgrades for Python in typically less than 5 days. And he is the one providing upgrade attachments. But there is an issue for getting the first (3.x.0 versions) releases in a reasonable timely manner as a port.

And yes, upgrading Python default versions looked also more like <fill in a appropriate word yourself> than anything else. But this is another story and still needs to be improved.
Comment 14 p5B2EA84B3 2025-04-02 14:40:37 UTC
Please increase  Importance: 	--- Affects Only Me ---> Affects some people
Comment 15 commit-hook freebsd_committer freebsd_triage 2025-04-05 20:37:41 UTC
A commit in branch main references this bug:

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

commit de7c5ca4a2d40df82a8ca46b37c8b859a412b89c
Author:     Charlie Li <vishwin@FreeBSD.org>
AuthorDate: 2025-04-05 20:12:38 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2025-04-05 20:12:38 +0000

    devel/py-wheel044: "temporarily" add

    The sole purpose of this port is to build setuptools < 70.1.0 under
    USE_PYTHON=pep517, as a stopgap to allow newer Python
    distributions/interpreters to land while the setuptools update
    continues to be worked on. This port will be removed once setuptools
    is updated. Nothing else is to declare this as a dependency; continue
    to use devel/py-wheel elsewhere.

    As of setuptools 70.1.0, bdist_wheel (what setuptools executes as
    part of ${PEP517_BUILD_CMD} to build the wheel) has moved from wheel
    to setuptools [0], so once setuptools is updated past said version,
    consumers should not continue declaring devel/py-wheel in BUILD_DEPENDS
    unless the package needs functionality beyond what moved into
    setuptools.

    [0] https://setuptools.pypa.io/en/latest/history.html#v70-1-0

    PR: 271673, 274671

 devel/Makefile                                     |  1 +
 devel/py-wheel044/Makefile (new)                   | 26 +++++++++
 devel/py-wheel044/distinfo (new)                   |  3 ++
 .../files/patch-src_wheel___bdist__wheel.py (new)  | 62 ++++++++++++++++++++++
 devel/py-wheel044/pkg-descr (new)                  | 13 +++++
 5 files changed, 105 insertions(+)
Comment 16 commit-hook freebsd_committer freebsd_triage 2025-04-05 20:58:50 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=8b5ae17d2f43388fade30e266615a9e34bf06abd

commit 8b5ae17d2f43388fade30e266615a9e34bf06abd
Author:     Charlie Li <vishwin@FreeBSD.org>
AuthorDate: 2025-04-05 20:45:55 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2025-04-05 20:45:55 +0000

    devel/py-setuptools: convert to USE_PYTHON=pep517

    The previous method of building/bootstrapping setuptools via the
    built-in distutils module no longer works in Python 3.12+ as it has
    been removed [0]. Since USE_PYTHON=pep517 has its own bootstrapping
    process, use this method to build setuptools.

    This allows newer Python distributions/interpreters to land in the
    tree, for the purpose of having buildable packages.

    While here, remove a slew of dead code and adjust WWW

    [0] https://peps.python.org/pep-0632/

    PR: 271673, 274671

 devel/py-setuptools/Makefile                       | 39 ++++++----------------
 .../files/easy-install.pth.dist (gone)             |  2 --
 .../patch-setuptools_package__index.py (gone)      | 11 ------
 devel/py-setuptools/files/pkg-message.in (gone)    |  8 -----
 4 files changed, 10 insertions(+), 50 deletions(-)
Comment 17 Charlie Li freebsd_committer freebsd_triage 2025-04-08 02:18:08 UTC
Took wen@'s attachment, cleaned it up a bit, posted at review D49680. Feel free to test for any showstoppers.

Amongst other new features [0] are experimental free-threaded/Global Interpreter Lock-disabled support and JIT compiler. They are to be exposed but not enabled by default in the port.

[0] https://docs.python.org/3/whatsnew/3.13.html
Comment 18 Konstantin Belousov freebsd_committer freebsd_triage 2025-05-27 21:52:18 UTC
Sorry, but why did 3.13 still not committed to the tree?
What we are waiting for?  A release for 3.33?
Comment 19 wen 2025-06-05 03:06:09 UTC
Created attachment 260991 [details]
Update to python-3.13.4

Update to 3.13.4
Comment 20 Konstantin Belousov freebsd_committer freebsd_triage 2025-06-05 04:00:29 UTC
(In reply to wen from comment #19)
Could you please just commit this?
Comment 21 Charlie Li freebsd_committer freebsd_triage 2025-06-05 05:04:26 UTC
(In reply to Konstantin Belousov from comment #20)
No. In certain cases this actually doesn't even build. Also not to mention another large swath of packages are ignored because of one package that upstream declared not compatible with this version.
Comment 22 Konstantin Belousov freebsd_committer freebsd_triage 2025-06-05 05:53:20 UTC
(In reply to Charlie Li from comment #21)
Please be much more specific.  What are configurations where 'this' (I assume
python 3.13 itself) does not build?

And please stop repeating the nonsense about py-* packages.  The python itself
+ virtual envs is the use case, and you block this usage, factually blocking
FreeBSD usage in important situations

Lots of ports break with 3.12, but the earth did not stopped. 
It was said many times, it is fine to not have all python versions listed in
the bsd.default-versions.mk.
Comment 23 Charlie Li freebsd_committer freebsd_triage 2025-06-10 12:15:47 UTC
*** Bug 287408 has been marked as a duplicate of this bug. ***
Comment 24 Charlie Li freebsd_committer freebsd_triage 2025-06-10 13:23:20 UTC
review D49680 is updated for 3.13.4.

(In reply to Konstantin Belousov from comment #22)
The build issues have been resolved, but packaging and possible circular dependency issues persist, particularly when enabling the experimental free-threaded mode. Free-threaded mode will most likely will be a child port since it is effectively a separate distribution: while the same CPython version, the ABIs are not compatible, and they have a few overlapping files thus CONFLICTS_INSTALL. Some logic changes will also need to happen in python.mk to accommodate this. While free-threaded mode and JIT are currently officially experimental, they may not be experimental in future versions, so we need to start accommodating them now.

The primary use case and mandate for the Python team has always been CPython itself and the Python package ports. The use of virtual environments on CPython and everything else is secondary. Please remember that many non-Python ports have Python dependencies (examples: anything that builds using meson, ninja, countless desktop programs implemented in other languages that incorporate Python components). From a support perspective, actual nonsense is when we the Python team get reports (formal or not) from those who manage their Python packages outside of ports, like using pip in a virtual environment or not, that we never had any primary semblance of QA over. (related: there is in fact a PEP that expressly disallows pip et al from touching ${LOCALBASE} or ${PREFIX} that we have not implemented yet, but is coming)

It is no longer possible to have a new CPython version without specifying it in Mk/ as these ports themselves use the python.mk variables directly and extensively. This was always the goal even prior to my involvement.

Anyway, this is more substantial than 3.12 (which itself was substantial). 3.12 still has issues with some of their ports which carry over to this version. For this version, the new big dependency failure is cython: lang/cython 0.29 is declared not supported on 3.13+ by upstream, but we still have many ports depending on it that probably should change to lang/cython3 which is compatible.
Comment 25 Enji Cooper freebsd_committer freebsd_triage 2025-06-11 19:00:17 UTC
(In reply to Charlie Li from comment #24)

> Some logic changes will also need to happen in python.mk to accommodate this. While free-threaded mode and JIT are currently officially experimental, they may not be experimental in future versions, so we need to start accommodating them now.

Is this something others (like me?) can help with? This seems like a very large change which will need to mature over a few minor releases before it's enabled by default, so I feel like we might have some runway in this space given that the support window for 3.13 has been increased by a half year vs the prior releases.
Comment 26 Charlie Li freebsd_committer freebsd_triage 2025-06-17 21:25:59 UTC
3.13.5 is now available on phab.

Free-threaded/no-GIL mode is a child port as lang/python313t. It took a bit but I think I have the flavour generation logic sorted now, especially for 3.13t since there are now non-numeric comparisons involved. Also managed to eliminate the port LLVM dependency for JIT, as it would have been a circular dependency if the Python port being built is ${PYTHON_DEFAULT}.

Proper flavour generation was important since lang/cython is not compatible with this Python version; poudriere was showing invalid flavour rather than ignored before fixing. Just need some further confirmation (anyone can do this part) that packages generally build and package properly under both 3.13 and 3.13t.
Comment 27 commit-hook freebsd_committer freebsd_triage 2025-06-19 19:16:24 UTC
A commit in branch main references this bug:

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

commit ccaff6c14f2078ddc0edcbf26d7ee7e48b80c2a8
Author:     Charlie Li <vishwin@FreeBSD.org>
AuthorDate: 2025-06-19 19:01:45 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2025-06-19 19:15:56 +0000

    python.mk: prepare handling versions with ABI flags appended

    Starting Python 3.13 there is an experimental free-threaded mode
    that effectively warrants a separate distribution from "vanilla"
    3.13. This mode includes appends an ABI flag so the resulting version
    is 3.13t. Some of the logic for comparing versions and generating
    flavours, amongst others, breaks since "3.13t" is not numeric, so
    adjust accordingly. Also account for 3.13t being a child port as
    the difference is one configure flag.

    To this effect, introduce two new read-only public variables,
    PYTHON_BASESUFFIX and PYTHON_BASEVER, for cases where the ABI flag
    in PYTHON_SUFFIX and PYTHON_VER is not warranted. Shift PYTHON_EXT_SUFFIX
    to use PYTHON_BASESUFFIX.

    PR: 274671
    Event: Kitchener-Waterloo Hackathon 202506

 Mk/Uses/python.mk | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)
Comment 28 commit-hook freebsd_committer freebsd_triage 2025-06-19 19:57:32 UTC
A commit in branch main references this bug:

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

commit b2cf9fac8a5c6bd2c4ae878cf9c57bc72fe9f8f9
Author:     Charlie Li <vishwin@FreeBSD.org>
AuthorDate: 2025-06-19 19:52:56 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2025-06-19 19:52:56 +0000

    python.mk: move ABI flag removal modifier out of ${_VC}

    Ugly hack needed by older bmake versions, ie not -CURRENT:

    : bmake: "/usr/ports/Mk/Uses/python.mk" line 471: Unknown modifier "/"
    : bmake: "/usr/ports/Mk/Uses/python.mk" line 471: Malformed conditional (!empty(_PYTHON_VERSION_MAXIMUM) && (${_PYTHON_VERSION:${_VC}} > ${_PYTHON_VERSION_MAXIMUM:${_VC}}))

    Fixes: ccaff6c14f2078ddc0edcbf26d7ee7e48b80c2a8
    Reported by: cmt
    PR: 274671
    Event: Kitchener-Waterloo Hackathon 202506

 Mk/Uses/python.mk | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
Comment 29 commit-hook freebsd_committer freebsd_triage 2025-06-19 20:29:39 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=4f0eba1efd73e85ccb544708c967bca70ad3e7a6

commit 4f0eba1efd73e85ccb544708c967bca70ad3e7a6
Author:     Charlie Li <vishwin@FreeBSD.org>
AuthorDate: 2025-06-19 20:09:42 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2025-06-19 20:28:47 +0000

    python.mk: rename PYTHON_EXT_SUFFIX to PYTHON_TAG, document, etc

    EXT_SUFFIX, according to PEP 3149, refers to the full tag and
    extension for compiled extension module objects, eg .cpython-311.so,
    .cpython-313t.so, etc. We do not use the correct semantic meaning,
    and this usage becomes ambiguous and confusing when tags do not
    match between bytecode and compiled extension module objects.

    Rename our PYTHON_EXT_SUFFIX to PYTHON_TAG to align with PEP 3147's
    specification of a magic tag, which consists of implementation name
    and shorthand version only. This is meant for bytecode and other
    files containing this tag in their filename that do not depend on
    a specific Python ABI for the same version. Chase all existing
    consumers.

    Introduce PYTHON_SOABI to align with PEP 3149's specification of a
    tag, which consists of implementation name, shorthand version and
    any ABI flags present (this and PYTHON_TAG are identical without
    ABI flags). This is meant for compiled extension module objects and
    other files that depend on a specific Python ABI for the same
    version.

    Add documentation for these variables that our PYTHON_EXT_SUFFIX
    never had.

    PR: 274671
    Event: Kitchener-Waterloo Hackathon 202506

 CHANGES                                      |     9 +
 Mk/Uses/python.mk                            |    25 +-
 accessibility/caribou/pkg-plist              |    72 +-
 accessibility/gammastep/pkg-plist            |    20 +-
 accessibility/py-speech-dispatcher/pkg-plist |    28 +-
 astro/astrometry/Makefile                    |     2 +-
 astro/astrometry/pkg-plist                   |    10 +-
 astro/kosmorro/pkg-plist                     |    44 +-
 astro/py-ephem/Makefile                      |     2 +-
 astro/py-kosmorrolib/pkg-plist               |    36 +-
 astro/py-sgp4/pkg-plist                      |     2 +-
 astro/py-skyfield/pkg-plist                  |     4 +-
 astro/weather/pkg-plist                      |     4 +-
 audio/exaile/pkg-plist                       |   428 +-
 audio/picard-plugins/pkg-plist               |   412 +-
 audio/py-SoundFile/pkg-plist                 |     4 +-
 audio/py-essentia/Makefile                   |     2 +-
 audio/py-essentia/pkg-plist                  |     2 +-
 audio/py-pocketsphinx/Makefile               |     8 +-
 audio/py-pocketsphinx/pkg-plist              |    32 +-
 audio/py-samplerate/Makefile                 |     4 +-
 audio/py-simpleaudio/Makefile                |     2 +-
 audio/py-soxr/Makefile                       |     2 +-
 audio/py-vosk/pkg-plist                      |    20 +-
 audio/qjackcapture/pkg-plist                 |    12 +-
 benchmarks/py-locust/pkg-plist               |   168 +-
 benchmarks/uica/Makefile                     |     2 +-
 benchmarks/uica/pkg-plist                    |    36 +-
 biology/py-biosig/Makefile                   |     2 +-
 biology/py-pyrodigal/Makefile                |     2 +-
 biology/py-pysam/Makefile                    |     2 +-
 biology/py-python-libsbml/pkg-plist          |     4 +-
 biology/py-scikit-bio/Makefile               |     4 +-
 biology/vcflib/pkg-plist                     |     2 +-
 cad/klayout/pkg-plist                        |    34 +-
 cad/netgen/pkg-plist                         |     2 +-
 cad/py-cocotb/Makefile                       |     2 +-
 cad/py-csxcad/Makefile                       |     2 +-
 chinese/ibus-array/pkg-plist                 |     8 +-
 chinese/ibus-libpinyin/pkg-plist             |    20 +-
 comms/gnuradio/pkg-plist                     |    42 +-
 comms/gr-osmosdr/pkg-plist                   |     2 +-
 comms/hamlib/pkg-plist                       |     6 +-
 comms/uhd/pkg-plist                          |     2 +-
 converters/py-bsdconv/pkg-plist              |     2 +-
 databases/grass8/pkg-plist                   |   806 +-
 databases/ldb25/Makefile                     |    12 +-
 databases/ldb28/Makefile                     |    12 +-
 databases/ldb29/Makefile                     |    12 +-
 databases/py-apache-arrow/pkg-plist          |   454 +-
 databases/py-duckdb/Makefile                 |     2 +-
 databases/py-gdbm/Makefile                   |     6 +-
 databases/py-pymongo/Makefile                |     4 +-
 databases/py-sqlcipher3/Makefile             |     2 +-
 databases/py-sqlite3/Makefile                |     6 +-
 databases/py-xapian/pkg-plist                |     6 +-
 databases/rrdtool/pkg-plist                  |     2 +-
 databases/tdb/pkg-plist                      |     2 +-
 databases/tdb1410/pkg-plist                  |     2 +-
 deskutils/gnome-tweaks/pkg-plist             |    76 +-
 deskutils/mozo/pkg-plist                     |    20 +-
 deskutils/py-paperless-ngx/pkg-plist         |   992 +-
 deskutils/py-paperless/pkg-plist             |   404 +-
 deskutils/recoll/pkg-plist                   |     6 +-
 deskutils/rednotebook/pkg-plist              |   140 +-
 deskutils/treeline/pkg-plist                 |   172 +-
 devel/blueprint-compiler/pkg-plist           |   200 +-
 devel/cbang/pkg-plist                        |    66 +-
 devel/cpplint/pkg-plist                      |     4 +-
 devel/distcc/pkg-plist                       |     2 +-
 devel/git-cola/pkg-plist                     |   356 +-
 devel/glib20/pkg-plist                       |    40 +-
 devel/gobject-introspection/pkg-plist        |     2 +-
 devel/kf6-kapidox/pkg-plist                  |    68 +-
 devel/libsearpc/pkg-plist                    |    48 +-
 devel/llvm-devel/Makefile                    |     2 +-
 devel/llvm-devel/pkg-plist                   |     2 +-
 devel/llvm14/Makefile                        |     2 +-
 devel/llvm14/pkg-plist                       |     2 +-
 devel/llvm15/Makefile                        |     2 +-
 devel/llvm15/pkg-plist                       |     2 +-
 devel/llvm16/Makefile                        |     2 +-
 devel/llvm16/pkg-plist                       |     2 +-
 devel/llvm17/Makefile                        |     2 +-
 devel/llvm17/pkg-plist                       |     2 +-
 devel/llvm18/Makefile                        |     2 +-
 devel/llvm18/pkg-plist                       |     2 +-
 devel/llvm19/Makefile                        |     2 +-
 devel/llvm19/pkg-plist                       |     2 +-
 devel/llvm20/Makefile                        |     2 +-
 devel/llvm20/pkg-plist                       |     2 +-
 devel/nanopb/pkg-plist                       |    28 +-
 devel/omniORB/pkg-plist                      |     6 +-
 devel/py-PYB11Generator/pkg-plist            |    28 +-
 devel/py-ast2json/pkg-plist                  |    20 +-
 devel/py-bps-restpy/pkg-plist                |    60 +-
 devel/py-cftime/Makefile                     |     2 +-
 devel/py-cld/Makefile                        |     4 +-
 devel/py-cysignals/pkg-plist                 |    14 +-
 devel/py-dm-tree/pkg-plist                   |    18 +-
 devel/py-ewah-bool-utils/Makefile            |     6 +-
 devel/py-grpcio/Makefile                     |     2 +-
 devel/py-guppy3/pkg-plist                    |     4 +-
 devel/py-ice37/pkg-plist                     |     2 +-
 devel/py-jep/pkg-plist                       |     2 +-
 devel/py-jsonnet/Makefile                    |     2 +-
 devel/py-line-profiler/Makefile              |     2 +-
 devel/py-memory-allocator/pkg-plist          |     8 +-
 devel/py-omniorb/pkg-plist                   |    48 +-
 devel/py-pysimdjson/pkg-plist                |     2 +-
 devel/py-python-rapidjson/Makefile           |     2 +-
 devel/py-qt5-pyqt/pkg-plist                  |   132 +-
 devel/py-qt6-pyqt/pkg-plist                  |   156 +-
 devel/py-qutip/Makefile                      |     4 +-
 devel/py-recordclass/pkg-plist               |     8 +-
 devel/py-simsimd/Makefile                    |     2 +-
 devel/py-stringzilla/Makefile                |     2 +-
 devel/py-time-machine/Makefile               |     2 +-
 devel/py-zfp/Makefile                        |     2 +-
 devel/pybind11_protobuf/pkg-plist            |     2 +-
 devel/pyside6-tools/pkg-plist                |   112 +-
 devel/pyside6/pkg-plist                      |    40 +-
 devel/root/pkg-plist                         |   592 +-
 devel/shiboken6/pkg-plist                    |    12 +-
 devel/talloc/pkg-plist                       |     8 +-
 devel/talloc242/pkg-plist                    |     8 +-
 devel/tevent/pkg-plist                       |     2 +-
 devel/tevent016/pkg-plist                    |     2 +-
 devel/thonny/pkg-plist                       |   944 +-
 devel/viewvc-devel/pkg-plist                 |    58 +-
 devel/youcompleteme/pkg-plist                |     2 +-
 editors/pluma-plugins/pkg-plist              |    44 +-
 editors/pluma/pkg-plist                      |   120 +-
 filesystems/openzfs/pkg-plist                |    26 +-
 finance/odoo/pkg-plist                       | 28700 +++++++++----------
 finance/odoo16/pkg-plist                     | 22508 +++++++--------
 finance/odoo17/pkg-plist                     | 26956 +++++++++---------
 finance/py-bt/Makefile                       |     2 +-
 finance/py-ta-lib/Makefile                   |     2 +-
 games/kajongg/pkg-plist                      |   138 +-
 games/openage/pkg-plist                      |   602 +-
 games/pyspacewar/pkg-plist                   |    28 +-
 games/vamos/pkg-plist                        |    20 +-
 graphics/mypaint/pkg-plist                   |   554 +-
 graphics/opencv/pkg-plist                    |     2 +-
 graphics/openimageio/pkg-plist-pybind        |     2 +-
 graphics/py-ManimPango/Makefile              |     2 +-
 graphics/py-cairo/pkg-plist                  |     2 +-
 graphics/py-diplib/pkg-plist                 |    30 +-
 graphics/py-f3d/pkg-plist                    |     2 +-
 graphics/py-glcontext/Makefile               |     4 +-
 graphics/py-moderngl/Makefile                |     2 +-
 graphics/py-pivy/pkg-plist                   |   120 +-
 graphics/py-pygltflib/pkg-plist              |    12 +-
 graphics/py-python-poppler-qt5/Makefile      |     2 +-
 graphics/py-s2/pkg-plist                     |     4 +-
 graphics/py-simplejpeg/Makefile              |     2 +-
 graphics/py-vispy/Makefile                   |     2 +-
 japanese/py-fugashi/Makefile                 |     2 +-
 lang/python310/pkg-plist                     | 10250 +++----
 lang/python311/pkg-plist                     | 10918 ++++----
 lang/python312/pkg-plist                     | 10794 +++----
 lang/python39/pkg-plist                      | 10116 +++----
 math/cadabra2/Makefile                       |     2 +-
 math/py-POT/Makefile                         |     2 +-
 math/py-SQNomad/Makefile                     |     2 +-
 math/py-ambit/pkg-plist                      |     2 +-
 math/py-annoy/Makefile                       |     2 +-
 math/py-clingcon/Makefile                    |     2 +-
 math/py-clingo/Makefile                      |     2 +-
 math/py-cvxpy/Makefile                       |     4 +-
 math/py-cyipopt/Makefile                     |     2 +-
 math/py-cypari2/pkg-plist                    |    16 +-
 math/py-daqp/Makefile                        |     2 +-
 math/py-deap/Makefile                        |     2 +-
 math/py-dgl/Makefile                         |     2 +-
 math/py-diffcp/Makefile                      |     2 +-
 math/py-dionysus/Makefile                    |     2 +-
 math/py-fastdtw/Makefile                     |     2 +-
 math/py-fpylll/pkg-plist                     |    28 +-
 math/py-fsph/Makefile                        |     4 +-
 math/py-heyoka/pkg-plist                     |     2 +-
 math/py-kahip/Makefile                       |     4 +-
 math/py-linearmodels/Makefile                |     2 +-
 math/py-lrcalc/Makefile                      |     2 +-
 math/py-mapbox-earcut/Makefile               |     2 +-
 math/py-mathics/pkg-plist                    |    28 +-
 math/py-matplotlib/pkg-plist                 |     8 +-
 math/py-minorminer/Makefile                  |     8 +-
 math/py-nlopt/pkg-plist                      |     8 +-
 math/py-or-tools/pkg-plist                   |    14 +-
 math/py-petsc4py/Makefile                    |     2 +-
 math/py-pplpy/pkg-plist                      |    14 +-
 math/py-primecountpy/pkg-plist               |     6 +-
 math/py-primme/Makefile                      |     2 +-
 math/py-py-find-1st/Makefile                 |     2 +-
 math/py-pyFFTW/Makefile                      |     2 +-
 math/py-pyclipper/Makefile                   |     2 +-
 math/py-pyodeint/Makefile                    |     2 +-
 math/py-pytensor/Makefile                    |     2 +-
 math/py-rectangle-packer/Makefile            |     4 +-
 math/py-rustworkx/Makefile                   |     2 +-
 math/py-scikit-umfpack/Makefile              |     2 +-
 math/py-slepc4py/Makefile                    |     2 +-
 math/py-spot/pkg-plist                       |     8 +-
 math/py-symengine/pkg-plist                  |     2 +-
 math/py-topologic/Makefile                   |     4 +-
 misc/adios2/Makefile                         |     2 +-
 misc/adios2/pkg-plist                        |     2 +-
 misc/py-apache-beam/Makefile                 |     2 +-
 misc/py-mmcv/Makefile                        |     2 +-
 misc/py-numcodecs/Makefile                   |     2 +-
 misc/py-openvdb/Makefile                     |     2 +-
 misc/py-pytorch/Makefile                     |     4 +-
 misc/py-shap2/Makefile                       |     2 +-
 misc/py-tvm/pkg-plist                        |  4598 +--
 misc/py-xformers/pkg-plist                   |     4 +-
 multimedia/gpodder/pkg-plist                 |   244 +-
 multimedia/mythtv/pkg-plist                  |   122 +-
 multimedia/onevpl/pkg-plist                  |     2 +-
 multimedia/openshot/pkg-plist                |   500 +-
 multimedia/pitivi/pkg-plist                  |   152 +-
 multimedia/py-gstreamer1/pkg-plist           |    24 +-
 multimedia/py-opentimelineio/pkg-plist       |   240 +-
 multimedia/py-ustreamer/Makefile             |     2 +-
 net-mgmt/crmsh/pkg-plist                     |   174 +-
 net-mgmt/net-snmp/pkg-plist                  |     2 +-
 net-mgmt/networkmgr/pkg-plist                |    20 +-
 net-mgmt/seafile-client/pkg-plist            |    12 +-
 net-mgmt/seafile-server/pkg-plist            |    10 +-
 net-p2p/bazarr/pkg-plist                     | 14508 +++++-----
 net-p2p/py-libtorrent-rasterbar/Makefile     |     4 +-
 net-p2p/py-pulsar-client/Makefile            |     2 +-
 net-p2p/reticulum/pkg-plist                  |   304 +-
 net/kea-devel/pkg-plist                      |    12 +-
 net/kea/pkg-plist                            |    12 +-
 net/pacemaker2/pkg-plist                     |   204 +-
 net/py-libdnet/Makefile                      |     2 +-
 net/py-zope.proxy/Makefile                   |     2 +-
 net/samba416/pkg-plist                       |    12 +-
 net/samba416/pkg-plist.python                |   148 +-
 net/samba419/pkg-plist                       |    12 +-
 net/samba419/pkg-plist.python                |   158 +-
 net/samba420/pkg-plist                       |    12 +-
 net/samba420/pkg-plist.python                |   172 +-
 print/lilypond-devel/pkg-plist               |     6 +-
 print/lyx/pkg-plist                          |   168 +-
 print/pdfarranger/pkg-plist                  |    44 +-
 science/cantera/pkg-plist                    |     2 +-
 science/chemicalfun/Makefile                 |     2 +-
 science/chemicalfun/pkg-plist                |     2 +-
 science/code_saturne/pkg-plist               |  2358 +-
 science/fastjet/pkg-plist                    |     4 +-
 science/meep/pkg-plist                       |   138 +-
 science/psi4/pkg-plist                       |     2 +-
 science/py-GPy/Makefile                      |     4 +-
 science/py-PyNE/pkg-plist                    |   148 +-
 science/py-arbor/Makefile                    |     2 +-
 science/py-arbor/pkg-plist                   |     2 +-
 science/py-arch/Makefile                     |     4 +-
 science/py-avogadrolibs/Makefile             |     4 +-
 science/py-dftd4/Makefile                    |     2 +-
 science/py-dimod/Makefile                    |     2 +-
 science/py-dipy/pkg-plist                    |  1474 +-
 science/py-dwave-inspector/pkg-plist         |    36 +-
 science/py-dwave-optimization/Makefile       |     4 +-
 science/py-dwave-preprocessing/Makefile      |     4 +-
 science/py-dwave-preprocessing/pkg-plist     |    48 +-
 science/py-dwave-samplers/Makefile           |     2 +-
 science/py-dwave-samplers/pkg-plist          |    82 +-
 science/py-dwave-system/pkg-plist            |   144 +-
 science/py-fresnel/pkg-plist                 |     4 +-
 science/py-gemmi/pkg-plist                   |     2 +-
 science/py-hoomd-blue/pkg-plist              |     8 +-
 science/py-kimpy/Makefile                    |     2 +-
 science/py-kpLib/Makefile                    |     2 +-
 science/py-libgetar/Makefile                 |     2 +-
 science/py-meshio/pkg-plist                  |   348 +-
 science/py-openEMS/Makefile                  |     2 +-
 science/py-openbabel/Makefile                |     2 +-
 science/py-phonopy/Makefile                  |     2 +-
 science/py-pygmo2/pkg-plist                  |     2 +-
 science/py-pymol/pkg-plist                   |   760 +-
 science/salome-kernel/pkg-plist              |   468 +-
 science/smoldyn/pkg-plist                    |    20 +-
 science/tfel/pkg-plist                       |    28 +-
 science/thermofun/Makefile                   |     2 +-
 science/thermofun/pkg-plist                  |     2 +-
 security/libpreludedb/pkg-plist              |     4 +-
 security/libpwquality/pkg-plist              |     2 +-
 security/py-gpgme/pkg-plist                  |   114 +-
 security/py-greenbone-feed-sync/pkg-plist    |    56 +-
 security/py-notus-scanner/pkg-plist          |   224 +-
 security/py-ospd-openvas/pkg-plist           |   176 +-
 security/py-pass-audit/pkg-plist             |    20 +-
 security/py-ssh-audit/pkg-plist              |   128 +-
 security/py-yara-python-dex/pkg-plist        |     2 +-
 security/sssd2/pkg-plist                     |     6 +-
 security/suricata/pkg-plist                  |    90 +-
 security/wazuh-manager/pkg-plist             | 37016 ++++++++++++-------------
 sysutils/bareos-server/pkg-plist             |     4 +-
 sysutils/bareos-server/pkg-plist.client      |     2 +-
 sysutils/bareos22-server/pkg-plist           |     4 +-
 sysutils/bareos22-server/pkg-plist.client    |     2 +-
 sysutils/bareos23-server/pkg-plist           |     4 +-
 sysutils/bareos23-server/pkg-plist.client    |     2 +-
 sysutils/py-overlord/pkg-plist               |   164 +-
 sysutils/syslog-ng/Makefile                  |    34 +-
 sysutils/webmin/pkg-plist                    |     4 +-
 sysutils/xen-tools/pkg-plist                 |     6 +-
 textproc/ibus/pkg-plist                      |    20 +-
 textproc/py-faust-cchardet/Makefile          |     2 +-
 textproc/py-genshi/Makefile                  |     2 +-
 textproc/py-hunspell/Makefile                |     2 +-
 textproc/py-libxml2/pkg-plist                |     8 +-
 textproc/py-sphinx-material/pkg-plist        |     8 +-
 textproc/py-wordcloud/pkg-plist              |     2 +-
 textproc/redland-bindings/Makefile           |     2 +-
 textproc/redland-bindings/pkg-plist          |     2 +-
 www/npm-node22/pkg-plist                     |   232 +-
 www/pacparser/pkg-plist                      |     4 +-
 www/py-beautifulsoup/pkg-plist               |   128 +-
 www/py-css-html-js-minify/pkg-plist          |    12 +-
 www/py-seafdav/pkg-plist                     |   192 +-
 x11-toolkits/nanogui/pkg-plist               |     2 +-
 x11-toolkits/py-tkinter/Makefile             |     6 +-
 x11-wm/qtile/pkg-plist                       |     8 +-
 x11/alacarte/pkg-plist                       |    36 +-
 x11/kitty/pkg-plist                          |  1032 +-
 x11/menulibre/pkg-plist                      |    80 +-
 x11/xpra/pkg-plist                           |  2288 +-
 331 files changed, 100105 insertions(+), 100079 deletions(-)
Comment 30 Charlie Li freebsd_committer freebsd_triage 2025-06-28 18:01:23 UTC
I plan to commit this port itself after the new quarterly branches. Supporting infrastructure should be in before. This way the fallout, which there will be a lot of, can be contained within the main branch. After the highest-impact fallout is resolved, this can land in quarterly.

There will be a new tracking bug opened to deal with fallout similar to bug 285957. Already one big item to tackle is getting cython3 to build (somehow it doesn't build right now) and switching as many direct consumers to it, as this causes way too many higher-order consumers to get skipped.
Comment 31 Wen Heping freebsd_committer freebsd_triage 2025-08-06 23:39:36 UTC
Created attachment 262764 [details]
Update to 3.13.6

Update to 3.13.6
Comment 32 Charlie Li freebsd_committer freebsd_triage 2025-08-09 07:17:15 UTC
There is now a staging error with the free-threaded variant. The threaded ABI flag is not being passed properly, probably after another bmake update in -CURRENT.
Comment 33 Wen Heping freebsd_committer freebsd_triage 2025-08-15 12:44:20 UTC
Created attachment 262981 [details]
Update to 3.13.7

Update to 3.13.7
Comment 34 Wen Heping freebsd_committer freebsd_triage 2025-10-08 13:52:36 UTC
Created attachment 264408 [details]
Update to 3.13.8

Update to 3.13.8
Comment 35 Wen Heping freebsd_committer freebsd_triage 2025-10-15 13:36:45 UTC
Created attachment 264601 [details]
Update to 3.13.9

Update to 3.13.9
Comment 36 Gordon Bergling freebsd_committer freebsd_triage 2025-10-25 21:25:03 UTC
Any update on this topic? I know a lot of people that are waiting for python 3.13. Maybe we can accomplish this in time for 15.0-RELEASE.
Comment 37 Matthias Andree freebsd_committer freebsd_triage 2025-11-01 14:40:30 UTC
I think we should skip 3.13 and move to 3.14 right away, to have one version less to care about.  

It's an enormous burden the way we do it and that our Python folks in FreeBSD haven't managed to commit it is the best example we should constrain our workload.

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=282176
Comment 38 Charlie Li freebsd_committer freebsd_triage 2025-11-01 14:41:57 UTC
Not so fast.

What has to happen here also goes into 3.14, particularly the free-threaded mode which is actually a separate ABI. I will write up the details later.
Comment 39 Matthias Andree freebsd_committer freebsd_triage 2025-11-01 14:53:54 UTC
This PR is two years old, you (python@) have had one year before the release and one year after it.

So you do give up 3.13 and move the efforts directly to 3.14. 

You (python@) wasted half of 3.13's lifetime with NOT getting 3.13 into ports for various nonsense excuses trying to do a 200% solution, and adding something that's past half of its life already is only giving you (python@) more excuses why 3.14, 3.15, 3.16 will not happen.

Please get your act together and stop resisting a 95% solution of ONE new Python going in. 

Either you commit 3.13 until mid November or you skip it.


And please stop pretending we can mop up everything the Python community gave up on years ago. We can't have the entire Cheese Shop (aka PyPI.org) up and running. Python 3.13 should have been default for 9 if not 11 - 12 months.
Comment 40 Konstantin Belousov freebsd_committer freebsd_triage 2025-11-01 16:41:44 UTC
(In reply to Matthias Andree from comment #39)
I can only agree and just repeat that FreeBSD is losing its (already not too strong)
positions in some areas due to this python saga.  The current situation is both
ridiculous by itself and causes people trying to bring or keep FreeBSD in some
areas to be seen as outright outcasts.
Comment 41 Matthias Andree freebsd_committer freebsd_triage 2025-11-01 17:05:28 UTC
Reviewing some of the older excuses, 3.13 had free-threaded as experimental, so is no excuse to stop the 3.13 vanilla version.

Then we don't have the experiment in FreeBSD. It's matured and can be solved after the 3.14 mainline is in.
Comment 42 commit-hook freebsd_committer freebsd_triage 2025-11-01 22:42:25 UTC
A commit in branch main references this bug:

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

commit edcf1d7d57b44e838648ae0695afd23a43275fb7
Author:     Wen Heping <wen@FreeBSD.org>
AuthorDate: 2025-04-06 04:05:12 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2025-11-01 22:40:56 +0000

    lang/python313: add

    What's new: https://docs.python.org/3/whatsnew/3.13.html

    Most notably, introduce free-threaded mode. As this mode changes
    the ABI, the entire distribution lives in a separate hierarchy, and
    thus a new child port (lang/python313t) and FLAVOR (py313t) are
    introduced.

    Co-authored-by: vishwin
    PR: 274671
    Differential Revision: https://reviews.freebsd.org/D49680

 Mk/Uses/python.mk                                  |    2 +-
 Mk/bsd.default-versions.mk                         |    2 +-
 lang/Makefile                                      |    2 +
 lang/python313/Makefile (new)                      |  181 +
 lang/python313/Makefile.version (new)              |    7 +
 lang/python313/distinfo (new)                      |    3 +
 .../libressl/patch-Modules___hashopenssl.c (new)   |   26 +
 lang/python313/files/patch-Makefile.pre.in (new)   |   62 +
 .../files/patch-Misc__python-config.sh.in (new)    |   11 +
 .../files/patch-Tools_jit___llvm.py (new)          |   31 +
 .../files/patch-Tools_jit___targets.py (new)       |   12 +
 lang/python313/files/patch-configure (new)         |   11 +
 lang/python313/files/pkg-message.in (new)          |   12 +
 lang/python313/pkg-descr (new)                     |    2 +
 lang/python313/pkg-plist (new)                     | 7913 ++++++++++++++++++++
 lang/python313t/Makefile (new)                     |   16 +
 16 files changed, 8291 insertions(+), 2 deletions(-)
Comment 43 Charlie Li freebsd_committer freebsd_triage 2025-11-01 23:22:41 UTC
The last issue that prevented this from landing dealt with ensuring that the correct variant of this Python version built and packaged properly. Most notably, the `python` or `python3` value of ${DEFAULT_VERSIONS} should not have affected whether the resulting PKGNAME would be correct or staging and packaging would behave itself.

Earlier during this cycle I committed support into the framework to allow for Python versions that are not fully numeric, ie 3.13t. Previously the framework assumed that versions are only numeric and thus numeric comparison operators worked and made sense. Once it became clear that free-threaded mode required its own FLAVOR and thus a separate port, adjustments to the version comparison and flavour generation logic had to happen. So since then, theoretically the py313 and py313t separate flavours have been possible.

The showstopper from having the lang/ ports committed at that same time stemmed from this new support but in a different way. If lang/python313t is to be built and DEFAULT_VERSIONS+=python=3.13t and DEFAULT_VERSIONS+=python3=3.13t, the version comparison logic doesn't fire and thus ${PYTHON_VER} et al are correct at 3.13t. The trouble lies when ${DEFAULT_VERSIONS} and the desired lang/python port versions differ: the version comparison logic intended for *consumers*, especially the flavoured ports, comes into play, which means the `t` is immediately stripped so that the comparisons happen on fully-numeric values. This path makes sense for consumers since they need to determine whether or not a particular version or range is supported (3.13 and 3.13t for numerical comparison and compatibility purposes are the same version). Unfortunately there is not really a way to put the `t` back into ${PYTHON_VER} once this finishes without there being a flavour defined, so building say lang/python313t in this case would result in PYTHON_VER=3.13 instead of 3.13t. This ends up messing with the resulting ${PKGNAME}, ${SUB_FILES} and the plist which ultimately results in failed staging or packaging.

Mitigating around this was incredibly frustrating and is why it took so long. Not proud of how long this took at all. Also not proud of how the explanation had to come after everything worked (and thus committed) because of the amount of moving parts in make(1) variables, which also made it nearly impossible to accept any offers of help.

But now we have support for the free-threaded mode starting here at 3.13. 3.14 has developed this support further and hopefully the prematurely-committed port will catch up soon. The generally incremental nature of CPython is why this needed to be committed first; the port development cycles also follow this pattern of starting from the previous version in a new copy.
Comment 44 jan 2025-11-03 09:15:38 UTC
It does not build in poudriere for me:

--- ./Modules/_blake2/blake2s_impl.c ---
--- Modules/expat/xmlparse.o ---
--- Modules/expat/xmlrole.o ---
--- Modules/expat/xmltok.o ---
--- ./Modules/_blake2/blake2s_impl.c ---
python3 ./Modules/_blake2/blake2b2s.py
sh: python3: not found
--- python-gdb.py ---
--- Programs/_testembed.o ---
--- build/scripts-3.13/idle3.13 ---
--- ./Modules/_blake2/blake2s_impl.c ---
*** [./Modules/_blake2/blake2s_impl.c] Error code 127

make: stopped in /wrkdirs/usr/ports/lang/python313/work/Python-3.13.9
--- Modules/expat/xmlrole.o ---
cc -pthread -c -I./Modules/expat -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe  -fstack-protector-strong -fno-strict-aliasing   -flto=thin -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal -I./Include/internal/mimalloc  -I. -I./Include -I/usr/local/include -I/usr/local/include -fPIC -fPIC -o Modules/expat/xmlrole.o ./Modules/expat/xmlrole.c
--- Modules/expat/xmltok.o ---
cc -pthread -c -I./Modules/expat -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe  -fstack-protector-strong -fno-strict-aliasing   -flto=thin -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal -I./Include/internal/mimalloc  -I. -I./Include -I/usr/local/include -I/usr/local/include -fPIC -fPIC -o Modules/expat/xmltok.o ./Modules/expat/xmltok.c
--- Modules/expat/xmlparse.o ---
cc -pthread -c -I./Modules/expat -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe  -fstack-protector-strong -fno-strict-aliasing   -flto=thin -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal -I./Include/internal/mimalloc  -I. -I./Include -I/usr/local/include -I/usr/local/include -fPIC -fPIC -o Modules/expat/xmlparse.o ./Modules/expat/xmlparse.c
--- python-gdb.py ---
install  -m 0644 ./Tools/gdb/libpython.py python-gdb.py
--- Programs/_testembed.o ---
cc -pthread -c -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe  -fstack-protector-strong -fno-strict-aliasing   -flto=thin -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal -I./Include/internal/mimalloc  -I. -I./Include -I/usr/local/include -I/usr/local/include -fPIC -DPy_BUILD_CORE -o Programs/_testembed.o ./Programs/_testembed.c
--- build/scripts-3.13/idle3.13 ---
sed -e "s,/usr/bin/env python3,/usr/local/bin/python3.13," < ./Tools/scripts/idle3 > build/scripts-3.13/idle3.13
1 error

make: stopped in /wrkdirs/usr/ports/lang/python313/work/Python-3.13.9
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make: stopped in /usr/ports/lang/python313
build of lang/python313 | python313-3.13.9 ended at 2025-11-03T10:14:38+01:00
build time: 00:00:08
!!! build failure encountered !!!
[00:00:10] Error: Build failed in phase: build
[00:00:10] [14amd64-default] [2025-11-03_10h14m28s] [failed/build] Time: 00:00:09
Comment 45 Yasuhito FUTATSUKI 2025-11-03 11:04:36 UTC
devel/commitizen and textproc/py-towncrier uses PYTHON_VER as numeric and it prevents making ports index.

diff --git a/devel/commitizen/Makefile b/devel/commitizen/Makefile
index 42cff50d24ed..1c259db61f51 100644
--- a/devel/commitizen/Makefile
+++ b/devel/commitizen/Makefile
@@ -32,6 +32,6 @@ NO_ARCH=      yes
 
 .include <bsd.port.mk>
 
-.if ${PYTHON_MAJOR_VER} == 3 && ${PYTHON_VER:E} < 10
+.if ${PYTHON_MAJOR_VER} == 3 && ${PYTHON_BASEVER:E} < 10
 PY_RDEPS+=     importlib-metadata>=8.0.0:devel/py-importlib-metadata
 .endif
diff --git a/textproc/py-towncrier/Makefile b/textproc/py-towncrier/Makefile
index 5a358a1aa2ba..40b1316c1aba 100644
--- a/textproc/py-towncrier/Makefile
+++ b/textproc/py-towncrier/Makefile
@@ -25,7 +25,7 @@ NO_ARCH=      yes
 
 .include <bsd.port.pre.mk>
 
-.if defined(PYTHON_VER) && ${PYTHON_VER} < 3.10
+.if defined(PYTHON_BASEVER) && ${PYTHON_BASEVER} < 3.10
 BUILD_DEPENDS+=        ${PYTHON_PKGNAMEPREFIX}importlib-metadata>=7.1.0:devel/py-importlib-metadata@${PY_FLAVOR} \
                ${PYTHON_PKGNAMEPREFIX}importlib-resources>=6.4.0:devel/py-importlib-resources@${PY_FLAVOR}
 RUN_DEPENDS+=  ${PYTHON_PKGNAMEPREFIX}importlib-metadata>=7.1.0:devel/py-importlib-metadata@${PY_FLAVOR} \
Comment 46 Thijs van Dien 2025-11-03 11:30:39 UTC
I really wonder if all this effort to already accommodate for the free-threaded build is worth it. Only the tiniest fraction of users will be interested while it's still very much a WIP. Those who do want to try it will not need a package but happily compile their own interpreter. Even though most of the work has been done(?) now, wouldn't it be better to just throw an error in case of 3.13t and assume 3.13 after that, to keep things simple in the short term? If all goes well, around 3.15 or 3.16 might be a good time to re-apply these version related patches. Until then, it causes needless friction IMO, as demonstrated above. Hardly any Linux distribution ships 3.13t yet?
Comment 47 Jordan Ostreff 2025-11-03 11:45:13 UTC
(In reply to Yasuhito FUTATSUKI from comment #45)
I have applied your patches manually in my local ports tree.
Comment 48 Yasuhito FUTATSUKI 2025-11-03 12:23:59 UTC
(In reply to Jordan Ostreff from comment #47)
Perhaps the part of textproc/py-towncrier of the patch does not work as original author expected until Python 3.9 had gone, because 3.9 > 3.10 in numeric.

Also both case in devel/commitizen and textproc/py-towncrier, the conditionals themselves useless because all those conditionals always false for all supported python version.
Comment 49 commit-hook freebsd_committer freebsd_triage 2025-11-04 14:45:46 UTC
A commit in branch main references this bug:

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

commit e0cbe081481d26c9722afdd48fa4ff2675b9e899
Author:     Charlie Li <vishwin@FreeBSD.org>
AuthorDate: 2025-11-04 14:43:25 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2025-11-04 14:43:25 +0000

    lang/python313: fix blake2s_impl regen mismatch

    The only difference between "stock" and regenerated blake2s_impl.c
    is where a variable is declared in py_blake2s_new_impl(). Patch the
    stock file to the regenerated version so the regeneration script
    does not get called.

    Reported by: fluffy, jan[at]glaubitz[dot]org
    PR: 274671

 .../files/patch-Modules___blake2_blake2s__impl.c (new)     | 14 ++++++++++++++
 lang/python313t/Makefile                                   |  8 --------
 2 files changed, 14 insertions(+), 8 deletions(-)