From 4e897198d1e9b6685bf3bd89d5caddd0dcf345d3 Mon Sep 17 00:00:00 2001 From: Jacek Konieczny Date: Wed, 25 Nov 2015 19:27:12 +0100 Subject: [PATCH] Python template cleanup and update - drop rarely used code - separate pure-python and extension module templates - use py_build/py_install macros --- python-ext.spec | 144 ++++++++++++++++++++++++++++++++++++++++++++++++ python.spec | 73 ++++++++---------------- 2 files changed, 166 insertions(+), 51 deletions(-) create mode 100644 python-ext.spec diff --git a/python-ext.spec b/python-ext.spec new file mode 100644 index 0000000..284784f --- /dev/null +++ b/python-ext.spec @@ -0,0 +1,144 @@ +# +# This is template for python extension modules (including compiled C code) +# use template-specs/python.spec for pure python packages +# +# Conditional build: +%bcond_without doc # don't build doc +%bcond_without tests # do not perform "make test" +%bcond_without python2 # CPython 2.x module +%bcond_without python3 # CPython 3.x module + +%define module template +Summary: - +Summary(pl.UTF-8): - +# Name must match the python module/package name (as in 'import' statement) +Name: python-%{module} +Version: _ +Release: 0.1 +License: - (enter GPL/GPL v2/GPL v3/LGPL/BSD/BSD-like/other license name here) +Group: Libraries/Python +Source0: https://pypi.python.org/packages/source/M/MODULE/%{module}-%{version}.tar.gz +# Source0-md5: - +#URL: https://pypi.python.org/pypi/MODULE +URL: - +BuildRequires: rpm-pythonprov +# for the py_build, py_install macros +BuildRequires: rpmbuild(macros) >= 1.710 +%if %{with python2} +BuildRequires: python-devel +#BuildRequires: python-setuptools +%endif +%if %{with python3} +BuildRequires: python3-devel +#BuildRequires: python3-setuptools +%endif +# when using /usr/bin/env or other in-place substitutions +#BuildRequires: sed >= 4.0 +# replace with other requires if defined in setup.py +Requires: python-modules +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +%description + +%description -l pl.UTF-8 + +%package -n python3-%{module} +Summary: - +Summary(pl.UTF-8): - +Group: Libraries/Python +Requires: python3-modules + +%description -n python3-%{module} + +%description -n python3-%{module} -l pl.UTF-8 + +%package apidocs +Summary: %{module} API documentation +Summary(pl.UTF-8): Dokumentacja API %{module} +Group: Documentation + +%description apidocs +API documentation for %{module}. + +%description apidocs -l pl.UTF-8 +Dokumentacja API %{module}. + +%prep +%setup -q -n %{module}-%{version} + +# fix #!/usr/bin/env python -> #!/usr/bin/python: +#%{__sed} -i -e '1s,^#!.*python,#!%{__python},' %{name}.py + +%build +%if %{with python2} +%py_build %{?with_tests:test} +%endif + +%if %{with python3} +%py3_build %{?with_tests:test} +%endif + +%if %{with doc} +cd docs +%{__make} -j1 html +rm -rf _build/html/_sources +%endif + +%install +rm -rf $RPM_BUILD_ROOT + +%if %{with python2} +%py_install + +%py_postclean +%endif + +%if %{with python3} +%py3_install +%endif + +# in case there are examples provided +%if %{with python2} +install -d $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version} +cp -a examples/* $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version} +%endif +%if %{with python3} +install -d $RPM_BUILD_ROOT%{_examplesdir}/python3-%{module}-%{version} +cp -a examples/* $RPM_BUILD_ROOT%{_examplesdir}/python3-%{module}-%{version} +find $RPM_BUILD_ROOT%{_examplesdir}/python3-%{module}-%{version} -name '*.py' \ + | xargs sed -i '1s|^#!.*python\b|#!%{__python3}|' +%endif + +%clean +rm -rf $RPM_BUILD_ROOT + +%if %{with python2} +%files +%defattr(644,root,root,755) +%doc AUTHORS CREDITS ChangeLog NEWS README THANKS TODO +%dir %{py_sitedir}/%{module} +%{py_sitedir}/%{module}/*.py[co] +%attr(755,root,root) %{py_sitedir}/%{module}/*.so +%if "%{py_ver}" > "2.4" +%{py_sitedir}/%{module}-%{version}-py*.egg-info +%endif +%{_examplesdir}/%{name}-%{version} +%endif + +%if %{with python3} +%files -n python3-%{module} +%defattr(644,root,root,755) +%doc AUTHORS CHANGES LICENSE +%dir %{py3_sitedir}/%{module} +%{py3_sitedir}/%{module}/*.py +%attr(755,root,root) %{py3_sitedir}/%{module}/*.so +%{py3_sitedir}/%{module}/__pycache__ +%{py3_sitedir}/%{module}-%{version}-py*.egg-info +%{_examplesdir}/python3-%{module}-%{version} +%endif + +%if %{with doc} +%files apidocs +%defattr(644,root,root,755) +%doc docs/_build/html/* +%endif diff --git a/python.spec b/python.spec index 6139837..7f008d6 100644 --- a/python.spec +++ b/python.spec @@ -1,6 +1,10 @@ # +# This is template for pure python modules (noarch) +# use template-specs/python-ext.spec for binary python packages +# +# # Conditional build: -%bcond_without doc # don't build doc +%bcond_without doc # don't build doc %bcond_without tests # do not perform "make test" %bcond_without python2 # CPython 2.x module %bcond_without python3 # CPython 3.x module @@ -14,31 +18,26 @@ Version: _ Release: 0.1 License: - (enter GPL/GPL v2/GPL v3/LGPL/BSD/BSD-like/other license name here) Group: Libraries/Python -Source0: %{name}-%{version}.tar.gz +Source0: https://pypi.python.org/packages/source/M/MODULE/%{module}-%{version}.tar.gz # Source0-md5: - +#URL: https://pypi.python.org/pypi/MODULE URL: - -# remove BR: python-devel for 'noarch' packages. BuildRequires: rpm-pythonprov -# if py_postclean is used -BuildRequires: rpmbuild(macros) >= 1.219 -# if py3* macros are used -BuildRequires: rpmbuild(macros) >= 1.612 -# when using /usr/bin/env or other in-place substitutions -#BuildRequires: sed >= 4.0 -# when python3 present +# for the py_build, py_install macros +BuildRequires: rpmbuild(macros) >= 1.710 %if %{with python2} -BuildRequires: python-devel -BuildRequires: python-setuptools +BuildRequires: python-modules +#BuildRequires: python-setuptools %endif %if %{with python3} -BuildRequires: python3-devel BuildRequires: python3-modules -BuildRequires: python3-setuptools +#BuildRequires: python3-setuptools %endif -# Below Rs only work for main package (python2) -#Requires: python-libs +# when using /usr/bin/env or other in-place substitutions +#BuildRequires: sed >= 4.0 +# replace with other requires if defined in setup.py Requires: python-modules -#BuildArch: noarch +BuildArch: noarch BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) %description @@ -72,24 +71,13 @@ Dokumentacja API %{module}. # fix #!/usr/bin/env python -> #!/usr/bin/python: #%{__sed} -i -e '1s,^#!.*python,#!%{__python},' %{name}.py -# setup copy of source in py3 dir -set -- * -install -d py3 -cp -a "$@" py3 - %build %if %{with python2} -# CC/CFLAGS is only for arch packages - remove on noarch packages -CC="%{__cc}" \ -CFLAGS="%{rpmcppflags} %{rpmcflags}" \ -%{__python} setup.py build --build-base build-2 %{?with_tests:test} +%py_build %{?with_tests:test} %endif %if %{with python3} -# CC/CFLAGS is only for arch packages - remove on noarch packages -CC="%{__cc}" \ -CFLAGS="%{rpmcppflags} %{rpmcflags}" \ -%{__python3} setup.py build --build-base build-3 %{?with_tests:test} +%py3_build %{?with_tests:test} %endif %if %{with doc} @@ -102,21 +90,13 @@ rm -rf _build/html/_sources rm -rf $RPM_BUILD_ROOT %if %{with python2} -%{__python} setup.py \ - build --build-base build-2 \ - install --skip-build \ - --optimize=2 \ - --root=$RPM_BUILD_ROOT +%py_install %py_postclean %endif %if %{with python3} -%{__python3} setup.py \ - build --build-base build-3 \ - install --skip-build \ - --optimize=2 \ - --root=$RPM_BUILD_ROOT +%py3_install %endif # in case there are examples provided @@ -131,13 +111,6 @@ find $RPM_BUILD_ROOT%{_examplesdir}/python3-%{module}-%{version} -name '*.py' \ | xargs sed -i '1s|^#!.*python\b|#!%{__python3}|' %endif -# when files are installed in other way that standard 'setup.py -# they need to be (re-)compiled -## change %{py_sitedir} to %{py_sitescriptdir} for 'noarch' packages! -#%%py_ocomp $RPM_BUILD_ROOT%{py_sitedir} -#%%py_comp $RPM_BUILD_ROOT%{py_sitedir} -#%%py_postclean - %clean rm -rf $RPM_BUILD_ROOT @@ -145,11 +118,9 @@ rm -rf $RPM_BUILD_ROOT %files %defattr(644,root,root,755) %doc AUTHORS CREDITS ChangeLog NEWS README THANKS TODO -# change %{py_sitedir} to %{py_sitescriptdir} for 'noarch' packages! -%{py_sitedir}/*.py[co] -%attr(755,root,root) %{py_sitedir}/*.so +%{py_sitescriptdir}/%{module} %if "%{py_ver}" > "2.4" -%{py_sitedir}/%{module}-%{version}-py*.egg-info +%{py_sitescriptdir}/%{module}-%{version}-py*.egg-info %endif %{_examplesdir}/%{name}-%{version} %endif -- 2.44.0