%global with_python3 1 #%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())")} 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