From 779862562a0dcca72fa43063aae0a6435fb81f6c Mon Sep 17 00:00:00 2001 From: Louis Sautier Date: Sun, 8 Aug 2021 11:27:58 +0200 Subject: dev-python/python-lzo: enable py3.10, update EAPI 7 -> 8 Signed-off-by: Louis Sautier --- .../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(+) create mode 100644 dev-python/python-lzo/files/python-lzo-1.12-fix-py3.10.patch create mode 100644 dev-python/python-lzo/python-lzo-1.12-r2.ebuild 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 000000000000..17bad96d6278 --- /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 + #include + +@@ -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 000000000000..f3636cc05cb8 --- /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 +} -- cgit v1.2.3-65-gdbad