diff --git a/.gitignore b/.gitignore index 87f5fcf..8d7ae02 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,20 @@ /orjson-3.9.10.tar.gz /orjson-3.9.12.tar.gz /orjson-3.9.13.tar.gz +/orjson-3.10.1.tar.gz +/orjson-3.10.3.tar.gz +/orjson-3.10.6.tar.gz +/orjson-3.10.7.tar.gz +/orjson-3.10.10.tar.gz +/orjson-3.10.11.tar.gz +/orjson-3.10.12.tar.gz +/orjson-3.10.13.tar.gz +/orjson-3.10.14.tar.gz +/orjson-3.10.16.tar.gz +/orjson-3.10.18.tar.gz +/orjson-3.11.0.tar.gz +/orjson-3.11.0-filtered.tar.xz +/orjson-3.11.1-filtered.tar.xz +/orjson-3.11.2-filtered.tar.xz +/orjson-3.11.3-filtered.tar.xz +/orjson-3.11.4-filtered.tar.xz diff --git a/Remove-strict-ahash-version-pin.patch b/Remove-strict-ahash-version-pin.patch deleted file mode 100644 index 569f70f..0000000 --- a/Remove-strict-ahash-version-pin.patch +++ /dev/null @@ -1,25 +0,0 @@ -From db97d953cbe35e6a34372e4a9d4702d3fdd5ddb1 Mon Sep 17 00:00:00 2001 -From: Maxwell G -Date: Thu, 18 Jan 2024 21:07:59 +0000 -Subject: [PATCH] Remove strict ahash version pin - ---- - Cargo.toml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Cargo.toml b/Cargo.toml -index c2cf457..475a1c0 100644 ---- a/Cargo.toml -+++ b/Cargo.toml -@@ -45,7 +45,7 @@ no-panic = [ - yyjson = [] - - [dependencies] --ahash = { version = "=0.8.6", default_features = false, features = ["compile-time-rng"] } -+ahash = { version = "0.8.6", default_features = false, features = ["compile-time-rng"] } - arrayvec = { version = "0.7", default_features = false, features = ["std", "serde"] } - associative-cache = { version = "2", default_features = false } - beef = { version = "0.5", default_features = false, features = ["impl_serde"] } --- -2.43.0 - diff --git a/changelog b/changelog new file mode 100644 index 0000000..a07230a --- /dev/null +++ b/changelog @@ -0,0 +1,61 @@ +* Mon Jul 22 2024 Benjamin A. Beasley - 3.10.6-1 +- Update to 3.10.6. Fixes rhbz#2291190. + +* Fri Jul 19 2024 Fedora Release Engineering - 3.10.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Sat Jun 08 2024 Python Maint - 3.10.3-2 +- Rebuilt for Python 3.13 + +* Sat Jun 01 2024 Benjamin A. Beasley - 3.10.3-1 +- Update to 3.10.3. Fixes rhbz#2278078. + +* Fri May 24 2024 Benjamin A. Beasley - 3.10.1-2 +- Rebuild with Rust 1.78 to fix incomplete debuginfo and backtraces + +* Mon Apr 15 2024 Maxwell G - 3.10.1-1 +- Update to 3.10.1. Fixes rhbz#2264126. + +* Tue Feb 6 2024 Maxwell G - 3.9.13-1 +- Update to 3.9.13. Fixes rhbz#2262570. + +* Fri Jan 26 2024 Fedora Release Engineering - 3.9.12-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jan 22 2024 Fedora Release Engineering - 3.9.12-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Jan 18 2024 Maxwell G - 3.9.12-1 +- Update to 3.9.12. Fixes rhbz#2259025. + +* Wed Nov 22 2023 Maxwell G - 3.9.10-1 +- Update to 3.9.10. Fixes rhbz#2243767. + +* Tue Oct 10 2023 Maxwell G - 3.9.8-1 +- Update to 3.9.8. Fixes rhbz#2229530. + +* Tue Jul 25 2023 Tomáš Hrnčiar - 3.9.2-2 +- Backport patch to add PyType_GetDict for Python 3.12 +- Fixes: rhbz#2220383 + +* Fri Jul 21 2023 Maxwell G - 3.9.2-1 +- Update to 3.9.2. Fixes rhbz#2211703. + +* Fri Jul 21 2023 Maxwell G - 3.8.14-1 +- Update to 3.8.14. + +* Fri Jul 21 2023 Fedora Release Engineering - 3.8.12-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jun 27 2023 Python Maint - 3.8.12-2 +- Rebuilt for Python 3.12 + +* Thu May 18 2023 Maxwell G - 3.8.12-1 +- Update to 3.8.12. +- Use maturin as a build system when available + +* Fri May 5 2023 Maxwell G - 3.8.11-1 +- Update to 3.8.11. Fixes rhbz#2193468. + +* Wed Apr 12 2023 Maxwell G - 3.8.10-1 +- Initial package (rhbz#2184237). diff --git a/get_source b/get_source new file mode 100755 index 0000000..5067989 --- /dev/null +++ b/get_source @@ -0,0 +1,49 @@ +#!/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 data/ due to licensing issues' 1>&2 +TARDIR="$(basename "${ARCHIVE}" '.tar.gz')" +MTIME="$(stat -c '%Y' "${TARDIR}")" +rm -rvf "${TARDIR}/data/" +# Make sure the original mtime is preserved even though we modified the base +# directory by removing something at the top level. +touch -d @"${MTIME}" "${TARDIR}" +FILTERED="$(basename "${ARCHIVE}" .tar.gz)-filtered.tar.xz" +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}/" | + xz -9e > "${FILTERED}" +mv -v "${FILTERED}" "${OUTDIR}" +echo 'Done.' 1>&2 diff --git a/python-orjson.spec b/python-orjson.spec index 539ae9c..33e673e 100644 --- a/python-orjson.spec +++ b/python-orjson.spec @@ -6,21 +6,60 @@ # Specfile compatability: EPEL >= 9 or Fedora >= 37 and RPM >= 4.16 %bcond tests 1 +# Not yet in EPEL10: https://bugzilla.redhat.com/show_bug.cgi?id=2356387 +%bcond pendulum %{undefined el10} Name: python-orjson -Version: 3.9.13 -Release: 1%{?dist} +Version: 3.11.4 +Release: %autorelease Summary: Fast, correct Python JSON library -License: Apache-2.0 OR MIT +# The entire source is (Apache-2.0 OR MIT), except: +# +# MIT: +# - include/yyjson/yyjson.c +# - include/yyjson/yyjson.h +# +# Apache-2.0: +# - src/serialize/writer/str/mod.rs +# - src/serialize/writer/str/sse2.rs +License: (Apache-2.0 OR MIT) AND Apache-2.0 AND MIT URL: https://github.com/ijl/orjson -Source: %{pypi_source orjson} -Patch: Remove-strict-ahash-version-pin.patch +# We must be careful about the source archive. +# +# The PyPI releases have a vendored Rust dependency bundle in include/cargo/, +# which we would remove in %%prep, but which we must still check to make sure +# everything has a license acceptable for distribution in Fedora before +# uploading to the lookaside cache. +# Source: %%{pypi_source orjson} +# The GitHub archives from +# %%{url}/archive/%%{version}/orjson-%%{version}.tar.gz do not have the +# vendored crates, but they contain benchmark data in data/, some of which is +# lacking its license text (e.g. data/blns.txt.xz, which is from +# https://github.com/minimaxir/big-list-of-naughty-strings and should carry the +# corresponding MIT license text), and some of which looks like it might have +# at best unclear license status. Since the benchmark data is potentially +# problematic, we would need to filter the GitHub archives with a script. +Source0: orjson-%{version}-filtered.tar.xz +# ./get_source ${COMMIT} (or ${TAG}) +Source1: get_source BuildRequires: tomcli BuildRequires: python3-devel BuildRequires: %{py3_dist pytest-forked} -BuildRequires: rust-packaging +# Upstream restricts these test dependencies to particular Python interpreter +# versions and architectures, but we would like to run the corresponding tests +# everywhere. +BuildRequires: %{py3_dist numpy} +%if %{with pendulum} +BuildRequires: %{py3_dist pendulum} +%endif +# These are not in tests/requirements.txt, but they enable additional tests +%ifnarch %{ix86} +BuildRequires: %{py3_dist pandas} +%endif +BuildRequires: %{py3_dist psutil} +BuildRequires: cargo-rpm-macros >= 24 %global _description %{expand: @@ -32,19 +71,40 @@ datetimes, and numpy} %package -n python3-orjson Summary: %{summary} +# Output of %%{cargo_license_summary}: +# # (Apache-2.0 OR MIT) AND BSD-3-Clause # Apache-2.0 OR BSL-1.0 # Apache-2.0 OR MIT # BSD-2-Clause OR Apache-2.0 OR MIT +# BSL-1.0 # MIT +# MIT OR Apache-2.0 +# Unlicense OR MIT +# +# Note that this must include the terms of the base package License expression. License: %{shrink: (Apache-2.0 OR MIT) AND - BSD-3-Clause AND + Apache-2.0 AND (Apache-2.0 OR BSL-1.0) AND - (BSD-2-Clause OR Apache-2.0 OR MIT) AND - MIT + (Apache-2.0 OR BSD-2-Clause OR MIT) AND + BSD-3-Clause AND + BSL-1.0 AND + MIT AND + (Unlicense OR MIT) } +# Version from YYJSON_VERSION_STRING in include/yyjson/yyjson.h +# +# Since version 3.11.4, orjson unconditionally uses a bundled copy of the C +# library yyjson, https://github.com/ibireme/yyjson, as the JSON +# deserialization backend. It is forked (customized) and compiled with a +# particular set of options via preprocessor defines (see build.rs), so it is +# not a candidate for unbundling. (Prior to version 3.11.4, this could be +# disabled, and the json crate from the Rust standard library, +# https://docs.rs/json, would be used instead, but this is no longer +# supported.) +Provides: bundled(yyjson) = 0.9.0 %description -n python3-orjson %{_description} @@ -53,15 +113,19 @@ License: %{shrink: %autosetup -p1 -n orjson-%{version} %cargo_prep -# Remove unstable feature that requires rust nightly -tomcli-set Cargo.toml del 'features.unstable-simd' -# Remove no-panic feature -tomcli-set Cargo.toml del 'features.no-panic' -# Remove bundled rust crates -rm -r include/cargo -# Remove bundled yyjson. -rm -rv include/yyjson/ +# Remove unwind feature, which is not useful here: the comment above it says +# “Avoid bundling libgcc on musl.” +tomcli-set Cargo.toml del 'features.unwind' +tomcli-set Cargo.toml del 'dependencies.unwinding' +%if %{without pendulum} +sed -i '/^pendulum\b/d' test/requirements.txt +%endif +# Test dependency on arrow appears spurious +# https://github.com/ijl/orjson/issues/559 +sed -i '/^arrow\b/d' test/requirements.txt +# Remove unpackaged PyPI plugin +sed -i '/pytest-random-order/d' test/requirements.txt %generate_buildrequires @@ -78,63 +142,21 @@ export RUSTFLAGS='%{build_rustflags}' %install %pyproject_install -%pyproject_save_files orjson +%pyproject_save_files -l orjson %check %pyproject_check_import %if %{with tests} # --forked: protect the pytest process against test segfaults -%pytest --forked +# -rs: print the reasons for skipped tests +%pytest --forked -rs %endif %files -n python3-orjson -f %{pyproject_files} -%license LICENSE-MIT LICENSE-APACHE LICENSES.dependencies %doc README.md %changelog -* Tue Feb 6 2024 Maxwell G - 3.9.13-1 -- Update to 3.9.13. Fixes rhbz#2262570. - -* Fri Jan 26 2024 Fedora Release Engineering - 3.9.12-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Mon Jan 22 2024 Fedora Release Engineering - 3.9.12-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Thu Jan 18 2024 Maxwell G - 3.9.12-1 -- Update to 3.9.12. Fixes rhbz#2259025. - -* Wed Nov 22 2023 Maxwell G - 3.9.10-1 -- Update to 3.9.10. Fixes rhbz#2243767. - -* Tue Oct 10 2023 Maxwell G - 3.9.8-1 -- Update to 3.9.8. Fixes rhbz#2229530. - -* Tue Jul 25 2023 Tomáš Hrnčiar - 3.9.2-2 -- Backport patch to add PyType_GetDict for Python 3.12 -- Fixes: rhbz#2220383 - -* Fri Jul 21 2023 Maxwell G - 3.9.2-1 -- Update to 3.9.2. Fixes rhbz#2211703. - -* Fri Jul 21 2023 Maxwell G - 3.8.14-1 -- Update to 3.8.14. - -* Fri Jul 21 2023 Fedora Release Engineering - 3.8.12-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Tue Jun 27 2023 Python Maint - 3.8.12-2 -- Rebuilt for Python 3.12 - -* Thu May 18 2023 Maxwell G - 3.8.12-1 -- Update to 3.8.12. -- Use maturin as a build system when available - -* Fri May 5 2023 Maxwell G - 3.8.11-1 -- Update to 3.8.11. Fixes rhbz#2193468. - -* Wed Apr 12 2023 Maxwell G - 3.8.10-1 -- Initial package (rhbz#2184237). +%autochangelog diff --git a/sources b/sources index b6c529d..18ca5d3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (orjson-3.9.13.tar.gz) = c3fc7ad42a2ea40fa996cec11609c3d72ad3ad42a2ef24d36472bb89e5231ae6288c4ded57ba69074a04244e2e8ab7cf878c26b79bb01d5f6883be18395cd219 +SHA512 (orjson-3.11.4-filtered.tar.xz) = 1a457a91dfa1918341acfebcdb86ddf92b5776f166be9dbd16a4253f55140ae0bc90f911ceb3a9b33abd963be22f089aa2764b25e1701691298c0e8840c8225a