Update to 2.9.0 (close RHBZ#2310247)

This commit is contained in:
Benjamin A. Beasley 2024-09-15 20:05:40 -04:00
commit ded4fd5129
4 changed files with 133 additions and 32 deletions

View file

@ -1,19 +1,34 @@
%bcond tests 1
Name: python-cramjam
Version: 2.8.3
Version: 2.9.0
Release: %autorelease
Summary: Thin Python bindings to de/compression algorithms in Rust
# SPDX
License: MIT
URL: https://github.com/milesgranger/cramjam
# The PyPI sdist is structured like the git repository, but with pyproject.toml
# moved to the top level from cramjam-python/ and
# manifest-path = "cramjam-python/Cargo.toml"
# added to the [tool.maturin] section. We find it easiest to just build from
# the GitHub source archive.
Source: %{url}/archive/v%{version}/cramjam-%{version}.tar.gz
%if !%{defined commit}
# This handles pre-release versioning:
%global srcversion %(echo '%{version}' | tr -d '~')
# Future PyPI sdists should not include benchmark data (some of which has
# complicated or unclear license status). See: “Consider excluding benchmarks
# from PyPI sdists” https://github.com/milesgranger/cramjam/issues/178
Source: %{pypi_source cramjam %{srcversion}}
%else
%global srcversion %{commit}
# For snapshots, we must filter the source archive from GitHub using the script
# in Source1, since some of the benchmark data has complicated or unclear
# license status.
Source0: cramjam-%{commit}-filtered.tar.gz
# ./get_source ${COMMIT} (or ${TAG})
Source1: get_source
%endif
# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
ExcludeArch: %{ix86}
@ -22,6 +37,15 @@ BuildRequires: python3-devel
BuildRequires: tomcli
BuildRequires: cargo-rpm-macros >= 24
%if %{with tests}
# These (along with some unwanted dependencies like linters) are listed in the
# dev extra in pyproject.toml.
BuildRequires: %{py3_dist numpy}
BuildRequires: %{py3_dist pytest}
BuildRequires: %{py3_dist pytest-xdist}
BuildRequires: %{py3_dist hypothesis}
%endif
%global common_description %{expand:
%{summary}.}
@ -51,65 +75,89 @@ License: %{shrink:
%prep
%autosetup -n cramjam-%{version}
%autosetup -n cramjam-%{srcversion}
# Do not strip the compiled Python module; we need useful debuginfo. Upstream
# set this intentionally, so this makes sense to keep downstream-only.
tomcli set cramjam-python/pyproject.toml false 'tool.maturin.strip'
# Downstream-only: patch out linters/formatters/etc. from the “dev” extra so we
# can use it to generate test dependencies.
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_linters
tomcli set cramjam-python/pyproject.toml lists delitem --type regex \
'project.optional-dependencies.dev' '(black)\b.*'
tomcli set pyproject.toml false 'tool.maturin.strip'
tomcli set pyproject.toml false 'profile.release.strip'
# Downstream-only: patch out the generate-import-lib feature, which is only
# relevant on Windows, and which depends on the corresponding pyo3 feature
# which is not packaged for that reason.
tomcli set cramjam-python/Cargo.toml del 'features.generate-import-lib'
tomcli set Cargo.toml del 'features.generate-import-lib'
# Remove bundled rust-libcramjam and the sources for cramjam-cli, which is
# versioned and released separately. Keep only the contents of cramjam-python/
# and the LICENSE file.
find . -mindepth 1 -maxdepth 1 ! -type d ! -name LICENSE -print -delete
find . -mindepth 1 -maxdepth 1 -type d ! -name cramjam-python \
-exec rm -rv '{}' '+'
# Downstream-only: remove all the static-linking features, and make the
# dynamic-linking ones default, as we do in rust-libcramjam.
static_features="$(
tomcli get Cargo.toml features -F newline-keys |
grep -E '.-static$' |
tr '\n' ' '
)"
for sf in ${static_features}
do
tomcli set Cargo.toml del "features.${sf}"
if ! echo "${sf}" | grep -E '^use-system-' >/dev/null
then
binding="$(echo "${sf}" | sed -r 's/-static//')"
tomcli set Cargo.toml lists replace --type regex \
"features.${binding}" "${binding}-static" "${binding}-shared"
fi
done
# Downstream-only: patch out the wasm-compat feature, which requires an
# unavailable blosc2 crate feature.
tomcli set Cargo.toml del 'features.wasm32-compat'
cd cramjam-python
%cargo_prep
%generate_buildrequires
cd cramjam-python
%pyproject_buildrequires %{?with_tests:-x dev}
%pyproject_buildrequires
%cargo_generate_buildrequires
%build
export RUSTFLAGS='%{build_rustflags}'
cd cramjam-python
%cargo_license_summary
%{cargo_license} > ../LICENSES.dependencies
%{cargo_license} > LICENSES.dependencies
%pyproject_wheel
%install
cd cramjam-python
%pyproject_install
%pyproject_save_files cramjam
%check
cd cramjam-python
%pyproject_check_import
%if %{with tests}
%pytest -v -n auto --ignore-glob='benchmarks/*'
%ifarch s390x
# Even after serious effort by upstream (see
# https://github.com/milesgranger/blosc2-rs/issues/23), several blosc2-rs tests
# still fail on s390x, and therefore blosc2-related tests may also fail in this
# package. Making this package ExcludeArch would have a ripple effect on
# a whole tree of packages that depend on it, and which probably do not even
# use its blosc2 support. We consider that outcome even worse than shipping
# broken blosc2 support on s390x. Note that the endianness issues are probably
# in the C blosc2 library (and that the blosc2 package ignores any and all
# test failures on s390x), and see also:
# https://github.com/Blosc/c-blosc2/issues/467.
#
# […]
# E cramjam.DecompressionError: Blosc2(InvalidHeader)
# […]
# tests/test_variants.py:55: DecompressionError
k="${k-}${k+ and }not test_variants_different_dtypes[blosc2]"
%endif
%pytest -k "${k-}" -v -n auto
%endif
%files -n python3-cramjam -f %{pyproject_files}
%license LICENSE LICENSES.dependencies
%doc cramjam-python/README.md
%doc README.md
%changelog