diff --git a/.gitignore b/.gitignore index a7a581a..43dc5da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,3 @@ /cramjam-2.8.1.tar.gz /cramjam-2.8.2.tar.gz /cramjam-2.8.3.tar.gz -/cramjam-6068e8bbb8786c9173b2f0a229032b9ed7452b79-filtered.tar.gz -/cramjam-2.8.4.tar.gz -/cramjam-2.9.0rc1.tar.gz -/cramjam-2.9.0.tar.gz -/cramjam-2.9.1.tar.gz -/cramjam-61564e7761e38e5ec55e7939ccd6a276c2c55d11-filtered.tar.gz -/cramjam-cdc7d307d0f592f89b3319a7037fd875a5371ef3-filtered.tar.gz -/cramjam-2.10.0rc1.tar.gz -/cramjam-2.10.0.tar.gz -/cramjam-2.11.0rc2.tar.gz -/cramjam-2.11.0rc3.tar.gz -/cramjam-2.11.0.tar.gz diff --git a/get_source b/get_source deleted file mode 100755 index f2465bf..0000000 --- a/get_source +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh -set -o errexit -set -o nounset - -if [ "$#" != '1' ] -then - cat 1>&2 < Downloading: ${URL}" 1>&2 -curl -L -O "${URL}" - -ARCHIVE="$(find . -mindepth 1 -maxdepth 1 -type f -name '*.tar.gz' -print -quit)" -echo "--> Extracting: $(basename "${ARCHIVE}")" 1>&2 -tar -xzf "${ARCHIVE}" -echo '--> Removing benchmarks/data/ due to licensing issues' 1>&2 -TARDIR="$(basename "${ARCHIVE}" '.tar.gz')" -MTIME="$(stat -c '%Y' "${TARDIR}")" -rm -rvf "${TARDIR}/benchmarks/data/" -# Make sure the original mtime is preserved even if we modified the base -# directory by removing something at the top level. (So far, we didn’t.) -touch -d @"${MTIME}" "${TARDIR}" -FILTERED="$(basename "${ARCHIVE}" .tar.gz)-filtered.tar.gz" -echo "--> Re-archiving: ${FILTERED}" 1>&2 -# https://www.gnu.org/software/tar/manual/html_section/Reproducibility.html -TZ=UTC LC_ALL=C tar \ - --create --verbose \ - --sort=name \ - --format=posix \ - --numeric-owner --owner=0 --group=0 \ - --mode=go+u,go-w \ - --pax-option='delete=atime,delete=ctime' \ - "${TARDIR}/" | - gzip -9 > "${FILTERED}" -mv -v "${FILTERED}" "${OUTDIR}" -echo 'Done.' 1>&2 diff --git a/python-cramjam.spec b/python-cramjam.spec index cb1b1c2..0510bc6 100644 --- a/python-cramjam.spec +++ b/python-cramjam.spec @@ -1,51 +1,30 @@ %bcond tests 1 -#global commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -#global snapdate YYYYMMDD - Name: python-cramjam -Version: 2.11.0 +Version: 2.8.3 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 - -BuildSystem: pyproject -BuildOption(install): -l cramjam - -BuildRequires: tomcli >= 0.8.0 +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 hypothesis} -%endif +# The Python extension module now gets a SONAME of libcramjam.so; we +# must ensure it is not used to generate automatic Provides. See: +# Rust 1.81+ implicitly / automatically sets soname on cdylib targets +# https://bugzilla.redhat.com/show_bug.cgi?id=2314879 +# https://docs.fedoraproject.org/en-US/packaging-guidelines/AutoProvidesAndRequiresFiltering/#_filtering_provides_and_requires_after_scanning +%global __provides_exclude ^libcramjam\\.so.*$ %global common_description %{expand: %{summary}.} @@ -57,6 +36,7 @@ BuildRequires: %{py3_dist hypothesis} Summary: %{summary} # 0BSD OR MIT OR Apache-2.0 # Apache-2.0 +# Apache-2.0 OR MIT # BSD-3-Clause # BSD-3-Clause AND MIT # MIT @@ -74,83 +54,66 @@ License: %{shrink: %description -n python3-cramjam %{common_description} -%prep -a +%prep +%autosetup -n cramjam-%{version} + +# 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.*' + # 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 Cargo.toml del 'features.generate-import-lib' +tomcli set cramjam-python/Cargo.toml del 'features.generate-import-lib' -# Downstream-only: patch out the wasm-compat feature, which is unnecessary and -# would bring in unwanted dependencies -tomcli set Cargo.toml del 'features.wasm32-compat' - -# Downstream-only: patch out the "experimental" feature and all of the features -# related to blosc2 and isa-l support. We only want to build the Python -# extension with the default features, and we only want maturin to check -# dependencies for those features. -blosc2_isal_features="$( - tomcli get Cargo.toml features -F newline-keys | - grep -E 'blosc2|ideflate|igzip|isal|izlib' | - tr '\n' ' ' -)" -for feature in experimental ${blosc2_isal_features} -do - tomcli set Cargo.toml del "features.${feature}" -done - -# 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 +# 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 '{}' '+' +cd cramjam-python %cargo_prep -%generate_buildrequires -a +%generate_buildrequires +cd cramjam-python +%pyproject_buildrequires %{?with_tests:-x dev} %cargo_generate_buildrequires -%build -p +%build +export RUSTFLAGS='%{build_rustflags}' +cd cramjam-python %cargo_license_summary -%{cargo_license} > LICENSES.dependencies +%{cargo_license} > ../LICENSES.dependencies +%pyproject_wheel -%check -a +%install +cd cramjam-python +%pyproject_install +%pyproject_save_files cramjam + + +%check +cd cramjam-python +%pyproject_check_import %if %{with tests} -# Test failures in test_variants_decompress_into with recent hypothesis -# versions: https://github.com/milesgranger/cramjam/issues/201 -# -# It is hard to be really sure what is going on here. The failures are -# concerning, and might (or might not) reflect a serious problem. Nevertheless, -# since the problem appears to be linked to newer hypothesis versions, there’s -# not reason to believe that the package has *new* problems. It *might* have -# newly *revealed* problems. This merits further investigation. -k="${k-}${k+ and }not test_variants_decompress_into" - -# Regression with miniz_oxide>0.8.5 -# https://github.com/milesgranger/cramjam/issues/211 -# Failed: DID NOT RAISE -k="${k-}${k+ and }not test_variants_raise_exception[deflate]" - -%pytest -k "${k-}" --ignore=benchmarks/test_bench.py -v +%pytest -v -n auto --ignore-glob='benchmarks/*' %endif %files -n python3-cramjam -f %{pyproject_files} -%doc README.md +%license LICENSE LICENSES.dependencies +%doc cramjam-python/README.md %changelog diff --git a/sources b/sources index 9b98da9..4dbee90 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (cramjam-2.11.0.tar.gz) = d92446c0c0ef885f3544783caa1f179fd50b6a6290ada011495b7385411527f75a2544c0c8cdc36910c83c879dbac7dd130f4fe8f3dc3b885a84a45286cb3695 +SHA512 (cramjam-2.8.3.tar.gz) = 26e85bcc09eeef9623bf69f0659e33310c6a0152c3b89572db7e7584319790b682af65733bb863e69204ce1cea37b30de530bb7f1c686e98217f2bf52b81f9d4