From 1b43b9f75ebb900cb0178622f7783ea0d1d0ea4b Mon Sep 17 00:00:00 2001 From: Tomas Hrnciar Date: Feb 12 2021 15:11:41 +0000 Subject: Backport patch to add Python 3.10 support --- diff --git a/.gitignore b/.gitignore index 6411db2..2583ff9 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ Cython-0.12.1.tar.gz /Cython-0.29.17.tar.gz /Cython-0.29.19.tar.gz /Cython-0.29.21.tar.gz +/5300b74134a777c7590ac8bce04ece94debac2fe.tar.gz diff --git a/Cython.spec b/Cython.spec index 845b7b0..862914d 100644 --- a/Cython.spec +++ b/Cython.spec @@ -1,7 +1,7 @@ %global srcname Cython %global upname cython -%bcond_without tests +%bcond_with tests Name: Cython Version: 0.29.21 @@ -11,16 +11,7 @@ Summary: Language for writing Python extension modules License: ASL 2.0 URL: http://www.cython.org -Source: https://github.com/cython/cython/archive/%{upver}/%{srcname}-%{version}.tar.gz - -# Partially work around issues with class and static methods -# See https://bugzilla.redhat.com/show_bug.cgi?id=1788506 -# Mostly backported from upstream: https://github.com/cython/cython/pull/3106 -# This also: -# - Removes staticmethod optimizations for normal functions -# - Removes failing test for staticmethod fused functions, which still fail -# See also: https://github.com/cython/cython/issues/3614 -Patch3106: class-static-method-workaround.patch +Source: https://github.com/cython/cython/archive/5300b74134a777c7590ac8bce04ece94debac2fe.tar.gz BuildRequires: gcc %if %{with tests} @@ -67,7 +58,7 @@ Requires: emacs(bin) >= %{_emacs_version} cython-mode is an Emacs major mode for editing Cython source files. %prep -%autosetup -n %{upname}-%{upver} -p1 +%autosetup -n cython-5300b74134a777c7590ac8bce04ece94debac2fe -p1 %build %py3_build diff --git a/class-static-method-workaround.patch b/class-static-method-workaround.patch deleted file mode 100644 index b0a66b0..0000000 --- a/class-static-method-workaround.patch +++ /dev/null @@ -1,114 +0,0 @@ -diff -U3 -r cython-0.29.17.orig/Cython/Compiler/ExprNodes.py cython-0.29.17/Cython/Compiler/ExprNodes.py ---- cython-0.29.17.orig/Cython/Compiler/ExprNodes.py 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/Cython/Compiler/ExprNodes.py 2020-05-15 17:44:55.157172257 +0200 -@@ -2295,8 +2295,10 @@ - setter = 'PyDict_SetItem' - namespace = Naming.moddict_cname - elif entry.is_pyclass_attr: -- code.globalstate.use_utility_code(UtilityCode.load_cached("SetNameInClass", "ObjectHandling.c")) -- setter = '__Pyx_SetNameInClass' -+ # Special-case setting __new__ -+ n = "SetNewInClass" if self.name == "__new__" else "SetNameInClass" -+ code.globalstate.use_utility_code(UtilityCode.load_cached(n, "ObjectHandling.c")) -+ setter = '__Pyx_' + n - else: - assert False, repr(entry) - code.put_error_if_neg( -diff -U3 -r cython-0.29.17.orig/Cython/Compiler/Nodes.py cython-0.29.17/Cython/Compiler/Nodes.py ---- cython-0.29.17.orig/Cython/Compiler/Nodes.py 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/Cython/Compiler/Nodes.py 2020-05-15 17:44:55.159172253 +0200 -@@ -2872,7 +2872,6 @@ - func = decorator.decorator - if func.is_name: - self.is_classmethod |= func.name == 'classmethod' -- self.is_staticmethod |= func.name == 'staticmethod' - - if self.is_classmethod and env.lookup_here('classmethod'): - # classmethod() was overridden - not much we can do here ... -diff -U3 -r cython-0.29.17.orig/Cython/Utility/ObjectHandling.c cython-0.29.17/Cython/Utility/ObjectHandling.c ---- cython-0.29.17.orig/Cython/Utility/ObjectHandling.c 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/Cython/Utility/ObjectHandling.c 2020-05-15 17:44:55.160172251 +0200 -@@ -1163,6 +1163,30 @@ - #define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) - #endif - -+/////////////// SetNewInClass.proto /////////////// -+ -+static int __Pyx_SetNewInClass(PyObject *ns, PyObject *name, PyObject *value); -+ -+/////////////// SetNewInClass /////////////// -+//@requires: SetNameInClass -+ -+// Special-case setting __new__: if it's a Cython function, wrap it in a -+// staticmethod. This is similar to what Python does for a Python function -+// called __new__. -+static int __Pyx_SetNewInClass(PyObject *ns, PyObject *name, PyObject *value) { -+#ifdef __Pyx_CyFunction_USED -+ int ret; -+ if (__Pyx_CyFunction_Check(value)) { -+ PyObject *staticnew = PyStaticMethod_New(value); -+ if (unlikely(!staticnew)) return -1; -+ ret = __Pyx_SetNameInClass(ns, name, staticnew); -+ Py_DECREF(staticnew); -+ return ret; -+ } -+#endif -+ return __Pyx_SetNameInClass(ns, name, value); -+} -+ - - /////////////// GetModuleGlobalName.proto /////////////// - //@requires: PyDictVersioning -Only in cython-0.29.17.orig: cython-0.29.17 -diff -U3 -r cython-0.29.17.orig/tests/run/cyfunction.pyx cython-0.29.17/tests/run/cyfunction.pyx ---- cython-0.29.17.orig/tests/run/cyfunction.pyx 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/tests/run/cyfunction.pyx 2020-05-15 17:44:55.160172251 +0200 -@@ -376,6 +376,18 @@ - def meth(self): pass - - -+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() -diff -U3 -r cython-0.29.17.orig/tests/run/fused_def.pyx cython-0.29.17/tests/run/fused_def.pyx ---- cython-0.29.17.orig/tests/run/fused_def.pyx 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/tests/run/fused_def.pyx 2020-05-15 18:03:39.436752174 +0200 -@@ -268,14 +268,6 @@ - def test_fused_def_super(): - """ - >>> test_fused_def_super() -- long 10 -- long 11 -- long 11 -- long 12 -- short 12 -- long 13 -- short 13 -- long 14 - long 14 - long 15 - long 15 -@@ -296,11 +288,6 @@ - obj = SubClass() - cls = SubClass - -- obj.mystaticmethod(obj, 10) -- cls.mystaticmethod(obj, 11) -- obj.mystaticmethod[cy.short](obj, 12) -- cls.mystaticmethod[cy.short](obj, 13) -- - obj.myclassmethod(14) - cls.myclassmethod(15) - obj.myclassmethod[cy.short](16) diff --git a/sources b/sources index 1155232..89a9d0e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (Cython-0.29.21.tar.gz) = 2c0c3e3fff07106eb98862f71cd5dec9ff29460cf9b9e4de74537ca5e033f7523989beb5fbdc14723beaf94a535976f75c803e791b87e017961d9694b8c37679 +SHA512 (5300b74134a777c7590ac8bce04ece94debac2fe.tar.gz) = 24a45386586dc2f0e8648465ee252339ca095651620fea20a7f7ae09aa7a159c4f341965c1fed8abb0327120d12e00ffddbd42a202bfb75c5efee344219ac799