diff --git a/.gitignore b/.gitignore index 80dc5d3..3510857 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /zstd-1.4.5.1.tar.gz +/zstd-1.5.5.1.tar.gz diff --git a/0003-Port-to-Python-3.11-use-Py_SET_SIZE.patch b/0003-Port-to-Python-3.11-use-Py_SET_SIZE.patch deleted file mode 100644 index e99a9ba..0000000 --- a/0003-Port-to-Python-3.11-use-Py_SET_SIZE.patch +++ /dev/null @@ -1,452 +0,0 @@ -From 3e0333abe56db74dd8d8b2fd0578b16067cdf998 Mon Sep 17 00:00:00 2001 -From: Victor Stinner -Date: Tue, 3 May 2022 12:00:02 +0200 -Subject: [PATCH] Port to Python 3.11: use Py_SET_SIZE() - -On Python 3.11, "Py_SIZE(result) = cSize;" fails with a compiler -error. Since Python 3.9, Py_SET_SIZE() must be used instead: - -* https://docs.python.org/dev/whatsnew/3.11.html#c-api-changes -* https://docs.python.org/dev/c-api/structures.html#c.Py_SIZE - -Add a copy of the pythoncapi_compat.h header file to get -Py_SET_SIZE() on Python 3.8 and older: -https://github.com/pythoncapi/pythoncapi_compat ---- - src/python-zstd.c | 5 +- - src/pythoncapi_compat.h | 393 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 396 insertions(+), 2 deletions(-) - create mode 100644 src/pythoncapi_compat.h - -diff --git a/src/python-zstd.c b/src/python-zstd.c -index f87aa71..6cde04b 100644 ---- a/src/python-zstd.c -+++ b/src/python-zstd.c -@@ -33,6 +33,7 @@ - /* Since 3.8 it is mandatory to use proper type for # formats */ - #define PY_SSIZE_T_CLEAN - #include -+#include "pythoncapi_compat.h" // Py_SET_SIZE() for Python 3.8 and older - - #include "bytesobject.h" - #include "zstd.h" -@@ -116,7 +117,7 @@ static PyObject *py_zstd_compress_mt(PyObject* self, PyObject *args) - Py_CLEAR(result); - return NULL; - } -- Py_SIZE(result) = cSize; -+ Py_SET_SIZE(result, cSize); - } - return result; - } -@@ -280,7 +281,7 @@ static PyObject *py_zstd_compress_old(PyObject* self, PyObject *args) { - PyErr_Format(ZstdError, "Compression error: %s", ZSTD_getErrorName(cSize)); - Py_CLEAR(result); - } else { -- Py_SIZE(result) = cSize + hdr_size; -+ Py_SET_SIZE(result, cSize + hdr_size); - } - } - return result; -diff --git a/src/pythoncapi_compat.h b/src/pythoncapi_compat.h -new file mode 100644 -index 0000000..b4011d2 ---- /dev/null -+++ b/src/pythoncapi_compat.h -@@ -0,0 +1,393 @@ -+// Header file providing new functions of the Python C API to old Python -+// versions. -+// -+// File distributed under the MIT license. -+// Copyright Contributors to the pythoncapi_compat project. -+// -+// Homepage: -+// https://github.com/pythoncapi/pythoncapi_compat -+// -+// Latest version: -+// https://raw.githubusercontent.com/pythoncapi/pythoncapi_compat/master/pythoncapi_compat.h -+// -+// SPDX-License-Identifier: MIT -+ -+#ifndef PYTHONCAPI_COMPAT -+#define PYTHONCAPI_COMPAT -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#include -+#include "frameobject.h" // PyFrameObject, PyFrame_GetBack() -+ -+ -+// Compatibility with Visual Studio 2013 and older which don't support -+// the inline keyword in C (only in C++): use __inline instead. -+#if (defined(_MSC_VER) && _MSC_VER < 1900 \ -+ && !defined(__cplusplus) && !defined(inline)) -+# define inline __inline -+# define PYTHONCAPI_COMPAT_MSC_INLINE -+ // These two macros are undefined at the end of this file -+#endif -+ -+ -+// Cast argument to PyObject* type. -+#ifndef _PyObject_CAST -+# define _PyObject_CAST(op) ((PyObject*)(op)) -+#endif -+#ifndef _PyObject_CAST_CONST -+# define _PyObject_CAST_CONST(op) ((const PyObject*)(op)) -+#endif -+ -+ -+// bpo-42262 added Py_NewRef() to Python 3.10.0a3 -+#if PY_VERSION_HEX < 0x030A00A3 && !defined(Py_NewRef) -+static inline PyObject* _Py_NewRef(PyObject *obj) -+{ -+ Py_INCREF(obj); -+ return obj; -+} -+#define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj)) -+#endif -+ -+ -+// bpo-42262 added Py_XNewRef() to Python 3.10.0a3 -+#if PY_VERSION_HEX < 0x030A00A3 && !defined(Py_XNewRef) -+static inline PyObject* _Py_XNewRef(PyObject *obj) -+{ -+ Py_XINCREF(obj); -+ return obj; -+} -+#define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj)) -+#endif -+ -+ -+// See https://bugs.python.org/issue42522 -+#if !defined(_Py_StealRef) -+static inline PyObject* __Py_StealRef(PyObject *obj) -+{ -+ Py_DECREF(obj); -+ return obj; -+} -+#define _Py_StealRef(obj) __Py_StealRef(_PyObject_CAST(obj)) -+#endif -+ -+ -+// See https://bugs.python.org/issue42522 -+#if !defined(_Py_XStealRef) -+static inline PyObject* __Py_XStealRef(PyObject *obj) -+{ -+ Py_XDECREF(obj); -+ return obj; -+} -+#define _Py_XStealRef(obj) __Py_XStealRef(_PyObject_CAST(obj)) -+#endif -+ -+ -+// bpo-39573 added Py_SET_REFCNT() to Python 3.9.0a4 -+#if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_REFCNT) -+static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) -+{ -+ ob->ob_refcnt = refcnt; -+} -+#define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT(_PyObject_CAST(ob), refcnt) -+#endif -+ -+ -+// Py_SETREF() and Py_XSETREF() were added to Python 3.5.2. -+// It is excluded from the limited C API. -+#if (PY_VERSION_HEX < 0x03050200 && !defined(Py_SETREF)) && !defined(Py_LIMITED_API) -+#define Py_SETREF(op, op2) \ -+ do { \ -+ PyObject *_py_tmp = _PyObject_CAST(op); \ -+ (op) = (op2); \ -+ Py_DECREF(_py_tmp); \ -+ } while (0) -+ -+#define Py_XSETREF(op, op2) \ -+ do { \ -+ PyObject *_py_tmp = _PyObject_CAST(op); \ -+ (op) = (op2); \ -+ Py_XDECREF(_py_tmp); \ -+ } while (0) -+#endif -+ -+ -+// bpo-43753 added Py_Is(), Py_IsNone(), Py_IsTrue() and Py_IsFalse() -+// to Python 3.10.0b1. -+#if PY_VERSION_HEX < 0x030A00B1 && !defined(Py_Is) -+# define Py_Is(x, y) ((x) == (y)) -+#endif -+#if PY_VERSION_HEX < 0x030A00B1 && !defined(Py_IsNone) -+# define Py_IsNone(x) Py_Is(x, Py_None) -+#endif -+#if PY_VERSION_HEX < 0x030A00B1 && !defined(Py_IsTrue) -+# define Py_IsTrue(x) Py_Is(x, Py_True) -+#endif -+#if PY_VERSION_HEX < 0x030A00B1 && !defined(Py_IsFalse) -+# define Py_IsFalse(x) Py_Is(x, Py_False) -+#endif -+ -+ -+// bpo-39573 added Py_SET_TYPE() to Python 3.9.0a4 -+#if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_TYPE) -+static inline void -+_Py_SET_TYPE(PyObject *ob, PyTypeObject *type) -+{ -+ ob->ob_type = type; -+} -+#define Py_SET_TYPE(ob, type) _Py_SET_TYPE(_PyObject_CAST(ob), type) -+#endif -+ -+ -+// bpo-39573 added Py_SET_SIZE() to Python 3.9.0a4 -+#if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_SIZE) -+static inline void -+_Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) -+{ -+ ob->ob_size = size; -+} -+#define Py_SET_SIZE(ob, size) _Py_SET_SIZE((PyVarObject*)(ob), size) -+#endif -+ -+ -+// bpo-40421 added PyFrame_GetCode() to Python 3.9.0b1 -+#if PY_VERSION_HEX < 0x030900B1 -+static inline PyCodeObject* -+PyFrame_GetCode(PyFrameObject *frame) -+{ -+ assert(frame != NULL); -+ assert(frame->f_code != NULL); -+ return (PyCodeObject*)Py_NewRef(frame->f_code); -+} -+#endif -+ -+static inline PyCodeObject* -+_PyFrame_GetCodeBorrow(PyFrameObject *frame) -+{ -+ return (PyCodeObject *)_Py_StealRef(PyFrame_GetCode(frame)); -+} -+ -+ -+// bpo-40421 added PyFrame_GetCode() to Python 3.9.0b1 -+#if PY_VERSION_HEX < 0x030900B1 && !defined(PYPY_VERSION) -+static inline PyFrameObject* -+PyFrame_GetBack(PyFrameObject *frame) -+{ -+ assert(frame != NULL); -+ return (PyFrameObject*)Py_XNewRef(frame->f_back); -+} -+#endif -+ -+#if !defined(PYPY_VERSION) -+static inline PyFrameObject* -+_PyFrame_GetBackBorrow(PyFrameObject *frame) -+{ -+ return (PyFrameObject *)_Py_XStealRef(PyFrame_GetBack(frame)); -+} -+#endif -+ -+ -+// bpo-39947 added PyThreadState_GetInterpreter() to Python 3.9.0a5 -+#if PY_VERSION_HEX < 0x030900A5 -+static inline PyInterpreterState * -+PyThreadState_GetInterpreter(PyThreadState *tstate) -+{ -+ assert(tstate != NULL); -+ return tstate->interp; -+} -+#endif -+ -+ -+// bpo-40429 added PyThreadState_GetFrame() to Python 3.9.0b1 -+#if PY_VERSION_HEX < 0x030900B1 && !defined(PYPY_VERSION) -+static inline PyFrameObject* -+PyThreadState_GetFrame(PyThreadState *tstate) -+{ -+ assert(tstate != NULL); -+ return (PyFrameObject *)Py_XNewRef(tstate->frame); -+} -+#endif -+ -+#if !defined(PYPY_VERSION) -+static inline PyFrameObject* -+_PyThreadState_GetFrameBorrow(PyThreadState *tstate) -+{ -+ return (PyFrameObject *)_Py_XStealRef(PyThreadState_GetFrame(tstate)); -+} -+#endif -+ -+ -+// bpo-39947 added PyInterpreterState_Get() to Python 3.9.0a5 -+#if PY_VERSION_HEX < 0x030900A5 -+static inline PyInterpreterState * -+PyInterpreterState_Get(void) -+{ -+ PyThreadState *tstate; -+ PyInterpreterState *interp; -+ -+ tstate = PyThreadState_GET(); -+ if (tstate == NULL) { -+ Py_FatalError("GIL released (tstate is NULL)"); -+ } -+ interp = tstate->interp; -+ if (interp == NULL) { -+ Py_FatalError("no current interpreter"); -+ } -+ return interp; -+} -+#endif -+ -+ -+// bpo-39947 added PyInterpreterState_Get() to Python 3.9.0a6 -+#if 0x030700A1 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x030900A6 && !defined(PYPY_VERSION) -+static inline uint64_t -+PyThreadState_GetID(PyThreadState *tstate) -+{ -+ assert(tstate != NULL); -+ return tstate->id; -+} -+#endif -+ -+// bpo-43760 added PyThreadState_EnterTracing() to Python 3.11.0a2 -+#if PY_VERSION_HEX < 0x030B00A2 && !defined(PYPY_VERSION) -+static inline void PyThreadState_EnterTracing(PyThreadState *tstate) -+{ -+ tstate->tracing++; -+#if PY_VERSION_HEX >= 0x030A00A1 -+ tstate->cframe->use_tracing = 0; -+#else -+ tstate->use_tracing = 0; -+#endif -+} -+#endif -+ -+// bpo-43760 added PyThreadState_LeaveTracing() to Python 3.11.0a2 -+#if PY_VERSION_HEX < 0x030B00A2 && !defined(PYPY_VERSION) -+static inline void PyThreadState_LeaveTracing(PyThreadState *tstate) -+{ -+ tstate->tracing--; -+ int use_tracing = (tstate->c_tracefunc != NULL -+ || tstate->c_profilefunc != NULL); -+#if PY_VERSION_HEX >= 0x030A00A1 -+ tstate->cframe->use_tracing = use_tracing; -+#else -+ tstate->use_tracing = use_tracing; -+#endif -+} -+#endif -+ -+ -+// bpo-37194 added PyObject_CallNoArgs() to Python 3.9.0a1 -+#if PY_VERSION_HEX < 0x030900A1 -+static inline PyObject* -+PyObject_CallNoArgs(PyObject *func) -+{ -+ return PyObject_CallFunctionObjArgs(func, NULL); -+} -+#endif -+ -+ -+// bpo-39245 made PyObject_CallOneArg() public (previously called -+// _PyObject_CallOneArg) in Python 3.9.0a4 -+#if PY_VERSION_HEX < 0x030900A4 -+static inline PyObject* -+PyObject_CallOneArg(PyObject *func, PyObject *arg) -+{ -+ return PyObject_CallFunctionObjArgs(func, arg, NULL); -+} -+#endif -+ -+ -+// bpo-1635741 added PyModule_AddObjectRef() to Python 3.10.0a3 -+#if PY_VERSION_HEX < 0x030A00A3 -+static inline int -+PyModule_AddObjectRef(PyObject *module, const char *name, PyObject *value) -+{ -+ int res; -+ Py_XINCREF(value); -+ res = PyModule_AddObject(module, name, value); -+ if (res < 0) { -+ Py_XDECREF(value); -+ } -+ return res; -+} -+#endif -+ -+ -+// bpo-40024 added PyModule_AddType() to Python 3.9.0a5 -+#if PY_VERSION_HEX < 0x030900A5 -+static inline int -+PyModule_AddType(PyObject *module, PyTypeObject *type) -+{ -+ const char *name, *dot; -+ -+ if (PyType_Ready(type) < 0) { -+ return -1; -+ } -+ -+ // inline _PyType_Name() -+ name = type->tp_name; -+ assert(name != NULL); -+ dot = strrchr(name, '.'); -+ if (dot != NULL) { -+ name = dot + 1; -+ } -+ -+ return PyModule_AddObjectRef(module, name, (PyObject *)type); -+} -+#endif -+ -+ -+// bpo-40241 added PyObject_GC_IsTracked() to Python 3.9.0a6. -+// bpo-4688 added _PyObject_GC_IS_TRACKED() to Python 2.7.0a2. -+#if PY_VERSION_HEX < 0x030900A6 && !defined(PYPY_VERSION) -+static inline int -+PyObject_GC_IsTracked(PyObject* obj) -+{ -+ return (PyObject_IS_GC(obj) && _PyObject_GC_IS_TRACKED(obj)); -+} -+#endif -+ -+// bpo-40241 added PyObject_GC_IsFinalized() to Python 3.9.0a6. -+// bpo-18112 added _PyGCHead_FINALIZED() to Python 3.4.0 final. -+#if PY_VERSION_HEX < 0x030900A6 && PY_VERSION_HEX >= 0x030400F0 && !defined(PYPY_VERSION) -+static inline int -+PyObject_GC_IsFinalized(PyObject *obj) -+{ -+ return (PyObject_IS_GC(obj) && _PyGCHead_FINALIZED((PyGC_Head *)(obj)-1)); -+} -+#endif -+ -+ -+// bpo-39573 added Py_IS_TYPE() to Python 3.9.0a4 -+#if PY_VERSION_HEX < 0x030900A4 && !defined(Py_IS_TYPE) -+static inline int -+_Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) { -+ return ob->ob_type == type; -+} -+#define Py_IS_TYPE(ob, type) _Py_IS_TYPE(_PyObject_CAST_CONST(ob), type) -+#endif -+ -+ -+// Py_UNUSED() was added to Python 3.4.0b2. -+#if PY_VERSION_HEX < 0x030400B2 && !defined(Py_UNUSED) -+# if defined(__GNUC__) || defined(__clang__) -+# define Py_UNUSED(name) _unused_ ## name __attribute__((unused)) -+# else -+# define Py_UNUSED(name) _unused_ ## name -+# endif -+#endif -+ -+ -+#ifdef PYTHONCAPI_COMPAT_MSC_INLINE -+# undef inline -+# undef PYTHONCAPI_COMPAT_MSC_INLINE -+#endif -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // PYTHONCAPI_COMPAT --- -2.33.1 - diff --git a/python-zstd-1.4.5.1-c99.patch b/python-zstd-1.4.5.1-c99.patch deleted file mode 100644 index 9b89c73..0000000 --- a/python-zstd-1.4.5.1-c99.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up zstd-1.4.5.1/src/util.c.c99 zstd-1.4.5.1/src/util.c ---- zstd-1.4.5.1/src/util.c.c99 2023-02-01 15:53:06.830812528 +0100 -+++ zstd-1.4.5.1/src/util.c 2023-02-01 15:53:18.823927411 +0100 -@@ -18,7 +18,7 @@ extern "C" { - ******************************************/ - #include "util.h" /* note : ensure that platform.h is included first ! */ - #include --#include -+#include - - #if defined(_MSC_VER) || defined(__MINGW32__) || defined (__MSVCRT__) - #include /* needed for _mkdir in windows */ diff --git a/python-zstd-1.4.5.1-py_ssize_t_clean.patch b/python-zstd-1.4.5.1-py_ssize_t_clean.patch deleted file mode 100644 index b37c4b5..0000000 --- a/python-zstd-1.4.5.1-py_ssize_t_clean.patch +++ /dev/null @@ -1,88 +0,0 @@ ---- a/src/python-zstd.c -+++ b/src/python-zstd.c -@@ -29,13 +29,16 @@ - - #include - #include -+ -+/* Since 3.8 it is mandatory to use proper type for # formats */ -+#define PY_SSIZE_T_CLEAN - #include -+ - #include "bytesobject.h" - #include "zstd.h" - #include "util.h" - #include "python-zstd.h" - -- - /** - * New function for multi-threaded compression. - * Uses origin zstd header, nothing more. -@@ -47,12 +50,13 @@ - - PyObject *result; - const char *source; -- uint32_t source_size; -+ Py_ssize_t source_size; - char *dest; -- uint32_t dest_size; -+ Py_ssize_t dest_size; - size_t cSize; - int32_t level = ZSTD_CLEVEL_DEFAULT; - int32_t threads = 0; -+ ZSTD_CCtx* cctx = 0; - - #if PY_MAJOR_VERSION >= 3 - if (!PyArg_ParseTuple(args, "y#|ii", &source, &source_size, &level, &threads)) -@@ -87,7 +91,7 @@ - return NULL; - } - -- dest_size = ZSTD_compressBound(source_size); -+ dest_size = (Py_ssize_t)ZSTD_compressBound(source_size); - result = PyBytes_FromStringAndSize(NULL, dest_size); - if (result == NULL) { - return NULL; -@@ -96,12 +100,13 @@ - if (source_size > 0) { - dest = PyBytes_AS_STRING(result); - -- ZSTD_CCtx* cctx = ZSTD_createCCtx(); -+ cctx = ZSTD_createCCtx(); -+ - ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, level); - ZSTD_CCtx_setParameter(cctx, ZSTD_c_nbWorkers, threads); - - Py_BEGIN_ALLOW_THREADS -- cSize = ZSTD_compress2(cctx, dest, dest_size, source, source_size); -+ cSize = ZSTD_compress2(cctx, dest, (size_t)dest_size, source, (size_t)source_size); - Py_END_ALLOW_THREADS - - ZSTD_freeCCtx(cctx); -@@ -126,7 +131,7 @@ - - PyObject *result; - const char *source; -- uint32_t source_size; -+ Py_ssize_t source_size; - uint64_t dest_size; - char error = 0; - size_t cSize; -@@ -233,7 +238,7 @@ - - PyObject *result; - const char *source; -- uint32_t source_size; -+ Py_ssize_t source_size; - char *dest; - uint32_t dest_size; - size_t cSize; -@@ -289,7 +294,7 @@ - - PyObject *result; - const char *source; -- uint32_t source_size; -+ Py_ssize_t source_size; - uint32_t dest_size; - size_t cSize; - diff --git a/python-zstd.spec b/python-zstd.spec index 0dd280e..ec78faa 100644 --- a/python-zstd.spec +++ b/python-zstd.spec @@ -2,8 +2,8 @@ %global zstd_version 1.4.5 Name: python-%{pypi_name} -Version: %{zstd_version}.1 -Release: 12%{?dist} +Version: 1.5.5.1 +Release: 1%{?dist} Summary: Zstd Bindings for Python # original zstd bits are GPL-2.0-or-later OR BSD-2-Clause @@ -15,17 +15,6 @@ Source0: %{pypi_source} Patch0: python-zstd-1.4.5.1-test-external.patch Patch1: python-zstd-1.4.5.1-test-once.patch -# Python 3.10 compatibility, merged upstream -# From https://github.com/sergey-dryabzhinsky/python-zstd/commit/428a31edcd -Patch2: python-zstd-1.4.5.1-py_ssize_t_clean.patch - -# Python 3.11 compatibility, merged upstream -# From https://github.com/sergey-dryabzhinsky/python-zstd/commit/4e9b8b0cbf -Patch3: 0003-Port-to-Python-3.11-use-Py_SET_SIZE.patch - -# Part of https://github.com/sergey-dryabzhinsky/python-zstd/commit/b823bc087b2 -Patch4: python-zstd-1.4.5.1-c99.patch - BuildRequires: gcc BuildRequires: python3-devel BuildRequires: python3dist(setuptools) @@ -71,6 +60,9 @@ sed -i -e '/test_version/d' tests/__init__.py %{python3_sitearch}/%{pypi_name}*.so %changelog +* Mon Jan 08 2024 Michel Lind - 1.5.5.1-1 +- Update to 1.5.5.1 + * Fri Jul 21 2023 Fedora Release Engineering - 1.4.5.1-12 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild diff --git a/sources b/sources index 614046d..42ef330 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (zstd-1.4.5.1.tar.gz) = f27e255bc66798b2227d39eaa7648803e7753556b522d3dc37e82413f01dcff44b05f652c210e9832077876bd954a3abdad5ed1823f5f50217b83159bbaf896d +SHA512 (zstd-1.5.5.1.tar.gz) = 7dc2f3ffe0f94b56ba0cf8360ee510b292e9b8b1e92b8ba1ad1a9206b50f852a4e67e04d8e4900c0705820163d551644b38977e2864c648aae7dcc6b2a2c0a68