From d1e3eb8faa09741a67cc56a0ff6d5332a7bc6068 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sun, 27 Aug 2017 20:07:13 +0200 Subject: [PATCH] dev-python/pycparser: Backport upstream -OO patch, #628386 --- .../pycparser/files/pycparser-2.18-OO.patch | 56 +++++++++++++++++++ dev-python/pycparser/pycparser-2.18-r1.ebuild | 4 ++ 2 files changed, 60 insertions(+) create mode 100644 dev-python/pycparser/files/pycparser-2.18-OO.patch diff --git a/dev-python/pycparser/files/pycparser-2.18-OO.patch b/dev-python/pycparser/files/pycparser-2.18-OO.patch new file mode 100644 index 000000000000..ae42b2b9bd1d --- /dev/null +++ b/dev-python/pycparser/files/pycparser-2.18-OO.patch @@ -0,0 +1,56 @@ +From 673accec311a027c22b0718d753f8da922915305 Mon Sep 17 00:00:00 2001 +From: Eli Bendersky +Date: Thu, 13 Jul 2017 20:25:29 -0700 +Subject: [PATCH] Address an import of pycparser in -OO mode. + +In this mode there are no docstrings; we don't want an instantiation of CParser +to fail, though it won't actually work correctly if used. + +See #197 and #198 +--- + pycparser/plyparser.py | 21 +++++++++++++++++++-- + 1 file changed, 19 insertions(+), 2 deletions(-) + +diff --git a/pycparser/plyparser.py b/pycparser/plyparser.py +index af91922..b6640fa 100644 +--- a/pycparser/plyparser.py ++++ b/pycparser/plyparser.py +@@ -8,6 +8,7 @@ + # License: BSD + #----------------------------------------------------------------- + ++import warnings + + class Coord(object): + """ Coordinates of a syntactic element. Consists of: +@@ -87,12 +88,28 @@ def template(cls): + + See `parameterized` for more information on parameterized rules. + """ ++ issued_nodoc_warning = False + for attr_name in dir(cls): + if attr_name.startswith('p_'): + method = getattr(cls, attr_name) + if hasattr(method, '_params'): +- delattr(cls, attr_name) # Remove template method +- _create_param_rules(cls, method) ++ # Remove the template method ++ delattr(cls, attr_name) ++ # Create parameterized rules from this method; only run this if ++ # the method has a docstring. This is to address an issue when ++ # pycparser's users are installed in -OO mode which strips ++ # docstrings away. ++ # See: https://github.com/eliben/pycparser/pull/198/ and ++ # https://github.com/eliben/pycparser/issues/197 ++ # for discussion. ++ if method.__doc__ is not None: ++ _create_param_rules(cls, method) ++ elif not issued_nodoc_warning: ++ warnings.warn( ++ 'parsing methods must have __doc__ for pycparser to work properly', ++ RuntimeWarning, ++ stacklevel=2) ++ issued_nodoc_warning = True + return cls + + diff --git a/dev-python/pycparser/pycparser-2.18-r1.ebuild b/dev-python/pycparser/pycparser-2.18-r1.ebuild index 3fb094f6ff3f..9cbbb4ac2e8a 100644 --- a/dev-python/pycparser/pycparser-2.18-r1.ebuild +++ b/dev-python/pycparser/pycparser-2.18-r1.ebuild @@ -21,6 +21,10 @@ DEPEND="${RDEPEND} dev-python/setuptools[${PYTHON_USEDEP}] test? ( dev-python/nose[${PYTHON_USEDEP}] )" +PATCHES=( + "${FILESDIR}"/pycparser-2.18-OO.patch +) + python_prepare_all() { # remove the original files to guarantee their regen rm pycparser/{c_ast,lextab,yacctab}.py || die -- 2.26.2