Add upstream patch for python 3.12 compatibility
This commit is contained in:
parent
584fe3f6e5
commit
558b6b8622
|
@ -0,0 +1,202 @@
|
|||
--- gmpy2-2.1.5/src/gmpy2_convert_gmp.c.orig 2022-11-19 22:18:47.000000000 -0700
|
||||
+++ gmpy2-2.1.5/src/gmpy2_convert_gmp.c 2023-06-15 12:20:05.896716046 -0600
|
||||
@@ -59,33 +59,24 @@ GMPy_MPZ_From_PyIntOrLong(PyObject *obj,
|
||||
}
|
||||
#endif
|
||||
|
||||
- switch (Py_SIZE(templong)) {
|
||||
- case -1:
|
||||
- mpz_set_si(result->z, -(sdigit)templong->ob_digit[0]);
|
||||
+ len = templong->long_value.lv_tag >> 3;
|
||||
+ negative = (templong->long_value.lv_tag & 3) == 2;
|
||||
+
|
||||
+ switch (len) {
|
||||
+ case 1:
|
||||
+ mpz_set_si(result->z, (sdigit)templong->long_value.ob_digit[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(templong->long_value.ob_digit[0]), 0,
|
||||
+ sizeof(templong->long_value.ob_digit[0])*8 - PyLong_SHIFT,
|
||||
+ templong->long_value.ob_digit);
|
||||
+ }
|
||||
|
||||
- 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 *o
|
||||
}
|
||||
#endif
|
||||
|
||||
- switch (Py_SIZE(templong)) {
|
||||
- case -1:
|
||||
- mpz_set_si(z, -(sdigit)templong->ob_digit[0]);
|
||||
+ len = templong->long_value.lv_tag >> 3;
|
||||
+ negative = (templong->long_value.lv_tag & 3) == 2;
|
||||
+
|
||||
+ switch (len) {
|
||||
+ case 1:
|
||||
+ mpz_set_si(z, (sdigit)templong->long_value.ob_digit[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(templong->long_value.ob_digit[0]), 0,
|
||||
+ sizeof(templong->long_value.ob_digit[0])*8 - PyLong_SHIFT,
|
||||
+ templong->long_value.ob_digit);
|
||||
+ }
|
||||
|
||||
- if (negative) {
|
||||
- mpz_neg(z, z);
|
||||
- }
|
||||
+ if (negative) {
|
||||
+ mpz_neg(z, z);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -186,12 +168,7 @@ GMPy_PyLong_From_MPZ(MPZ_Object *obj, CT
|
||||
|
||||
/* 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, CT
|
||||
/* 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(result->long_value.ob_digit, &count, -1, sizeof(result->long_value.ob_digit[0]), 0,
|
||||
+ sizeof(result->long_value.ob_digit[0])*8 - PyLong_SHIFT, obj->z);
|
||||
|
||||
if (count == 0) {
|
||||
- result->ob_digit[0] = 0;
|
||||
+ result->long_value.ob_digit[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) && (result->long_value.ob_digit[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
|
||||
- }
|
||||
+ result->long_value.lv_tag = (negative?2:(size==0)) | (((size_t)size) << 3);
|
||||
return (PyObject*)result;
|
||||
}
|
||||
|
||||
@@ -476,33 +442,24 @@ GMPy_XMPZ_From_PyIntOrLong(PyObject *obj
|
||||
}
|
||||
#endif
|
||||
|
||||
- switch (Py_SIZE(templong)) {
|
||||
- case -1:
|
||||
- mpz_set_si(result->z, -(sdigit)templong->ob_digit[0]);
|
||||
+ len = templong->long_value.lv_tag >> 3;
|
||||
+ negative = (templong->long_value.lv_tag & 3) == 2;
|
||||
+
|
||||
+ switch (len) {
|
||||
+ case 1:
|
||||
+ mpz_set_si(result->z, (sdigit)templong->long_value.ob_digit[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(templong->long_value.ob_digit[0]), 0,
|
||||
+ sizeof(templong->long_value.ob_digit[0])*8 - PyLong_SHIFT,
|
||||
+ templong->long_value.ob_digit);
|
||||
+ }
|
||||
|
||||
- if (negative) {
|
||||
- mpz_neg(result->z, result->z);
|
||||
- }
|
||||
+ if (negative) {
|
||||
+ mpz_neg(result->z, result->z);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
--- gmpy2-2.1.5/src/gmpy2_convert_utils.c.orig 2022-09-23 22:12:17.000000000 -0600
|
||||
+++ gmpy2-2.1.5/src/gmpy2_convert_utils.c 2023-06-15 11:02:21.992578057 -0600
|
||||
@@ -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 ((((PyLongObject*)x)->long_value.lv_tag & 3) == 2) {
|
||||
VALUE_ERROR("n must be > 0");
|
||||
return (unsigned long)-1;
|
||||
}
|
|
@ -7,6 +7,11 @@ License: LGPL-3.0-or-later
|
|||
URL: https://pypi.python.org/pypi/gmpy2
|
||||
Source0: %pypi_source gmpy2
|
||||
|
||||
# Compatibility with python 3.12. Upstream patch which does not apply cleanly
|
||||
# to version 2.1.5:
|
||||
# https://github.com/aleaxit/gmpy/commit/b2236fc26fe48572acdae2c6598be8b02a78edee
|
||||
Patch0: %{name}-python3.12.patch
|
||||
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gmp-devel
|
||||
BuildRequires: libmpc-devel
|
||||
|
@ -53,7 +58,7 @@ Provides: bundled(js-jquery)
|
|||
This package contains API documentation for gmpy2.
|
||||
|
||||
%prep
|
||||
%autosetup -n gmpy2-%{version}
|
||||
%autosetup -n gmpy2-%{version} -p1
|
||||
|
||||
# Update the sphinx theme name
|
||||
sed -i "s/'default'/'classic'/" docs/conf.py
|
||||
|
@ -73,7 +78,7 @@ make -C docs html
|
|||
%pyproject_save_files gmpy2
|
||||
|
||||
%check
|
||||
PYTHONPATH=%{buildroot}%{python3_sitearch} %{python3} test/runtests.py
|
||||
%{py3_test_envvars} %{python3} test/runtests.py
|
||||
|
||||
%files -n python3-gmpy2 -f %{pyproject_files}
|
||||
|
||||
|
@ -81,6 +86,9 @@ PYTHONPATH=%{buildroot}%{python3_sitearch} %{python3} test/runtests.py
|
|||
%doc docs/_build/html/*
|
||||
|
||||
%changelog
|
||||
* Thu Jun 15 2023 Jerry James <loganjerry@gmail.com> - 2.1.5-3
|
||||
- Add upstream patch for python 3.12 compatibility
|
||||
|
||||
* Wed Jun 14 2023 Python Maint <python-maint@redhat.com> - 2.1.5-3
|
||||
- Rebuilt for Python 3.12
|
||||
|
||||
|
|
Loading…
Reference in New Issue