git: 40d8a9d4d323 - main - devel/py-foolscap: Fix build with Python 3.12+

From: Po-Chuan Hsieh <sunpoet_at_FreeBSD.org>
Date: Fri, 26 Jun 2026 20:50:32 UTC
The branch main has been updated by sunpoet:

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

commit 40d8a9d4d3235d4696e0171e258bb5222e9dc7d7
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2026-06-26 20:44:46 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2026-06-26 20:44:46 +0000

    devel/py-foolscap: Fix build with Python 3.12+
    
    * Getting build dependencies for wheel...
    Traceback (most recent call last):
    ...
      File "/wrkdirs/usr/ports/devel/py-foolscap/work-py312/foolscap-23.3.0/versioneer.py", line 342, in get_config_from_root
        parser = configparser.SafeConfigParser()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    AttributeError: module 'configparser' has no attribute 'SafeConfigParser'. Did you mean: 'RawConfigParser'?
    
    ERROR Backend subprocess exited when trying to invoke get_requires_for_build_wheel
    *** Error code 1
    
    Reference:      https://pkg-status.freebsd.org/beefy23/data/150amd64-default/92a0eb6f0ba2/logs/py312-foolscap-23.3.0_2.log
---
 devel/py-foolscap/files/patch-versioneer.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/devel/py-foolscap/files/patch-versioneer.py b/devel/py-foolscap/files/patch-versioneer.py
new file mode 100644
index 000000000000..e5f746dbcb32
--- /dev/null
+++ b/devel/py-foolscap/files/patch-versioneer.py
@@ -0,0 +1,14 @@
+--- versioneer.py.orig	2023-03-08 20:04:40 UTC
++++ versioneer.py
+@@ -339,9 +339,9 @@ def get_config_from_root(root):
+     # configparser.NoOptionError (if it lacks "VCS="). See the docstring at
+     # the top of versioneer.py for instructions on writing your setup.cfg .
+     setup_cfg = os.path.join(root, "setup.cfg")
+-    parser = configparser.SafeConfigParser()
++    parser = configparser.ConfigParser()
+     with open(setup_cfg, "r") as f:
+-        parser.readfp(f)
++        parser.read_file(f)
+     VCS = parser.get("versioneer", "VCS")  # mandatory
+ 
+     def get(parser, name):