Blob Blame Raw
# Set python3 as default on fedora
%if 0%{?fedora}
%global with_python3 1
%endif

# Set python2 related macros
%if 0%{?rhel} && 0%{?rhel} <= 6
%{!?__python2:  %global __python2 /usr/bin/python2}
%{!?python2_sitearch: %global python2_sitearch %(%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%endif

%global pkgname line_profiler

Name:           python-%{pkgname}
Version:        1.0
Release:        6%{?dist}
Summary:        Line-by-line profiler for python

License:        BSD and Python
URL:            https://github.com/rkern/%{pkgname}
Source0:        https://pypi.python.org/packages/source/l/%{pkgname}/%{pkgname}-%{version}.tar.gz

BuildRequires:  python2-devel
BuildRequires:  python-setuptools
Requires:       python2
Provides:       python2-%{pkgname} = %{version}-%{release}

%description
line_profiler is a module for doing line-by-line profiling of functions. 
kernprof is a convenient script for running either line_profiler or 
the Python standard library's cProfile or profile modules, 
depending on what is available.

%if 0%{?with_python3}
%package -n     python3-%{pkgname}
Summary:        Line-by-line profiler for python3
BuildRequires:  python3-devel
BuildRequires:  python3-setuptools
Requires:       python3
%description -n python3-%{pkgname}
line_profiler is a module for doing line-by-line profiling of functions. 
kernprof is a convenient script for running either line_profiler or 
the Python standard library's cProfile or profile modules, 
depending on what is available.
%endif

%prep
%setup -q -c

%if 0%{?with_python3}
# Prepare python3 directory. Do not use py3dir as it is unclean.
cp -a %{pkgname}-%{version} python3
find python3 -name '*.py' | xargs sed -i '/^#!\/usr\/bin\/env\ python/d'
%endif

find %{pkgname}-%{version} -name '*.py' | xargs sed -i '/^#!\/usr\/bin\/env\ python/d'
rm -rf *.egg-info

%build
# Build with python3
%if 0%{?with_python3}
pushd python3
CFLAGS="$RPM_OPT_FLAGS" %{__python3} setup.py build
popd
%endif

# Build with python2
pushd %{pkgname}-%{version}
CFLAGS="$RPM_OPT_FLAGS" %{__python2} setup.py build
popd

%install
# Install with python3
%if 0%{?with_python3}
pushd python3
%{__python3} setup.py install --skip-build --root=%{buildroot}
mv %{buildroot}%{_bindir}/kernprof %{buildroot}%{_bindir}/kernprof-%{python3_version}
popd
%endif

# Install with python2
pushd %{pkgname}-%{version}
%{__python2} setup.py install --skip-build --root=%{buildroot}
mv %{buildroot}%{_bindir}/kernprof %{buildroot}%{_bindir}/kernprof-%{python2_version}
ln -s %{_bindir}/kernprof-%{python2_version} %{buildroot}%{_bindir}/kernprof 
popd

%check
# Run tests with python3
%if 0%{?with_python3}
pushd python3
PYTHONPATH=%{buildroot}%{python3_sitearch} %{__python3} -m unittest discover -s tests -v
popd
%endif

# Run tests with python2
pushd %{pkgname}-%{version}
PYTHONPATH=%{buildroot}%{python2_sitearch} %{__python2} -m unittest discover -s tests -v
popd

%files
%doc %{pkgname}-%{version}/README.rst
# BSD License
%license %{pkgname}-%{version}/LICENSE.txt
# Python License
%license %{pkgname}-%{version}/LICENSE_Python.txt
%{python2_sitearch}/*
%{_bindir}/kernprof
%{_bindir}/kernprof-%{python2_version}

%if 0%{?with_python3}
%files -n python3-%{pkgname}
%doc %{pkgname}-%{version}/README.rst
# BSD License
%license %{pkgname}-%{version}/LICENSE.txt
# Python License
%license %{pkgname}-%{version}/LICENSE_Python.txt
%exclude %dir %{python3_sitearch}/__pycache__
%{python3_sitearch}/*
%{_bindir}/kernprof-%{python3_version}
%endif

%changelog
* Sat Jul 25 2015 Jackson Isaac <jacksonisaac2008@gmail.com> - 1.0-6
- Add Python License. Exclude __pycache__ in py3 file listing.

* Thu Jul 23 2015 Jackson Isaac <jacksonisaac2008@gmail.com> - 1.0-5
- Remove python2_sitelib definition. Remove ghost from files. 
- Add PYTHONPATH for tests. Run tests for files in tests/

* Wed Jul 22 2015 Jackson Isaac <jacksonisaac2008@gmail.com> - 1.0-4
- Rename kernprof binary instead of symlinking.

* Mon Jul 20 2015 Jackson Isaac <jacksonisaac2008@gmail.com> - 1.0-3
- Do not use py3dir as it is unclean. Use chmod instead of attr.

* Wed Jul 15 2015 Jackson Isaac <jacksonisaac2008@gmail.com> - 1.0-2
- Add compiler flags in build. Create py2 and py3 specific packages.
- Add kernprof script in buildroot for both py2 and py3 versions.

* Wed Jul  8 2015 Jackson Isaac - 1.0-1
- Initial version of line_profiler package