From: Alexandru Ardelean Date: Mon, 23 Mar 2026 18:39:26 +0000 (+0000) Subject: python-pycparser: bump to 3.0 X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=a7f33e7daf5f533957ef5540bceabf5d132b5848;p=openwrt-packages.git 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 Signed-off-by: Alexandru Ardelean --- diff --git a/lang/python/python-pycparser/Makefile b/lang/python/python-pycparser/Makefile index 37f5699c6..f03c04403 100644 --- a/lang/python/python-pycparser/Makefile +++ b/lang/python/python-pycparser/Makefile @@ -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 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 diff --git a/lang/python/python-pycparser/patches/001-use-external-ply.patch b/lang/python/python-pycparser/patches/001-use-external-ply.patch deleted file mode 100644 index 0eb243f1a..000000000 --- a/lang/python/python-pycparser/patches/001-use-external-ply.patch +++ /dev/null @@ -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}, - ) diff --git a/lang/python/python-pycparser/test.sh b/lang/python/python-pycparser/test.sh new file mode 100755 index 000000000..ede0560d5 --- /dev/null +++ b/lang/python/python-pycparser/test.sh @@ -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='') +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='') +assert ast2 is not None, "Failed to parse function declaration" + +sys.exit(0) +EOF