diff --git a/0001-fix-python3.8+-use-py_ssize-t-type.patch b/0001-fix-python3.8+-use-py_ssize-t-type.patch new file mode 100644 index 0000000..220ca5f --- /dev/null +++ b/0001-fix-python3.8+-use-py_ssize-t-type.patch @@ -0,0 +1,179 @@ +From 0fe320d4e2d44349aace1ca0876dd044c7048ff8 Mon Sep 17 00:00:00 2001 +From: yuqi +Date: Fri, 3 Jun 2022 16:06:42 +0000 +Subject: [PATCH] fix python3.8+ use py_ssize t-type + +--- + src/python-zstd.c | 140 +++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 138 insertions(+), 2 deletions(-) + +diff --git a/src/python-zstd.c b/src/python-zstd.c +index ab1d0ed..10ccc35 100644 +--- a/src/python-zstd.c ++++ b/src/python-zstd.c +@@ -214,13 +214,144 @@ static PyObject *py_zstd_library_version_int(PyObject* self, PyObject *args) + } + + /** +- * Returns 0 or 1 if ZSTD library build as external +- */ ++ * Returns 0 or 1 if ZSTD library build as external*/ ++ + static PyObject *py_zstd_library_external(PyObject* self, PyObject *args) + { + return Py_BuildValue("i", LIBZSTD_EXTERNAL); + } + ++#if PYZSTD_LEGACY > 0 ++ ++#pragma message "Old style functions are deprecated since 2018-05-06 and may be removed any time!" ++ ++/* Macros and other changes from python-lz4.c ++ * Copyright (c) 2012-2013, Steeve Morin ++ * All rights reserved. */ ++ ++static inline void store_le32(char *c, uint32_t x) { ++ c[0] = x & 0xff; ++ c[1] = (x >> 8) & 0xff; ++ c[2] = (x >> 16) & 0xff; ++ c[3] = (x >> 24) & 0xff; ++} ++ ++static inline uint32_t load_le32(const char *c) { ++ const uint8_t *d = (const uint8_t *)c; ++ return d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24); ++} ++ ++static const uint32_t hdr_size = sizeof(uint32_t); ++ ++ ++static PyObject *py_zstd_compress_old(PyObject* self, PyObject *args) { ++/** ++ * Old format with custom header ++ * @deprecated ++ */ ++ ++ PyObject *result; ++ const char *source; ++ Py_ssize_t source_size; ++ char *dest; ++ uint32_t dest_size; ++ size_t cSize; ++ int32_t level = ZSTD_CLEVEL_DEFAULT; ++ ++#if PY_MAJOR_VERSION >= 3 ++ if (!PyArg_ParseTuple(args, "y#|i", &source, &source_size, &level)) ++ return NULL; ++#else ++ if (!PyArg_ParseTuple(args, "s#|i", &source, &source_size, &level)) ++ return NULL; ++#endif ++ ++ /* This is old version function - no Error raising here. */ ++#if ZSTD_VERSION_NUMBER >= 10304 ++ /* Fast levels (zstd >= 1.3.4) */ ++ if (level < ZSTD_MIN_CLEVEL) level=ZSTD_MIN_CLEVEL; ++ if (0 == level) level=ZSTD_CLEVEL_DEFAULT; ++#else ++ if (level <= 0) level=ZSTD_CLEVEL_DEFAULT; ++#endif ++ if (level > ZSTD_MAX_CLEVEL) level=ZSTD_MAX_CLEVEL; ++ ++ dest_size = ZSTD_compressBound(source_size); ++ result = PyBytes_FromStringAndSize(NULL, hdr_size + dest_size); ++ if (result == NULL) { ++ return NULL; ++ } ++ dest = PyBytes_AS_STRING(result); ++ ++ store_le32(dest, source_size); ++ if (source_size > 0) { ++ ++ Py_BEGIN_ALLOW_THREADS ++ cSize = ZSTD_compress(dest + hdr_size, dest_size, source, source_size, level); ++ Py_END_ALLOW_THREADS ++ ++ if (ZSTD_isError(cSize)) { ++ PyErr_Format(ZstdError, "Compression error: %s", ZSTD_getErrorName(cSize)); ++ Py_CLEAR(result); ++ } else { ++ Py_SIZE(result) = cSize + hdr_size; ++ } ++ } ++ return result; ++} ++ ++static PyObject *py_zstd_uncompress_old(PyObject* self, PyObject *args) { ++/** ++ * Old format with custom header ++ * @deprecated ++ */ ++ ++ PyObject *result; ++ const char *source; ++ Py_ssize_t source_size; ++ uint32_t dest_size; ++ size_t cSize; ++ ++#if PY_MAJOR_VERSION >= 3 ++ if (!PyArg_ParseTuple(args, "y#", &source, &source_size)) ++ return NULL; ++#else ++ if (!PyArg_ParseTuple(args, "s#", &source, &source_size)) ++ return NULL; ++#endif ++ ++ if (source_size < hdr_size) { ++ PyErr_SetString(PyExc_ValueError, "input too short"); ++ return NULL; ++ } ++ dest_size = load_le32(source); ++ if (dest_size > INT_MAX) { ++ PyErr_Format(PyExc_ValueError, "invalid size in header: 0x%x", dest_size); ++ return NULL; ++ } ++ result = PyBytes_FromStringAndSize(NULL, dest_size); ++ ++ if (result != NULL && dest_size > 0) { ++ char *dest = PyBytes_AS_STRING(result); ++ ++ Py_BEGIN_ALLOW_THREADS ++ cSize = ZSTD_decompress(dest, dest_size, source + hdr_size, source_size - hdr_size); ++ Py_END_ALLOW_THREADS ++ ++ if (ZSTD_isError(cSize)) { ++ PyErr_Format(ZstdError, "Decompression error: %s", ZSTD_getErrorName(cSize)); ++ Py_CLEAR(result); ++ } else if (cSize != dest_size) { ++ PyErr_Format(ZstdError, "Decompression error: length mismatch - %u [Dcp] != %u [Hdr]", (uint32_t)cSize, dest_size); ++ Py_CLEAR(result); ++ } ++ } ++ ++ return result; ++} ++ ++#endif // PYZSTD_LEGACY ++ + + static PyMethodDef ZstdMethods[] = { + {"ZSTD_compress", py_zstd_compress_mt, METH_VARARGS, COMPRESS_DOCSTRING}, +@@ -234,6 +365,10 @@ static PyMethodDef ZstdMethods[] = { + {"ZSTD_version", py_zstd_library_version, METH_NOARGS, ZSTD_VERSION_DOCSTRING}, + {"ZSTD_version_number", py_zstd_library_version_int, METH_NOARGS, ZSTD_INT_VERSION_DOCSTRING}, + {"ZSTD_external", py_zstd_library_external, METH_NOARGS, ZSTD_EXTERNAL_DOCSTRING}, ++#if PYZSTD_LEGACY > 0 ++ {"compress_old", py_zstd_compress_old, METH_VARARGS, COMPRESS_OLD_DOCSTRING}, ++ {"decompress_old", py_zstd_uncompress_old, METH_VARARGS, UNCOMPRESS_OLD_DOCSTRING}, ++#endif + {NULL, NULL, 0, NULL} + }; + +@@ -303,3 +438,4 @@ void initzstd(void) + return module; + #endif + } ++ +-- +2.33.0 + diff --git a/fix-python3.8+-use-py_ssize_t-type.patch b/fix-python3.8+-use-py_ssize_t-type.patch deleted file mode 100644 index b3f1766..0000000 --- a/fix-python3.8+-use-py_ssize_t-type.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 8242ae139f70a228bbcd8e7ca28f235ec0654180 Mon Sep 17 00:00:00 2001 -From: Sergey Dryabzhinsky -Date: Fri, 16 Apr 2021 21:40:23 +0300 -Subject: [PATCH] fix python3.8+ use py_ssize_t type - ---- - src/python-zstd.c | 23 ++++++++++++++--------- - 1 file changed, 14 insertions(+), 9 deletions(-) - -diff --git a/src/python-zstd.c b/src/python-zstd.c -index 1cf7b61..9ce1577 100644 ---- 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 @@ static PyObject *py_zstd_compress_mt(PyObject* self, PyObject *args) - - 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 @@ static PyObject *py_zstd_compress_mt(PyObject* self, PyObject *args) - 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 @@ static PyObject *py_zstd_compress_mt(PyObject* self, PyObject *args) - 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 @@ static PyObject *py_zstd_uncompress(PyObject* self, PyObject *args) - - 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 @@ static PyObject *py_zstd_compress_old(PyObject* self, PyObject *args) { - - 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 @@ static PyObject *py_zstd_uncompress_old(PyObject* self, PyObject *args) { - - PyObject *result; - const char *source; -- uint32_t source_size; -+ Py_ssize_t source_size; - uint32_t dest_size; - size_t cSize; - --- -2.27.0 - diff --git a/python-zstd.spec b/python-zstd.spec index 2b774d0..03cd845 100644 --- a/python-zstd.spec +++ b/python-zstd.spec @@ -1,17 +1,13 @@ +%global _empty_manifest_terminate_build 0 Name: python-zstd -Version: 1.4.8.1 -Release: 3 +Version: 1.5.1.0 +Release: 1 Summary: ZSTD Bindings for Python License: BSD-2-Clause URL: https://github.com/sergey-dryabzhinsky/python-zstd -Source0: https://files.pythonhosted.org/packages/92/bc/6bc155c61db55d5b3111a8afc76aaec084372bde89a82ecd4f5fd96c639a/zstd-1.4.8.1.tar.gz +Source0: https://files.pythonhosted.org/packages/3d/bc/189c72d298fea928efabef9a5cb9a7b55adff71f27eadad62890c1e4b32f/zstd-1.5.1.0.tar.gz +Patch1: 0001-fix-python3.8+-use-py_ssize-t-type.patch -# https://github.com/sergey-dryabzhinsky/python-zstd/commit/428a31edcde94d2908aa8ca3439ca01a797de3a4 -Patch1: fix-python3.8+-use-py_ssize_t-type.patch - -BuildRequires: gcc -BuildRequires: python3-devel -BuildRequires: python3-setuptools %description Simple Python bindings for the Zstd compression library. @@ -19,29 +15,70 @@ Simple Python bindings for the Zstd compression library. %package -n python3-zstd Summary: %{summary} Provides: python3-zstd -# The library does not do symbol versioning to fully match automatically on - +# Base build requires +BuildRequires: gcc +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pbr +BuildRequires: python3-pip +BuildRequires: python3-wheel %description -n python3-zstd Simple Python bindings for the Zstd compression library. +%package help +Summary: ZSTD Bindings for Python +Provides: python3-zstd-doc +%description help +Simple Python bindings for the Zstd compression library. + %prep -%autosetup -n zstd-1.4.8.1 -p1 +%autosetup -n zstd-1.5.1.0 -p1 %build %py3_build %install %py3_install + +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + %check %{__python3} setup.py test -%files -n python3-zstd +%files -n python3-zstd -f filelist.lst %license LICENSE %doc README.rst -%{python3_sitearch}/zstd-1.4.8.1-py%{python3_version}.egg-info -%{python3_sitearch}/zstd*.so +%files help -f doclist.lst +%{_docdir}/* %changelog +* Fri Jun 03 2022 OpenStack_SIG - 1.5.1.0-1 +- Upgrade python3-zstd to version 1.5.1.0 + * Tue May 10 2022 yangping - 1.4.8.1-3 - License compliance rectification diff --git a/zstd-1.4.8.1.tar.gz b/zstd-1.4.8.1.tar.gz deleted file mode 100644 index 6c616f7..0000000 Binary files a/zstd-1.4.8.1.tar.gz and /dev/null differ diff --git a/zstd-1.5.1.0.tar.gz b/zstd-1.5.1.0.tar.gz new file mode 100644 index 0000000..2bcc21c Binary files /dev/null and b/zstd-1.5.1.0.tar.gz differ