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
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
TITLE:=C parser in Python
URL:=https://github.com/eliben/pycparser
DEPENDS:= \
- +python3-light \
- +python3-ply
+ +python3-light
endef
define Package/python3-pycparser/description
+++ /dev/null
---- 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},
- )
--- /dev/null
+#!/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