From d4fc98f8e7f71183fec3e9bb3944b0f6a3e6c797 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Tue, 6 Apr 2010 18:45:10 +0000 Subject: [PATCH] python3 support --- python-ply.spec | 70 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/python-ply.spec b/python-ply.spec index b0f3ba4..239bb2e 100644 --- a/python-ply.spec +++ b/python-ply.spec @@ -1,9 +1,11 @@ +%global with_python3 1 + %{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} Name: python-ply Summary: Python Lex-Yacc Version: 3.3 -Release: 1%{?dist} +Release: 2%{?dist} License: BSD Group: System Environment/Libraries URL: http://www.dabeaz.com/ply/ @@ -12,6 +14,11 @@ 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: @@ -26,18 +33,68 @@ essential features: 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} 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 @@ -47,7 +104,18 @@ rm -rf $RPM_BUILD_ROOT %{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 +* Sat Apr 3 2010 David Malcolm - 3.3-2 +- add python3-ply subpackage + * Mon Oct 19 2009 Tom "spot" Callaway - 3.3-1 - update to 3.3