python-pyrsistent/python-pyrsistent.spec
2022-11-03 09:22:54 -04:00

131 lines
3.7 KiB
RPMSpec

# Sphinx-generated HTML documentation is not suitable for packaging; see
# https://bugzilla.redhat.com/show_bug.cgi?id=2006555 for discussion.
#
# We can generate PDF documentation as a substitute.
%bcond_without doc_pdf
# Upstream has not yet pushed the tag for v0.19.2, but it is clear which commit
# corresponds to the PyPI release. Therefore, this is not treated as a snapshot
# from a package-versioning perspective.
#
# https://github.com/tobgu/pyrsistent/issues/262#issuecomment-1302000278
%global commit 29f5ac97f1356c82dc44dfe4e5a46cc3e9e91a4c
Name: python-pyrsistent
Summary: Persistent/Functional/Immutable data structures
Version: 0.19.2
Release: %autorelease
# The entire source is (SPDX) MIT, except pyrsistent/_toolz.py which is BSD-3-Clause.
License: MIT AND BSD-3-Clause
URL: https://github.com/tobgu/pyrsistent/
#Source0: %%{url}/archive/v%%{version}/pyrsistent-%%{version}.tar.gz
Source0: %{url}/archive/%{commit}/pyrsistent-%{commit}.tar.gz
BuildRequires: python3-devel
BuildRequires: gcc
# For Sphinx documentation
%if %{with doc_pdf}
BuildRequires: make
BuildRequires: python3-sphinx-latex
BuildRequires: latexmk
%endif
# ============================================================================
# From setup_requires in setup.py, when tests are to be executed:
BuildRequires: python3dist(pytest-runner)
# Note that pyrsistent/_toolz.py contains a bit of code ported from toolz, but
# not enough to constitute a bundled dependency.
%global common_description %{expand:
Pyrsistent is a number of persistent collections (by some referred to as
functional data structures). Persistent in the sense that they are
immutable.
All methods on a data structure that would normally mutate it instead
return a new copy of the structure containing the requested updates. The
original structure is left untouched.}
%description %{common_description}
%package -n python3-pyrsistent
Summary: %{summary}
%description -n python3-pyrsistent %{common_description}
%package doc
Summary: Documentation for pyrsistent
# The Sphinx documentation does contain content based on pyrsistent/_toolz.py,
# so the full License carries over from the base package.
BuildArch: noarch
%description doc %{common_description}
%prep
#%%autosetup -n pyrsistent-%%{version}
%autosetup -n pyrsistent-%{commit}
# Loosen exact-version pins in requirements.txt; we must tolerate newer
# versions and use what is packaged.
#
# We do not need:
# - memory-profiler or psutil, since we are not running the memorytest*
# environment from tox.ini
# - pyperform, since we are not running the benchmarks from
# performance_suites/
# - tox, since we are not using tox to run the tests
# - twine, since it is for maintainer PyPI uploads
sed -r \
-e 's/==/>=/' \
-e '/\b(memory-profiler|psutil|pyperform|tox|twine)\b/d' \
requirements.txt | tee requirements-filtered.txt
%generate_buildrequires
%pyproject_buildrequires -r requirements-filtered.txt
%build
%pyproject_wheel
# Default SPHINXOPTS are '-W -n', but -W turns warnings into errors and there
# are some warnings. We want to build the documentation as best we can anyway.
# Additionally, we parallelize sphinx-build.
%if %{with doc_pdf}
PYTHONPATH="${PWD}" %make_build -C docs latex SPHINXOPTS='-n %{?_smp_mflags}'
%make_build -C docs/build/latex LATEXMKOPTS='-quiet'
%endif
%install
%pyproject_install
%pyproject_save_files pyrsistent _pyrsistent_version pvectorc
%check
# # See tox.ini:
%pytest
%pytest --doctest-modules pyrsistent
%files -n python3-pyrsistent -f %{pyproject_files}
%files doc
%license LICENSE.mit
%doc CHANGES.txt
%doc README.rst
%if %{with doc_pdf}
%doc docs/build/latex/Pyrsistent.pdf
%endif
%changelog
%autochangelog