diff --git a/.gitignore b/.gitignore index 59c9ea3..8d7ae02 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,22 @@ /orjson-3.9.7.tar.gz /orjson-3.9.8.tar.gz /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/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 bcad5d6..33e673e 100644 --- a/python-orjson.spec +++ b/python-orjson.spec @@ -6,20 +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.10 -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} +# 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: @@ -31,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 # 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 - 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} @@ -52,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 @@ -77,51 +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 -* 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 19aef9a..18ca5d3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (orjson-3.9.10.tar.gz) = 070bbee45ec08b1496b0f92d5b36d278000e33f00af6e45f2857b97c14682887558ca6413789cfebfc96a29d2366be0832a01e5e9a69868ab66d2907f86d999a +SHA512 (orjson-3.11.4-filtered.tar.xz) = 1a457a91dfa1918341acfebcdb86ddf92b5776f166be9dbd16a4253f55140ae0bc90f911ceb3a9b33abd963be22f089aa2764b25e1701691298c0e8840c8225a