git » pyside2.git » commit edf129b

Python 3.11 rebuild

author Antonio Rojas
2023-04-09 11:13:07 UTC
committer Antonio Rojas
2023-04-09 11:13:07 UTC
parent c5be3d73e5609b8a452d8309911f215912a0ab71

Python 3.11 rebuild

PKGBUILD +6 -3
python3.11.patch +161 -0

diff --git a/PKGBUILD b/PKGBUILD
index f7e4172..2516d3e 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -6,7 +6,7 @@ pkgname=(shiboken2 python-shiboken2 pyside2 pyside2-tools)
 _qtver=5.15.9
 _clangver=15.0.7
 pkgver=${_qtver/-/}
-pkgrel=1
+pkgrel=2
 arch=(x86_64)
 url='https://www.qt.io'
 license=(LGPL)
@@ -32,14 +32,17 @@ optdepends=('qt5-svg: QtSvg bindings'
 _pkgfqn=pyside-setup-opensource-src-$_qtver
 source=(https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-$pkgver-src/${_pkgfqn}.tar.xz
         fix-build.patch
-        limited-api.patch)
+        limited-api.patch
+        python3.11.patch)
 sha256sums=('2ea5917652036a9007d66ba4dc0aa75f381a3a25ccf0fa70fa2d9e9c8c9dacae'
             '4f8815840b5df2e1e3b9f201a3402126821b0d9702920cefdc18050639143ad1'
-            '9d9b0d74b5159dbafd9e3c4cd794d84b671c299edab3cac1660f094e9a8791ea')
+            '9d9b0d74b5159dbafd9e3c4cd794d84b671c299edab3cac1660f094e9a8791ea'
+            'e91549f7d3da412e864af26f604d0023b80233a7165f50fa21e53cbe861db886')
 
 prepare() {
   patch -d $_pkgfqn -p1 < fix-build.patch
   patch -d $_pkgfqn -p1 < limited-api.patch
+  patch -d $_pkgfqn -p1 < python3.11.patch # Fix build with Python 3.11
 }
 
 build() {
diff --git a/python3.11.patch b/python3.11.patch
new file mode 100644
index 0000000..311a240
--- /dev/null
+++ b/python3.11.patch
@@ -0,0 +1,161 @@
+From b64ad27d8dfeeecaaa8a98051252a32c9d998df4 Mon Sep 17 00:00:00 2001
+From: Friedemann Kleint <Friedemann.Kleint@qt.io>
+Date: Thu, 9 Jun 2022 16:50:41 +0200
+Subject: [PATCH] libshiboken: Fix a crash in Shiboken::Object::isValid() for
+ Python 3.11
+
+The function is passed type objects for class methods, which caused
+it to crash.
+
+The first clause did not catch this, and so it was cast to SbkObject
+below.
+
+Add a type check to prevent this.
+
+Pick-to: 6.3 6.2 5.15
+Task-number: PYSIDE-1960
+Change-Id: Icfdd6fefb7156ac5961444bd5395109849a1d66e
+Reviewed-by: Christian Tismer <tismer@stackless.com>
+Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
+---
+ sources/shiboken2/libshiboken/basewrapper.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: pyside-setup-opensource-src-5.15.7/sources/shiboken2/libshiboken/basewrapper.cpp
+===================================================================
+--- pyside-setup-opensource-src-5.15.7.orig/sources/shiboken2/libshiboken/basewrapper.cpp
++++ pyside-setup-opensource-src-5.15.7/sources/shiboken2/libshiboken/basewrapper.cpp
+@@ -377,7 +377,7 @@ SbkObjectType *SbkObject_TypeF(void)
+     static PyTypeObject *type = nullptr;
+     if (!type) {
+         type = reinterpret_cast<PyTypeObject *>(SbkType_FromSpec(&SbkObject_Type_spec));
+-        Py_TYPE(type) = SbkObjectType_TypeF();
++        Py_SET_TYPE(type, SbkObjectType_TypeF());
+         Py_INCREF(Py_TYPE(type));
+         type->tp_weaklistoffset = offsetof(SbkObject, weakreflist);
+         type->tp_dictoffset = offsetof(SbkObject, ob_dict);
+@@ -1160,7 +1160,7 @@ introduceWrapperType(PyObject *enclosing
+     typeSpec->slots[0].pfunc = reinterpret_cast<void *>(baseType ? baseType : SbkObject_TypeF());
+ 
+     PyObject *heaptype = SbkType_FromSpecWithBases(typeSpec, baseTypes);
+-    Py_TYPE(heaptype) = SbkObjectType_TypeF();
++    Py_SET_TYPE(heaptype, SbkObjectType_TypeF());
+     Py_INCREF(Py_TYPE(heaptype));
+     auto *type = reinterpret_cast<SbkObjectType *>(heaptype);
+ #if PY_VERSION_HEX < 0x03000000
+@@ -1525,6 +1525,7 @@ bool setCppPointer(SbkObject *sbkObj, Py
+ bool isValid(PyObject *pyObj)
+ {
+     if (!pyObj || pyObj == Py_None
++        || PyType_Check(pyObj) != 0
+         || Py_TYPE(Py_TYPE(pyObj)) != SbkObjectType_TypeF()) {
+         return true;
+     }
+Index: pyside-setup-opensource-src-5.15.7/sources/pyside2/libpyside/pysideqflags.cpp
+===================================================================
+--- pyside-setup-opensource-src-5.15.7.orig/sources/pyside2/libpyside/pysideqflags.cpp
++++ pyside-setup-opensource-src-5.15.7/sources/pyside2/libpyside/pysideqflags.cpp
+@@ -192,7 +192,7 @@ namespace QFlags
+         }
+         newspec.slots = SbkNewQFlagsType_spec.slots;
+         PyTypeObject *type = (PyTypeObject *)SbkType_FromSpec(&newspec);
+-        Py_TYPE(type) = &PyType_Type;
++        Py_SET_TYPE(type, &PyType_Type);
+ 
+         PySideQFlagsType *flagsType = reinterpret_cast<PySideQFlagsType *>(type);
+         PepType_PFTP(flagsType)->converterPtr = &PepType_PFTP(flagsType)->converter;
+Index: pyside-setup-opensource-src-5.15.7/sources/pyside2/libpyside/pysidesignal.cpp
+===================================================================
+--- pyside-setup-opensource-src-5.15.7.orig/sources/pyside2/libpyside/pysidesignal.cpp
++++ pyside-setup-opensource-src-5.15.7/sources/pyside2/libpyside/pysidesignal.cpp
+@@ -162,7 +162,7 @@ PyTypeObject *PySideSignalTypeF(void)
+     if (!type) {
+         type = reinterpret_cast<PyTypeObject *>(SbkType_FromSpec(&PySideSignalType_spec));
+         PyTypeObject *hold = Py_TYPE(type);
+-        Py_TYPE(type) = PySideMetaSignalTypeF();
++        Py_SET_TYPE(type, PySideMetaSignalTypeF());
+         Py_INCREF(Py_TYPE(type));
+         Py_DECREF(hold);
+     }
+Index: pyside-setup-opensource-src-5.15.7/sources/pyside2/libpyside/pysideweakref.cpp
+===================================================================
+--- pyside-setup-opensource-src-5.15.7.orig/sources/pyside2/libpyside/pysideweakref.cpp
++++ pyside-setup-opensource-src-5.15.7/sources/pyside2/libpyside/pysideweakref.cpp
+@@ -90,7 +90,7 @@ PyObject *create(PyObject *obj, PySideWe
+ 
+     if (Py_TYPE(PySideCallableObjectTypeF()) == 0)
+     {
+-        Py_TYPE(PySideCallableObjectTypeF()) = &PyType_Type;
++        Py_SET_TYPE(PySideCallableObjectTypeF(), &PyType_Type);
+         PyType_Ready(PySideCallableObjectTypeF());
+     }
+ 
+Index: pyside-setup-opensource-src-5.15.7/sources/shiboken2/libshiboken/sbkenum.cpp
+===================================================================
+--- pyside-setup-opensource-src-5.15.7.orig/sources/shiboken2/libshiboken/sbkenum.cpp
++++ pyside-setup-opensource-src-5.15.7/sources/shiboken2/libshiboken/sbkenum.cpp
+@@ -754,7 +754,7 @@ newTypeWithName(const char *name,
+     PyTuple_SetItem(bases, 0, reinterpret_cast<PyObject *>(basetype));
+     auto *type = reinterpret_cast<PyTypeObject *>(SbkType_FromSpecWithBases(&newspec, bases));
+     PyErr_Print();
+-    Py_TYPE(type) = SbkEnumType_TypeF();
++	Py_SET_TYPE(type, SbkEnumType_TypeF());
+ 
+     auto *enumType = reinterpret_cast<SbkEnumType *>(type);
+     PepType_SETP(enumType)->cppName = cppName;
+Index: pyside-setup-opensource-src-5.15.7/sources/shiboken2/libshiboken/sbkstring.cpp
+===================================================================
+--- pyside-setup-opensource-src-5.15.7.orig/sources/shiboken2/libshiboken/sbkstring.cpp
++++ pyside-setup-opensource-src-5.15.7/sources/shiboken2/libshiboken/sbkstring.cpp
+@@ -41,8 +41,14 @@
+ #include "sbkstaticstrings_p.h"
+ #include "autodecref.h"
+ 
+-#include <vector>
+-#include <unordered_set>
++#if PY_VERSION_HEX >= 0x030B0000 || defined(Py_LIMITED_API)
++#  define USE_INTERN_STRINGS
++#endif
++
++#ifndef USE_INTERN_STRINGS
++#  include <vector>
++#  include <unordered_set>
++#endif
+ 
+ namespace Shiboken
+ {
+@@ -233,6 +239,13 @@ Py_ssize_t len(PyObject *str)
+ //     PyObject *attr = PyObject_GetAttr(obj, name());
+ //
+ 
++#ifdef USE_INTERN_STRINGS
++PyObject *createStaticString(const char *str)
++{
++     return PyUnicode_InternFromString(str);
++}
++#else
++
+ using StaticStrings = std::unordered_set<PyObject *>;
+ 
+ static void finalizeStaticStrings();    // forward
+@@ -283,6 +296,8 @@ PyObject *createStaticString(const char
+     return result;
+ }
+ 
++#endif // !USE_INTERN_STRINGS
++
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // PYSIDE-1019: Helper function for snake_case vs. camelCase names
+Index: pyside-setup-opensource-src-5.15.7/build_scripts/config.py
+===================================================================
+--- pyside-setup-opensource-src-5.15.7.orig/build_scripts/config.py
++++ pyside-setup-opensource-src-5.15.7/build_scripts/config.py
+@@ -94,6 +94,7 @@ class Config(object):
+             'Programming Language :: Python :: 3.8',
+             'Programming Language :: Python :: 3.9',
+             'Programming Language :: Python :: 3.10',
++            'Programming Language :: Python :: 3.11',
+         ]
+ 
+         self.setup_script_dir = None