From Fedora Project Wiki

< User:Churchyard

Revision as of 19:44, 17 October 2014 by Churchyard (talk | contribs) (Created page with "== Default Python version macros == For situations when an application (i.e. not a library) is compatible with both Python 3 and Python 2, the default Python version should b...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Default Python version macros

For situations when an application (i.e. not a library) is compatible with both Python 3 and Python 2, the default Python version should be used. Depending on Fedora version the default Python version might differ. For packagers' convenience and better spec readability, the following set of macros is provided:

Macro Fedora >= 22 Fedora <= 21
python_default_version 3 2
__python_default %{__python3} %{__python2}
python_default_sitelib %{python3_sitelib} %{python2_sitelib}
python_default_sitearch %{python3_sitearch} %{python2_sitearch}
python_default_devel python3-devel python2-devel
python_default_prefix python3- python-
python_default_prefix_only3 python3- (empty string)

Example spec file using this approach follows:

Name:           fooapp
Version:        1.0.0
Release:        1%{?dist}
Summary:        This is just an example
License:        MIT
URL:            http://example.com/
Source0:        http://pypi.python.org/packages/source/f/%{name}/%{name}-%{version}.tar.gz
BuildArch:      noarch

# This will be python3-devel or python2-devel:
BuildRequires:  %{python_default_devel}

# This will be python-setuptools or python3-setuptools
BuildRequires:  %{python_default_prefix}setuptools

# This will be python3-pytest or pytest
BuildRequires:  %{python_default_prefix_only3}pytest

# Unfortunately with weird package names, we have to do if/else
%if %{python_default_version} > 2
BuildRequires:  python3-cairo
Requires:       python3-cairo
%else
BuildRequires:  pycairo
Requires:       pycairo
%endif

%description
This is just an example

%prep
%setup -q
# change the shebangs if neccessary
sed -i 's|#!/usr/bin/env python|#!%{__python_default}|g' *.py


%build
%{__python_default} setup.py build

%install
%{__python_default} setup.py install -O1 --skip-build --root %{buildroot}

%files
%doc README.rst LICENSE
%{_bindir}/%{name}
%{python_default_sitelib}/%{name}
%{python_default_sitelib}/%{name}-%{version}-py?.?.egg-info

%changelog
...