commit:     42375327de2a9f151c8a6f5a9cfc0932dc88c840
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Nov  2 18:23:25 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Nov  2 18:24:19 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=42375327

dev-python/html5lib: fix build w/ py3.14

I guess setup.py run is run with an earlier Python impl if you have it, which 
is how
neither of us noticed before.

Closes: https://bugs.gentoo.org/965490
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/html5lib-1.2_pre20240221-py314.patch     | 41 ++++++++++++++++++++++
 .../html5lib/html5lib-1.2_pre20240221.ebuild       |  4 +++
 2 files changed, 45 insertions(+)

diff --git a/dev-python/html5lib/files/html5lib-1.2_pre20240221-py314.patch 
b/dev-python/html5lib/files/html5lib-1.2_pre20240221-py314.patch
new file mode 100644
index 000000000000..785f77b04c59
--- /dev/null
+++ b/dev-python/html5lib/files/html5lib-1.2_pre20240221-py314.patch
@@ -0,0 +1,41 @@
+https://bugs.gentoo.org/965490
+https://github.com/html5lib/html5lib-python/pull/589
+
+From b90dafff1bf342d34d539098013d0b9f318c7641 Mon Sep 17 00:00:00 2001
+From: Andrew Sukach <[email protected]>
+Date: Fri, 12 Sep 2025 21:53:31 -0700
+Subject: [PATCH] `setup.py`: fix version parsing on Python 3.14 (ast.Str
+ removed)
+
+Python 3.14 removes the ast.Str node type. String literals now appear
+as ast.Constant(value=str).
+Update the AST check to accept both ast.Str (for older Pythons) and
+ast.Constant with a string value (for Python 3.8+), allowing html5lib to
+build successfully on Python 3.14 while remaining compatible with older
+version.
+---
+ setup.py | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 30ee0575..42ab6f67 100644
+--- a/setup.py
++++ b/setup.py
+@@ -92,9 +92,14 @@ def default_environment():
+     for a in assignments:
+         if (len(a.targets) == 1 and
+                 isinstance(a.targets[0], ast.Name) and
+-                a.targets[0].id == "__version__" and
+-                isinstance(a.value, ast.Str)):
+-            version = a.value.s
++                a.targets[0].id == "__version__"):
++            if hasattr(ast, "Str") and isinstance(a.value, ast.Str):
++                version = a.value.s
++            elif (hasattr(ast, "Constant")
++                  and isinstance(a.value, ast.Constant)
++                  and isinstance(a.value.value, str)):
++                version = a.value.value
++assert version is not None
+ 
+ setup(name='html5lib',
+       version=version,

diff --git a/dev-python/html5lib/html5lib-1.2_pre20240221.ebuild 
b/dev-python/html5lib/html5lib-1.2_pre20240221.ebuild
index acd43ad4fb38..5adb2e3ea77b 100644
--- a/dev-python/html5lib/html5lib-1.2_pre20240221.ebuild
+++ b/dev-python/html5lib/html5lib-1.2_pre20240221.ebuild
@@ -40,6 +40,10 @@ RDEPEND="
        >=dev-python/webencodings-0.5.1[${PYTHON_USEDEP}]
 "
 
+PATCHES=(
+       "${FILESDIR}"/${PN}-1.2_pre20240221-py314.patch
+)
+
 EPYTEST_PLUGINS=( pytest-expect )
 distutils_enable_tests pytest
 

Reply via email to