Add compatibility with ply post-3.11 version
This commit is contained in:
parent
6f3d2e3007
commit
294ccdf9b0
2 changed files with 99 additions and 0 deletions
92
pycparser-ply-post-3.11-compat.patch
Normal file
92
pycparser-ply-post-3.11-compat.patch
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
From 823653a55b9c426813c85f075bcd28d412ba4d36 Mon Sep 17 00:00:00 2001
|
||||
From: Charalampos Stratakis <cstratak@redhat.com>
|
||||
Date: Tue, 13 Jan 2026 19:08:07 +0100
|
||||
Subject: [PATCH] Add compatibility with ply post-3.11 version
|
||||
|
||||
ply removed table caching parameters (optimize, lextab, tabmodule,
|
||||
outputdir, nowarn) in its post-3.11 refactoring. Detect supported
|
||||
parameters at runtime and omit unsupported ones.
|
||||
|
||||
Also suppress parser generation warnings in the new ply path
|
||||
since the tables are now generated at runtime instead of loaded
|
||||
from cache.
|
||||
|
||||
This change fixes the compatibility issues for distros that might
|
||||
unbundle ply and have it updated past its last 3.11 release.
|
||||
---
|
||||
pycparser/_build_tables.py | 8 ++++++--
|
||||
pycparser/c_lexer.py | 6 ++++++
|
||||
pycparser/c_parser.py | 23 ++++++++++++++++-------
|
||||
3 files changed, 28 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/pycparser/_build_tables.py b/pycparser/_build_tables.py
|
||||
index 4f37107..4d07812 100644
|
||||
--- a/pycparser/_build_tables.py
|
||||
+++ b/pycparser/_build_tables.py
|
||||
@@ -35,6 +35,10 @@ c_parser.CParser(
|
||||
#
|
||||
importlib.invalidate_caches()
|
||||
|
||||
-import lextab
|
||||
-import yacctab
|
||||
+try:
|
||||
+ import lextab
|
||||
+ import yacctab
|
||||
+except ImportError:
|
||||
+ # ply post-3.11 doesn't generate table modules
|
||||
+ pass
|
||||
import c_ast
|
||||
diff --git a/pycparser/c_lexer.py b/pycparser/c_lexer.py
|
||||
index 135826d..3b96d3f 100644
|
||||
--- a/pycparser/c_lexer.py
|
||||
+++ b/pycparser/c_lexer.py
|
||||
@@ -62,6 +62,12 @@ class CLexer(object):
|
||||
manual warns against calling lex.lex inside
|
||||
__init__
|
||||
"""
|
||||
+ # ply removed optimize/lextab/nowarn/outputdir after 3.11
|
||||
+ if 'lextab' not in lex.lex.__code__.co_varnames:
|
||||
+ kwargs.pop('optimize', None)
|
||||
+ kwargs.pop('lextab', None)
|
||||
+ kwargs.pop('nowarn', None)
|
||||
+ kwargs.pop('outputdir', None)
|
||||
self.lexer = lex.lex(object=self, **kwargs)
|
||||
|
||||
def reset_lineno(self):
|
||||
diff --git a/pycparser/c_parser.py b/pycparser/c_parser.py
|
||||
index bb123ac..43c244e 100644
|
||||
--- a/pycparser/c_parser.py
|
||||
+++ b/pycparser/c_parser.py
|
||||
@@ -106,13 +106,22 @@ class CParser(PLYParser):
|
||||
for rule in rules_with_opt:
|
||||
self._create_opt_rule(rule)
|
||||
|
||||
- self.cparser = yacc.yacc(
|
||||
- module=self,
|
||||
- start='translation_unit_or_empty',
|
||||
- debug=yacc_debug,
|
||||
- optimize=yacc_optimize,
|
||||
- tabmodule=yacctab,
|
||||
- outputdir=taboutputdir)
|
||||
+ # ply removed tabmodule/outputdir after 3.11
|
||||
+ if 'tabmodule' in yacc.yacc.__code__.co_varnames:
|
||||
+ self.cparser = yacc.yacc(
|
||||
+ module=self,
|
||||
+ start='translation_unit_or_empty',
|
||||
+ debug=yacc_debug,
|
||||
+ optimize=yacc_optimize,
|
||||
+ tabmodule=yacctab,
|
||||
+ outputdir=taboutputdir)
|
||||
+ else:
|
||||
+ self.cparser = yacc.yacc(
|
||||
+ module=self,
|
||||
+ start='translation_unit_or_empty',
|
||||
+ debug=yacc_debug,
|
||||
+ optimize=yacc_optimize,
|
||||
+ errorlog=yacc.NullLogger())
|
||||
|
||||
# Stack of scopes for keeping track of symbols. _scope_stack[-1] is
|
||||
# the current (topmost) scope. Each scope is a dictionary that
|
||||
--
|
||||
2.52.0
|
||||
|
||||
|
|
@ -16,6 +16,13 @@ Source1: pycparser-0.91.1-remove-relative-sys-path.py
|
|||
# package to prevent "yacc table file version is out of date" problem.
|
||||
Patch100: pycparser-unbundle-ply.patch
|
||||
|
||||
# This is Fedora-specific. ply has been archived upstream and pycparser
|
||||
# bundles a specific working version of it, but in Fedora we debundle it,
|
||||
# so this patch makes it compatible with the ply post 3.11 version commits.
|
||||
# Upstream prefers the downstream approach, see:
|
||||
# https://github.com/eliben/pycparser/issues/588
|
||||
Patch200: pycparser-ply-post-3.11-compat.patch
|
||||
|
||||
BuildArch: noarch
|
||||
|
||||
BuildRequires: python3-devel
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue