summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2020-06-15 13:03:57 +0200
committerMichał Górny <mgorny@gentoo.org>2020-06-15 15:17:28 +0200
commit3e1e36e8d5a944cfc98584c8353da76f80a69bbd (patch)
tree4ad28bb2ad9b25ac90b287be8e86ca8cd549e92b /dev-python/cython
parentapp-text/txt2man: Bump to version 1.7.0 (diff)
downloadgentoo-3e1e36e8d5a944cfc98584c8353da76f80a69bbd.tar.gz
gentoo-3e1e36e8d5a944cfc98584c8353da76f80a69bbd.tar.bz2
gentoo-3e1e36e8d5a944cfc98584c8353da76f80a69bbd.zip
dev-python/cython: Improve py39 patch to avoid breaking py27
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'dev-python/cython')
-rw-r--r--dev-python/cython/cython-0.29.20-r2.ebuild (renamed from dev-python/cython/cython-0.29.20-r1.ebuild)0
-rw-r--r--dev-python/cython/files/cython-0.29.20-py39-classmeth.patch69
2 files changed, 22 insertions, 47 deletions
diff --git a/dev-python/cython/cython-0.29.20-r1.ebuild b/dev-python/cython/cython-0.29.20-r2.ebuild
index c536c20a045e..c536c20a045e 100644
--- a/dev-python/cython/cython-0.29.20-r1.ebuild
+++ b/dev-python/cython/cython-0.29.20-r2.ebuild
diff --git a/dev-python/cython/files/cython-0.29.20-py39-classmeth.patch b/dev-python/cython/files/cython-0.29.20-py39-classmeth.patch
index e82982472e82..914269a5a232 100644
--- a/dev-python/cython/files/cython-0.29.20-py39-classmeth.patch
+++ b/dev-python/cython/files/cython-0.29.20-py39-classmeth.patch
@@ -1,59 +1,34 @@
-From 1bb26b964060392ecb08c3b6c8ca4626e5c1eec7 Mon Sep 17 00:00:00 2001
-From: Jeroen Demeyer <jeroen.k.demeyer@gmail.com>
-Date: Wed, 28 Aug 2019 10:56:28 +0200
-Subject: [PATCH] Always bind Cython functions
+From c29a7818d3b6806a457af698aec446d3d28d4f80 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Sun, 14 Jun 2020 13:45:21 +0200
+Subject: [PATCH] Always bind Cython functions in py3
+Rebased for cython 0.29.x, and made conditional to Python 3. This
+does not solve the original staticmethod problem in Python 2 but it does
+resolve classmethod problems in Python 3.9. Therefore, it unbreaks
+other packages on Python 3.9, improves overall state for Python 3
+and does not introduce regressions in Python 2.
---
- Cython/Utility/CythonFunction.c | 15 ---------------
- tests/run/cyfunction.pyx | 12 ++++++++++++
- 2 files changed, 12 insertions(+), 15 deletions(-)
+ Cython/Utility/CythonFunction.c | 2 ++
+ 1 file changed, 2 insertions(+)
diff --git a/Cython/Utility/CythonFunction.c b/Cython/Utility/CythonFunction.c
-index 01ff1e0dd4..0758548cb3 100644
+index a65c8eee36..33d0a4750a 100644
--- a/Cython/Utility/CythonFunction.c
+++ b/Cython/Utility/CythonFunction.c
-@@ -552,21 +552,6 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit,
+@@ -548,6 +548,7 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit,
static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
{
-- __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
--
-- if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
-- Py_INCREF(func);
-- return func;
-- }
--
-- if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
-- if (type == NULL)
-- type = (PyObject *)(Py_TYPE(obj));
-- return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
-- }
--
-- if (obj == Py_None)
-- obj = NULL;
- return __Pyx_PyMethod_New(func, obj, type);
- }
++#if PY_MAJOR_VERSION < 3
+ __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-diff --git a/tests/run/cyfunction.pyx b/tests/run/cyfunction.pyx
-index cbce48bcfc..bbd2cefb83 100644
---- a/tests/run/cyfunction.pyx
-+++ b/tests/run/cyfunction.pyx
-@@ -376,6 +376,18 @@ class TestUnboundMethod:
- def meth(self): pass
+ if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
+@@ -563,6 +564,7 @@ static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObj
+ if (obj == Py_None)
+ obj = NULL;
++#endif
+ return __Pyx_PyMethod_New(func, obj, type);
+ }
-+class TestStaticmethod(object):
-+ """
-+ >>> x = TestStaticmethod()
-+ >>> x.staticmeth(42)
-+ 42
-+ >>> x.staticmeth.__get__(42)()
-+ 42
-+ """
-+ @staticmethod
-+ def staticmeth(arg): return arg
-+
-+
- cdef class TestOptimisedBuiltinMethod:
- """
- >>> obj = TestOptimisedBuiltinMethod()