diff --git a/.gitignore b/.gitignore index 72a1df7..8d7ae02 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,20 @@ /orjson-3.9.10.tar.gz /orjson-3.9.12.tar.gz /orjson-3.9.13.tar.gz -/orjson-3.9.15.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/changelog b/changelog index baad23f..a07230a 100644 --- a/changelog +++ b/changelog @@ -1,9 +1,33 @@ -* Tue Jun 04 2024 Benjamin A. Beasley - 3.9.15-1 -- Update to 3.9.15. Fixes rhbz#2262570. Fixes rhbz#2259025. +* Mon Jul 22 2024 Benjamin A. Beasley - 3.10.6-1 +- Update to 3.10.6. Fixes rhbz#2291190. -* Fri May 24 2024 Benjamin A. Beasley - 3.9.10-2 +* 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. 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 ddddd97..33e673e 100644 --- a/python-orjson.spec +++ b/python-orjson.spec @@ -6,15 +6,43 @@ # 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.10.7 +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} +# 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 @@ -23,13 +51,15 @@ BuildRequires: %{py3_dist pytest-forked} # 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: rust-packaging +BuildRequires: cargo-rpm-macros >= 24 %global _description %{expand: @@ -41,22 +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 (duplicate) +# 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 + (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} @@ -65,28 +113,21 @@ License: %{shrink: %autosetup -p1 -n orjson-%{version} %cargo_prep -# Remove unstable features that require rust nightly; the avx512 feature also -# requires the x86_64 architecture -tomcli-set Cargo.toml del 'features.unstable-simd' -tomcli-set Cargo.toml del 'features.avx512' -# Remove no-panic feature -tomcli-set Cargo.toml del 'features.no-panic' # 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' -# Remove strict dependencies -sed -Ei 's|(version = ")=|\1|' Cargo.toml -# Remove bundled rust crates -rm -r include/cargo -# Remove bundled yyjson. -rm -rv include/yyjson/ +%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 %pyproject_buildrequires %{?with_tests:test/requirements.txt} %cargo_generate_buildrequires @@ -101,7 +142,7 @@ export RUSTFLAGS='%{build_rustflags}' %install %pyproject_install -%pyproject_save_files orjson +%pyproject_save_files -l orjson %check @@ -114,7 +155,6 @@ export RUSTFLAGS='%{build_rustflags}' %files -n python3-orjson -f %{pyproject_files} -%license LICENSE-MIT LICENSE-APACHE LICENSES.dependencies %doc README.md diff --git a/sources b/sources index ea98349..18ca5d3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (orjson-3.10.7.tar.gz) = 3940b76039d6494626e69f9a2a0373779827c6686ab1321411f3b3a5056e0df227b68c9555796ce45f3952fe597c50740934d764f30dcf8bc1c84b2baf4b6631 +SHA512 (orjson-3.11.4-filtered.tar.xz) = 1a457a91dfa1918341acfebcdb86ddf92b5776f166be9dbd16a4253f55140ae0bc90f911ceb3a9b33abd963be22f089aa2764b25e1701691298c0e8840c8225a