python-pycparser: bump to 3.0

v3.0 removes the dependency on PLY by rewriting pycparser with a
hand-written lexer and recursive-descent parser for C. No API changes
or functionality changes - the same AST is produced as before.

Other changes:
- Drop EOL Python 3.8 and 3.9 support (minimum now 3.10)
- Add support for Python 3.14

Since PLY is no longer used:
- Remove python-ply from PKG_BUILD_DEPENDS and HOST_BUILD_DEPENDS
- Remove +python3-ply from package DEPENDS
- Remove 001-use-external-ply.patch (no longer needed)

Full release notes:
https://github.com/eliben/pycparser/releases/tag/release_v3.00

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
This commit is contained in:
Alexandru Ardelean
2026-03-23 18:39:26 +00:00
committed by Alexandru Ardelean
parent 10b8f04e3e
commit a7f33e7daf
3 changed files with 36 additions and 43 deletions
+5 -8
View File
@@ -8,11 +8,11 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=python-pycparser
PKG_VERSION:=2.23
PKG_VERSION:=3.0
PKG_RELEASE:=1
PYPI_NAME:=pycparser
PKG_HASH:=78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2
PKG_HASH:=600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
@@ -20,15 +20,13 @@ PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_BUILD_DEPENDS:= \
python3/host \
python-setuptools/host \
python-ply/host # ply==3.10
python-setuptools/host
HOST_BUILD_DEPENDS:= \
python3/host \
python-setuptools/host \
python-build/host \
python-installer/host \
python-wheel/host \
python-ply/host
python-wheel/host
include ../pypi.mk
include $(INCLUDE_DIR)/package.mk
@@ -43,8 +41,7 @@ define Package/python3-pycparser
TITLE:=C parser in Python
URL:=https://github.com/eliben/pycparser
DEPENDS:= \
+python3-light \
+python3-ply
+python3-light
endef
define Package/python3-pycparser/description
@@ -1,35 +0,0 @@
--- a/pycparser/c_lexer.py
+++ b/pycparser/c_lexer.py
@@ -8,8 +8,8 @@
#------------------------------------------------------------------------------
import re
-from .ply import lex
-from .ply.lex import TOKEN
+from ply import lex
+from ply.lex import TOKEN
class CLexer(object):
--- a/pycparser/c_parser.py
+++ b/pycparser/c_parser.py
@@ -6,7 +6,7 @@
# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#------------------------------------------------------------------------------
-from .ply import yacc
+from ply import yacc
from . import c_ast
from .c_lexer import CLexer
--- a/setup.py
+++ b/setup.py
@@ -61,7 +61,7 @@ setup(
'Programming Language :: Python :: 3.13',
],
python_requires=">=3.8",
- packages=['pycparser', 'pycparser.ply'],
+ packages=['pycparser'],
package_data={'pycparser': ['*.cfg']},
cmdclass={'install': install, 'sdist': sdist},
)
+31
View File
@@ -0,0 +1,31 @@
#!/bin/sh
[ "$1" = "python3-pycparser" ] || exit 0
python3 - << EOF
import sys
import pycparser
# aardelean: yes, it's hardcoded here, hopefully we don't get too many;
# but for version 3.0 on pypi.org, pycparser reports 3.00
if "3.0" == "$2" and pycparser.__version__ == "3.00":
pass
elif pycparser.__version__ != "$2":
print("Wrong version: " + pycparser.__version__)
sys.exit(1)
# Test basic parsing of a simple C snippet
parser = pycparser.CParser()
ast = parser.parse("int x = 5;", filename='<none>')
assert ast is not None, "Failed to parse simple C code"
# Verify the AST contains a FileAST node
assert isinstance(ast, pycparser.c_ast.FileAST), \
f"Expected FileAST, got {type(ast)}"
# Test parsing a function declaration
ast2 = parser.parse("int foo(int a, int b) { return a + b; }", filename='<none>')
assert ast2 is not None, "Failed to parse function declaration"
sys.exit(0)
EOF