commit:     779862562a0dcca72fa43063aae0a6435fb81f6c
Author:     Louis Sautier <sbraz <AT> gentoo <DOT> org>
AuthorDate: Sun Aug  8 09:27:58 2021 +0000
Commit:     Louis Sautier <sbraz <AT> gentoo <DOT> org>
CommitDate: Sun Aug  8 09:29:31 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=77986256

dev-python/python-lzo: enable py3.10, update EAPI 7 -> 8

Signed-off-by: Louis Sautier <sbraz <AT> gentoo.org>

 .../files/python-lzo-1.12-fix-py3.10.patch         | 159 +++++++++++++++++++++
 dev-python/python-lzo/python-lzo-1.12-r2.ebuild    |  34 +++++
 2 files changed, 193 insertions(+)

diff --git a/dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch 
b/dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch
new file mode 100644
index 00000000000..17bad96d627
--- /dev/null
+++ b/dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch
@@ -0,0 +1,159 @@
+diff --git a/lzomodule.c b/lzomodule.c
+index b5fa542..e9ca432 100644
+--- a/lzomodule.c
++++ b/lzomodule.c
+@@ -31,6 +31,8 @@
+ 
+ #define MODULE_VERSION  "1.12"
+ 
++#define PY_SSIZE_T_CLEAN
++
+ #include <Python.h>
+ #include <lzo/lzo1x.h>
+ 
+@@ -83,7 +85,7 @@ compress(PyObject *dummy, PyObject *args)
+     lzo_uint in_len;
+     lzo_uint out_len;
+     lzo_uint new_len;
+-    int len;
++    Py_ssize_t len;
+     int level = 1;
+     int header = 1;
+     int err;
+@@ -95,6 +97,16 @@ compress(PyObject *dummy, PyObject *args)
+     if (len < 0)
+         return NULL;
+ 
++    if (len > LZO_UINT_MAX) {
++      PyErr_SetString(LzoError, "Input size is larger than LZO_UINT_MAX");
++      return NULL;
++    }
++
++    if ((len + len / 16 + 64 + 3) > LZO_UINT_MAX) {
++      PyErr_SetString(LzoError, "Output size is larger than LZO_UINT_MAX");
++      return NULL;
++    }
++
+     in_len = len;
+     out_len = in_len + in_len / 16 + 64 + 3;
+ 
+@@ -189,7 +201,7 @@ decompress(PyObject *dummy, PyObject *args)
+     lzo_uint in_len;
+     lzo_uint out_len;
+     lzo_uint new_len;
+-    int len;
++    Py_ssize_t len;
+     int buflen = -1;
+     int header = 1;
+     int err;
+@@ -274,7 +286,7 @@ optimize(PyObject *dummy, PyObject *args)
+     lzo_uint in_len;
+     lzo_uint out_len;
+     lzo_uint new_len;
+-    int len;
++    Py_ssize_t len;
+     int err;
+     int header = 1;
+     int buflen = -1;
+@@ -356,7 +368,7 @@ static PyObject *
+ adler32(PyObject *dummy, PyObject *args)
+ {
+     char *buf;
+-    int len;
++    Py_ssize_t len;
+     unsigned long val = 1; /* == lzo_adler32(0, NULL, 0); */
+ 
+     UNUSED(dummy);
+@@ -392,7 +404,7 @@ static PyObject *
+ crc32(PyObject *dummy, PyObject *args)
+ {
+     char *buf;
+-    int len;
++    Py_ssize_t len;
+     unsigned long val = 0; /* == lzo_crc32(0, NULL, 0); */
+ 
+     UNUSED(dummy);
+diff --git a/tests/test.py b/tests/test.py
+index 9a96ce7..af761d9 100644
+--- a/tests/test.py
++++ b/tests/test.py
+@@ -96,11 +96,17 @@ def test_version():
+ 
+ def test_lzo():
+     yield gen, b"aaaaaaaaaaaaaaaaaaaaaaaa"
+-    yield gen_raw, b"aaaaaaaaaaaaaaaaaaaaaaaa"
+     yield gen, b"abcabcabcabcabcabcabcabc"
+-    yield gen_raw, b"abcabcabcabcabcabcabcabc"
+     yield gen, b"abcabcabcabcabcabcabcabc", 9
++
++
++def test_lzo_raw():
++    yield gen_raw, b"aaaaaaaaaaaaaaaaaaaaaaaa"
++    yield gen_raw, b"abcabcabcabcabcabcabcabc"
+     yield gen_raw, b"abcabcabcabcabcabcabcabc", 9
++
++
++def test_lzo_empty():
+     yield gen, b""
+     yield gen_raw, b""
+ 
+@@ -113,41 +119,8 @@ def test_lzo_raw_big():
+     gen_raw(b" " * 131072)
+ 
+ 
+-def main(args):
+-    # display version information and module documentation
+-    print("LZO version %s (0x%x), %s" % (lzo.LZO_VERSION_STRING, 
lzo.LZO_VERSION, lzo.LZO_VERSION_DATE))
+-    print(lzo.__file__)
+-    print()
+-    print(lzo.__doc__)
+-
+-    # display additional module information
+-    ## print dir(lzo)
+-    ## print_modinfo()
+-
+-    # compress some simple strings
+-    gen(b"aaaaaaaaaaaaaaaaaaaaaaaa")
+-    gen_raw(b"aaaaaaaaaaaaaaaaaaaaaaaa")
+-    gen(b"abcabcabcabcabcabcabcabc")
+-    gen_raw(b"abcabcabcabcabcabcabcabc")
+-    gen(b"abcabcabcabcabcabcabcabc", level=9)
+-    gen_raw(b"abcabcabcabcabcabcabcabc", level=9)
+-    gen(b" " * 131072)
+-    gen_raw(b" " * 131072)
+-    gen(b"")
+-    gen_raw(b"")
+-    print("Simple compression test passed.")
+-
+-    test_version()
+-
+-    # force an exception (because of invalid compressed data)
+-    assert issubclass(lzo.error, Exception)
+-    try:
+-        x = lzo.decompress("xx")
+-    except lzo.error:
+-        pass
+-    else:
+-        print("Exception handling does NOT work !")
+-    return 0
+-
+-if __name__ == '__main__':
+-    sys.exit(main(sys.argv))
++if sys.maxsize > 1<<32:
++    # This test raises OverflowError on 32-bit Pythons. Compressing
++    # this much data requires a 64-bit system.
++    def test_lzo_compress_extremely_big():
++        b = lzo.compress(bytes(bytearray((1024**3)*2)))
+diff --git a/tests/util.py b/tests/util.py
+index 0a2f4ed..c7bd5f0 100644
+--- a/tests/util.py
++++ b/tests/util.py
+@@ -45,7 +45,7 @@ def get_sys_path(p=None):
+     if p: p0 = p[0]
+     #
+     plat = get_platform()
+-    plat_specifier = "%s-%s" % (plat, sys.version[:3])
++    plat_specifier = "%s-%d.%d" % (plat, sys.version_info[0], 
sys.version_info[1])
+     ##print plat, plat_specifier
+     #
+     for prefix in (p0, os.curdir, os.pardir,):

diff --git a/dev-python/python-lzo/python-lzo-1.12-r2.ebuild 
b/dev-python/python-lzo/python-lzo-1.12-r2.ebuild
new file mode 100644
index 00000000000..f3636cc05cb
--- /dev/null
+++ b/dev-python/python-lzo/python-lzo-1.12-r2.ebuild
@@ -0,0 +1,34 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_SETUPTOOLS=no
+PYTHON_COMPAT=( python3_{8..10} )
+
+inherit distutils-r1 prefix
+
+DESCRIPTION="Python interface to lzo"
+HOMEPAGE="https://github.com/jd-boyd/python-lzo";
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="dev-libs/lzo:2"
+DEPEND="${RDEPEND}"
+
+# We can't use pytest at the moment because the package uses "yield tests"
+# https://docs.pytest.org/en/6.2.x/deprecations.html#yield-tests
+distutils_enable_tests --install nose
+
+PATCHES=(
+       # Upstream commits: 52440984, e63333e5, 15c40595 and 0a4272fc
+       "${FILESDIR}/${P}-fix-py3.10.patch"
+)
+
+python_prepare_all() {
+       hprefixify setup.py
+       distutils-r1_python_prepare_all
+}

Reply via email to