From ca5175370c326954f4387acdc6206f1fd6443de7 Mon Sep 17 00:00:00 2001 From: basebuilder_pel7ppc64lebuilder0 Date: Sat, 2 Mar 2019 22:46:11 +0100 Subject: [PATCH] python-ply package created Signed-off-by: basebuilder_pel7ppc64lebuilder0 --- ...Replace-md5-in-signature-calculation.patch | 35 +++++ SPECS/python-ply.spec | 127 ++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 SOURCES/0001-Replace-md5-in-signature-calculation.patch create mode 100644 SPECS/python-ply.spec diff --git a/SOURCES/0001-Replace-md5-in-signature-calculation.patch b/SOURCES/0001-Replace-md5-in-signature-calculation.patch new file mode 100644 index 00000000..49478cc7 --- /dev/null +++ b/SOURCES/0001-Replace-md5-in-signature-calculation.patch @@ -0,0 +1,35 @@ +diff -u ply/yacc.py ply.mine/yacc.py +--- ply/yacc.py 2011-02-18 04:52:28.000000000 +0100 ++++ ply.mine/yacc.py 2017-03-03 16:01:13.609507492 +0100 +@@ -2794,24 +2794,20 @@ + + # Compute a signature over the grammar + def signature(self): ++ parts = [] + try: +- from hashlib import md5 +- except ImportError: +- from md5 import md5 +- try: +- sig = md5() + if self.start: +- sig.update(self.start.encode('latin-1')) ++ parts.append(self.start) + if self.prec: +- sig.update("".join(["".join(p) for p in self.prec]).encode('latin-1')) ++ parts.append(''.join([''.join(p) for p in self.prec])) + if self.tokens: +- sig.update(" ".join(self.tokens).encode('latin-1')) ++ parts.append(' '.join(self.tokens)) + for f in self.pfuncs: + if f[3]: +- sig.update(f[3].encode('latin-1')) +- except (TypeError,ValueError): ++ parts.append(f[3]) ++ except (TypeError, ValueError): + pass +- return sig.digest() ++ return ''.join(parts) + + # ----------------------------------------------------------------------------- + # validate_file() diff --git a/SPECS/python-ply.spec b/SPECS/python-ply.spec new file mode 100644 index 00000000..d189e1f5 --- /dev/null +++ b/SPECS/python-ply.spec @@ -0,0 +1,127 @@ +%if 0%{?fedora} > 12 +%global with_python3 1 +%else +%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())")} +%endif + +Name: python-ply +Summary: Python Lex-Yacc +Version: 3.4 +Release: 11%{?dist} +License: BSD +Group: System Environment/Libraries +URL: http://www.dabeaz.com/ply/ +Source0: http://www.dabeaz.com/ply/ply-%{version}.tar.gz +Patch0: 0001-Replace-md5-in-signature-calculation.patch +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildArch: noarch +BuildRequires: python-devel + +%if 0%{?with_python3} +BuildRequires: /usr/bin/2to3 +BuildRequires: python3-devel +%endif # if with_python3 + +%description +PLY is a straightforward lex/yacc implementation. Here is a list of its +essential features: +* It is implemented entirely in Python. +* It uses LR-parsing which is reasonably efficient and well suited for larger + grammars. +* PLY provides most of the standard lex/yacc features including support + for empty productions, precedence rules, error recovery, and support + for ambiguous grammars. +* PLY is straightforward to use and provides very extensive error checking. +* PLY doesn't try to do anything more or less than provide the basic lex/yacc + functionality. In other words, it's not a large parsing framework or a + component of some larger system. + +%if 0%{?with_python3} +%package -n python3-ply +Summary: Python Lex-Yacc +Group: System Environment/Libraries +Requires: python3-setuptools + +%description -n python3-ply +PLY is a straightforward lex/yacc implementation. Here is a list of its +essential features: +* It is implemented entirely in Python. +* It uses LR-parsing which is reasonably efficient and well suited for larger + grammars. +* PLY provides most of the standard lex/yacc features including support + for empty productions, precedence rules, error recovery, and support + for ambiguous grammars. +* PLY is straightforward to use and provides very extensive error checking. +* PLY doesn't try to do anything more or less than provide the basic lex/yacc + functionality. In other words, it's not a large parsing framework or a + component of some larger system. +%endif # with_python3 + +%prep +%setup -q -n ply-%{version} +%patch0 -p0 +sed -i 's|/usr/local/bin/python|/usr/bin/python|g' example/yply/yply.py +chmod -x example/yply/yply.py example/newclasscalc/calc.py example/classcalc/calc.py example/cleanup.sh + +%if 0%{?with_python3} +rm -rf %{py3dir} +cp -a . %{py3dir} +find %{py3dir} -name '*.py' | xargs sed -i '1s|^#!/usr/bin/python|#!%{__python3}|' + +# The README states: "You should not convert PLY using +# 2to3--it is not necessary and may in fact break the implementation." +# +# However, one of the example files contains python 2 "print" syntax, which +# lead to syntax errors during byte-compilation +# +# So we fix this file with 2to3: +pushd %{py3dir} + 2to3 --write --nobackups ply/cpp.py +popd +%endif # with_python3 + +%build +%{__python} setup.py build + +%if 0%{?with_python3} +pushd %{py3dir} +%{__python3} setup.py build +popd +%endif # with_python3 + +%install +rm -rf $RPM_BUILD_ROOT +%{__python} setup.py install --skip-build --root $RPM_BUILD_ROOT + +%if 0%{?with_python3} +pushd %{py3dir} +%{__python3} setup.py install --skip-build --root $RPM_BUILD_ROOT +popd +%endif # with_python3 + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%doc CHANGES README example/ +%{python_sitelib}/ply/ +%{python_sitelib}/ply*.egg-info + +%if 0%{?with_python3} +%files -n python3-ply +%defattr(-,root,root,-) +%doc CHANGES README example/ +%{python3_sitelib}/ply/ +%{python3_sitelib}/ply*.egg-info +%endif # with_python3 + +%changelog +* Tue Mar 7 2017 Stanislav Laznicka 3.4-11 +- Replace md5 in signature calculation in order to allow use in FIPS + +* Fri Jun 12 2015 Martin Kosek 3.4-10 +- Increase Release number to get a clean upgrade path from EPEL 7 + +* Mon Sep 8 2014 Petr Vobornik 3.4-1 +- Initial package for RHEL 7