From 27d756a030cb6d9b002c856aaedd5ac3d20f0740 Mon Sep 17 00:00:00 2001 From: Leon Anavi Date: Thu, 10 Oct 2024 11:39:47 +0300 Subject: python3-gmpy2: Upgrade 2.1.5 -> 2.2.1 Upgrade to release 2.2.1: - Bug fix: use C int instead of C char for some internal code - Bug fix: add xmpz.bit_count method Drop 0001-src-fix-python-3.12-builds.patch because a similar change has been implemented upstream and the patch is not needed. The project has a proper pyproject.toml which declares the setuptools.build.meta PEP-517 backend. Fixes: WARNING: python3-gmpy2-2.2.1-r0 do_check_backend: QA Issue: inherits setuptools3 but has pyproject.toml with setuptools.build_meta, use the correct class [pep517-backend] Signed-off-by: Leon Anavi Signed-off-by: Khem Raj --- .../0001-src-fix-python-3.12-builds.patch | 263 --------------------- .../recipes-devtools/python/python3-gmpy2_2.1.5.bb | 15 -- .../recipes-devtools/python/python3-gmpy2_2.2.1.bb | 13 + 3 files changed, 13 insertions(+), 278 deletions(-) delete mode 100644 meta-python/recipes-devtools/python/python3-gmpy2/0001-src-fix-python-3.12-builds.patch delete mode 100644 meta-python/recipes-devtools/python/python3-gmpy2_2.1.5.bb create mode 100644 meta-python/recipes-devtools/python/python3-gmpy2_2.2.1.bb (limited to 'meta-python') diff --git a/meta-python/recipes-devtools/python/python3-gmpy2/0001-src-fix-python-3.12-builds.patch b/meta-python/recipes-devtools/python/python3-gmpy2/0001-src-fix-python-3.12-builds.patch deleted file mode 100644 index 1171322e26..0000000000 --- a/meta-python/recipes-devtools/python/python3-gmpy2/0001-src-fix-python-3.12-builds.patch +++ /dev/null @@ -1,263 +0,0 @@ -From 43f132103cedfd92b85173bcdacfbabd5916d9fc Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -Date: Wed, 27 Dec 2023 14:52:16 +0100 -Subject: [PATCH] src: fix python 3.12 builds - -This is a backport for 3.1.x versions provided separately in https://github.com/aleaxit/gmpy/issues/446 - -Upstream-Status: Inappropriate [can be dropped when 2.2.x is released] - -Signed-off-by: Alexander Kanavin ---- - src/gmpy2_convert.h | 21 +++++++ - src/gmpy2_convert_gmp.c | 129 +++++++++++++------------------------- - src/gmpy2_convert_utils.c | 2 +- - 3 files changed, 65 insertions(+), 87 deletions(-) - -diff --git a/src/gmpy2_convert.h b/src/gmpy2_convert.h -index f887d47..3e8cb2b 100644 ---- a/src/gmpy2_convert.h -+++ b/src/gmpy2_convert.h -@@ -142,6 +142,27 @@ extern "C" { - #define IS_TYPE_COMPLEX_ONLY(x) ((x > OBJ_TYPE_REAL) && \ - (x < OBJ_TYPE_COMPLEX)) - -+/* Compatibility macros (to work with PyLongObject internals). -+ */ -+ -+#if PY_VERSION_HEX >= 0x030C0000 -+# define TAG_FROM_SIGN_AND_SIZE(is_neg, size) ((is_neg?2:(size==0)) | (((size_t)size) << 3)) -+# define _PyLong_SetSignAndDigitCount(obj, is_neg, size) (obj->long_value.lv_tag = TAG_FROM_SIGN_AND_SIZE(is_neg, size)) -+#elif PY_VERSION_HEX >= 0x030900A4 -+# define _PyLong_SetSignAndDigitCount(obj, is_neg, size) (Py_SET_SIZE(obj, (is_neg?-1:1)*size)) -+#else -+# define _PyLong_SetSignAndDigitCount(obj, is_neg, size) (Py_SIZE(obj) = (is_neg?-1:1)*size) -+#endif -+ -+#if PY_VERSION_HEX >= 0x030C0000 -+# define GET_OB_DIGIT(obj) obj->long_value.ob_digit -+# define _PyLong_IsNegative(obj) ((obj->long_value.lv_tag & 3) == 2) -+# define _PyLong_DigitCount(obj) (obj->long_value.lv_tag >> 3) -+#else -+# define GET_OB_DIGIT(obj) obj->ob_digit -+# define _PyLong_IsNegative(obj) (Py_SIZE(obj) < 0) -+# define _PyLong_DigitCount(obj) (_PyLong_IsNegative(obj)? -Py_SIZE(obj):Py_SIZE(obj)) -+#endif - - /* Since the macros are used in gmpy2's codebase, these functions are skipped - * until they are needed for the C API in the future. -diff --git a/src/gmpy2_convert_gmp.c b/src/gmpy2_convert_gmp.c -index cf0891e..8b8df81 100644 ---- a/src/gmpy2_convert_gmp.c -+++ b/src/gmpy2_convert_gmp.c -@@ -59,33 +59,24 @@ GMPy_MPZ_From_PyIntOrLong(PyObject *obj, CTXT_Object *context) - } - #endif - -- switch (Py_SIZE(templong)) { -- case -1: -- mpz_set_si(result->z, -(sdigit)templong->ob_digit[0]); -+ len = _PyLong_DigitCount(templong); -+ negative = _PyLong_IsNegative(templong); -+ -+ switch (len) { -+ case 1: -+ mpz_set_si(result->z, (sdigit)GET_OB_DIGIT(templong)[0]); - break; - case 0: - mpz_set_si(result->z, 0); - break; -- case 1: -- mpz_set_si(result->z, templong->ob_digit[0]); -- break; - default: -- mpz_set_si(result->z, 0); -- -- if (Py_SIZE(templong) < 0) { -- len = - Py_SIZE(templong); -- negative = 1; -- } else { -- len = Py_SIZE(templong); -- negative = 0; -- } -- -- mpz_import(result->z, len, -1, sizeof(templong->ob_digit[0]), 0, -- sizeof(templong->ob_digit[0])*8 - PyLong_SHIFT, templong->ob_digit); -+ mpz_import(result->z, len, -1, sizeof(GET_OB_DIGIT(templong)[0]), 0, -+ sizeof(GET_OB_DIGIT(templong)[0])*8 - PyLong_SHIFT, -+ GET_OB_DIGIT(templong)); -+ } - -- if (negative) { -- mpz_neg(result->z, result->z); -- } -+ if (negative) { -+ mpz_neg(result->z, result->z); - } - return result; - } -@@ -105,33 +96,24 @@ mpz_set_PyIntOrLong(mpz_t z, PyObject *obj) - } - #endif - -- switch (Py_SIZE(templong)) { -- case -1: -- mpz_set_si(z, -(sdigit)templong->ob_digit[0]); -+ len = _PyLong_DigitCount(templong); -+ negative = _PyLong_IsNegative(templong); -+ -+ switch (len) { -+ case 1: -+ mpz_set_si(z, (sdigit)GET_OB_DIGIT(templong)[0]); - break; - case 0: - mpz_set_si(z, 0); - break; -- case 1: -- mpz_set_si(z, templong->ob_digit[0]); -- break; - default: -- mpz_set_si(z, 0); -- -- if (Py_SIZE(templong) < 0) { -- len = - Py_SIZE(templong); -- negative = 1; -- } else { -- len = Py_SIZE(templong); -- negative = 0; -- } -- -- mpz_import(z, len, -1, sizeof(templong->ob_digit[0]), 0, -- sizeof(templong->ob_digit[0])*8 - PyLong_SHIFT, templong->ob_digit); -+ mpz_import(z, len, -1, sizeof(GET_OB_DIGIT(templong)[0]), 0, -+ sizeof(GET_OB_DIGIT(templong)[0])*8 - PyLong_SHIFT, -+ GET_OB_DIGIT(templong)); -+ } - -- if (negative) { -- mpz_neg(z, z); -- } -+ if (negative) { -+ mpz_neg(z, z); - } - return; - } -@@ -186,12 +168,7 @@ GMPy_PyLong_From_MPZ(MPZ_Object *obj, CTXT_Object *context) - - /* Assume gmp uses limbs as least as large as the builtin longs do */ - -- if (mpz_sgn(obj->z) < 0) { -- negative = 1; -- } else { -- negative = 0; -- } -- -+ negative = mpz_sgn(obj->z) < 0; - size = (mpz_sizeinbase(obj->z, 2) + PyLong_SHIFT - 1) / PyLong_SHIFT; - - if (!(result = _PyLong_New(size))) { -@@ -200,31 +177,20 @@ GMPy_PyLong_From_MPZ(MPZ_Object *obj, CTXT_Object *context) - /* LCOV_EXCL_STOP */ - } - -- mpz_export(result->ob_digit, &count, -1, sizeof(result->ob_digit[0]), 0, -- sizeof(result->ob_digit[0])*8 - PyLong_SHIFT, obj->z); -+ mpz_export(GET_OB_DIGIT(result), &count, -1, sizeof(GET_OB_DIGIT(result)[0]), 0, -+ sizeof(GET_OB_DIGIT(result)[0])*8 - PyLong_SHIFT, obj->z); - - if (count == 0) { -- result->ob_digit[0] = 0; -+ GET_OB_DIGIT(result)[0] = 0; - } - - /* long_normalize() is file-static so we must reimplement it */ - /* longobjp = long_normalize(longobjp); */ -- while ((size>0) && (result->ob_digit[size-1] == 0)) { -+ while ((size>0) && (GET_OB_DIGIT(result)[size-1] == 0)) { - size--; - } --#if PY_VERSION_HEX >= 0x030900A4 -- Py_SET_SIZE(result, size); --#else -- Py_SIZE(result) = size; --#endif - -- if (negative) { --#if PY_VERSION_HEX >= 0x030900A4 -- Py_SET_SIZE(result, - Py_SIZE(result)); --#else -- Py_SIZE(result) = - Py_SIZE(result); --#endif -- } -+ _PyLong_SetSignAndDigitCount(result, negative, size); - return (PyObject*)result; - } - -@@ -476,33 +442,24 @@ GMPy_XMPZ_From_PyIntOrLong(PyObject *obj, CTXT_Object *context) - } - #endif - -- switch (Py_SIZE(templong)) { -- case -1: -- mpz_set_si(result->z, -(sdigit)templong->ob_digit[0]); -+ len = _PyLong_DigitCount(templong); -+ negative = _PyLong_IsNegative(templong); -+ -+ switch (len) { -+ case 1: -+ mpz_set_si(result->z, (sdigit)GET_OB_DIGIT(templong)[0]); - break; - case 0: - mpz_set_si(result->z, 0); - break; -- case 1: -- mpz_set_si(result->z, templong->ob_digit[0]); -- break; - default: -- mpz_set_si(result->z, 0); -- -- if (Py_SIZE(templong) < 0) { -- len = - Py_SIZE(templong); -- negative = 1; -- } else { -- len = Py_SIZE(templong); -- negative = 0; -- } -- -- mpz_import(result->z, len, -1, sizeof(templong->ob_digit[0]), 0, -- sizeof(templong->ob_digit[0])*8 - PyLong_SHIFT, templong->ob_digit); -+ mpz_import(result->z, len, -1, sizeof(GET_OB_DIGIT(templong)[0]), 0, -+ sizeof(GET_OB_DIGIT(templong)[0])*8 - PyLong_SHIFT, -+ GET_OB_DIGIT(templong)); -+ } - -- if (negative) { -- mpz_neg(result->z, result->z); -- } -+ if (negative) { -+ mpz_neg(result->z, result->z); - } - return result; - } -@@ -639,7 +596,7 @@ GMPy_MPQ_From_PyStr(PyObject *s, int base, CTXT_Object *context) - } - - cp = PyBytes_AsString(ascii_str); -- -+ - { - char *whereslash = strchr((char*)cp, '/'); - char *wheredot = strchr((char*)cp, '.'); -diff --git a/src/gmpy2_convert_utils.c b/src/gmpy2_convert_utils.c -index d676eaf..8908d17 100644 ---- a/src/gmpy2_convert_utils.c -+++ b/src/gmpy2_convert_utils.c -@@ -123,7 +123,7 @@ static unsigned long - GMPy_Integer_AsUnsignedLongWithType_v2(PyObject *x, int xtype) - { - if IS_TYPE_PyInteger(xtype) { -- if (Py_SIZE(x) < 0) { -+ if (_PyLong_IsNegative(((PyLongObject*)x))) { - VALUE_ERROR("n must be > 0"); - return (unsigned long)-1; - } diff --git a/meta-python/recipes-devtools/python/python3-gmpy2_2.1.5.bb b/meta-python/recipes-devtools/python/python3-gmpy2_2.1.5.bb deleted file mode 100644 index d9e9bd50e5..0000000000 --- a/meta-python/recipes-devtools/python/python3-gmpy2_2.1.5.bb +++ /dev/null @@ -1,15 +0,0 @@ -SUMMARY = "GMP/MPIR, MPFR, and MPC interface to Python 2.6+ and 3.x" -SECTION = "devel/python" -LICENSE = "GPL-3.0-only | LGPL-3.0-or-later" -LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ - file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02" - -DEPENDS += "gmp mpfr libmpc" - -PYPI_PACKAGE = "gmpy2" -SRC_URI[sha256sum] = "bc297f1fd8c377ae67a4f493fc0f926e5d1b157e5c342e30a4d84dc7b9f95d96" - -inherit pypi setuptools3 python3native -SRC_URI += "file://0001-src-fix-python-3.12-builds.patch" - -BBCLASSEXTEND = "native nativesdk" diff --git a/meta-python/recipes-devtools/python/python3-gmpy2_2.2.1.bb b/meta-python/recipes-devtools/python/python3-gmpy2_2.2.1.bb new file mode 100644 index 0000000000..15599bfad7 --- /dev/null +++ b/meta-python/recipes-devtools/python/python3-gmpy2_2.2.1.bb @@ -0,0 +1,13 @@ +SUMMARY = "GMP/MPIR, MPFR, and MPC interface to Python 2.6+ and 3.x" +SECTION = "devel/python" +LICENSE = "GPL-3.0-only | LGPL-3.0-or-later" +LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ + file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02" + +DEPENDS += "gmp mpfr libmpc" + +SRC_URI[sha256sum] = "e83e07567441b78cb87544910cb3cc4fe94e7da987e93ef7622e76fb96650432" + +inherit pypi python_setuptools_build_meta python3native + +BBCLASSEXTEND = "native nativesdk" -- cgit v1.2.3-54-g00ecf