shiboken2, python3-pyside2: update to 5.15.10, rebuild for Python 3.12

This commit is contained in:
Andrew J. Hesford 2023-09-23 21:01:18 -04:00
parent 8808a9cb96
commit 47c0af077a
6 changed files with 176 additions and 8 deletions

View file

@ -0,0 +1,15 @@
This is a terrible hack. PySide2 fails to build with Qt5 (even on Py3.11)
because shiboken can't find private interfaces for QtQuick widgets. Brute-force
the necessary include paths to make the build work.
--- ./sources/pyside2/cmake/Macros/PySideModules.cmake.orig 2023-09-27 23:51:40.096157231 -0400
+++ ./sources/pyside2/cmake/Macros/PySideModules.cmake 2023-09-27 23:52:19.825408838 -0400
@@ -93,7 +93,7 @@
# Contains include directories to pass to shiboken's preprocessor.
# Workaround: Added ${QT_INCLUDE_DIR}/QtCore until
# qtdeclarative/8d560d1bf0a747bf62f73fad6b6774095442d9d2 has reached qt5.git
- string(REPLACE ";" ${PATH_SEP} core_includes "${Qt5Core_INCLUDE_DIRS}")
+ string(REPLACE ";" ${PATH_SEP} core_includes "${Qt5Core_INCLUDE_DIRS};${Qt5Quick_PRIVATE_INCLUDE_DIRS}")
set(shiboken_include_dirs ${pyside2_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR}${PATH_SEP}${core_includes})
set(shiboken_framework_include_dirs_option "")
if(CMAKE_HOST_APPLE)

View file

@ -3,7 +3,7 @@
@@ -94,7 +94,7 @@ @@ -94,7 +94,7 @@
# Workaround: Added ${QT_INCLUDE_DIR}/QtCore until # Workaround: Added ${QT_INCLUDE_DIR}/QtCore until
# qtdeclarative/8d560d1bf0a747bf62f73fad6b6774095442d9d2 has reached qt5.git # qtdeclarative/8d560d1bf0a747bf62f73fad6b6774095442d9d2 has reached qt5.git
string(REPLACE ";" ${PATH_SEP} core_includes "${Qt5Core_INCLUDE_DIRS}") string(REPLACE ";" ${PATH_SEP} core_includes "${Qt5Core_INCLUDE_DIRS};${Qt5Quick_PRIVATE_INCLUDE_DIRS}")
- set(shiboken_include_dirs ${pyside2_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR}${PATH_SEP}${core_includes}) - set(shiboken_include_dirs ${pyside2_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR}${PATH_SEP}${core_includes})
+ set(shiboken_include_dirs ${pyside2_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR}${PATH_SEP}${core_includes}${PATH_SEP}${CMAKE_FIND_ROOT_PATH}/usr/include) + set(shiboken_include_dirs ${pyside2_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR}${PATH_SEP}${core_includes}${PATH_SEP}${CMAKE_FIND_ROOT_PATH}/usr/include)
set(shiboken_framework_include_dirs_option "") set(shiboken_framework_include_dirs_option "")

View file

@ -0,0 +1,152 @@
This is a combination of three patches:
1. In generate_pyi.py, avoid writing to immutable typing.TypeVar.__repr__.
2. Backport PySide6 fix https://codereview.qt-project.org/c/pyside/pyside-setup/+/506424
3. Backport PySide6 fix https://codereview.qt-project.org/c/pyside/pyside-setup/+/506930
diff -ur python3-pyside2-5.15.5.orig/sources/pyside2/libpyside/pysideproperty.cpp python3-pyside2-5.15.5/sources/pyside2/libpyside/pysideproperty.cpp
--- python3-pyside2-5.15.5.orig/sources/pyside2/libpyside/pysideproperty.cpp 2023-09-27 21:52:01.389249419 -0400
+++ python3-pyside2-5.15.5/sources/pyside2/libpyside/pysideproperty.cpp 2023-09-27 21:57:06.265042322 -0400
@@ -46,6 +46,7 @@
#include <shiboken.h>
#include <signature.h>
+#include <basewrapper.h>
using namespace Shiboken;
@@ -444,7 +445,13 @@
static PyObject *getFromType(PyTypeObject *type, PyObject *name)
{
PyObject *attr = nullptr;
- attr = PyDict_GetItem(type->tp_dict, name);
+
+ {
+ Shiboken::Type::TypeDict tpDict(type);
+ Q_ASSERT(tpDict);
+ attr = PyDict_GetItem(tpDict, name);
+ }
+
if (!attr) {
PyObject *bases = type->tp_bases;
int size = PyTuple_GET_SIZE(bases);
diff -ur python3-pyside2-5.15.5.orig/sources/pyside2/libpyside/pysidesignal.cpp python3-pyside2-5.15.5/sources/pyside2/libpyside/pysidesignal.cpp
--- python3-pyside2-5.15.5.orig/sources/pyside2/libpyside/pysidesignal.cpp 2023-09-27 21:52:01.387249407 -0400
+++ python3-pyside2-5.15.5/sources/pyside2/libpyside/pysidesignal.cpp 2023-09-27 21:58:42.799610013 -0400
@@ -49,6 +49,7 @@
#include <QtCore/QMetaMethod>
#include <QtCore/QMetaObject>
#include <signature.h>
+#include <basewrapper.h>
#include <algorithm>
#include <utility>
@@ -670,7 +671,10 @@
PyObject *value;
PyObject *key;
- while (PyDict_Next(objType->tp_dict, &pos, &key, &value)) {
+ Shiboken::Type::TypeDict tpDict(objType);
+ Q_ASSERT(tpDict);
+
+ while (PyDict_Next(tpDict, &pos, &key, &value)) {
if (PyObject_TypeCheck(value, PySideSignalTypeF())) {
Shiboken::AutoDecRef signalInstance(reinterpret_cast<PyObject *>(PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF())));
instanceInitialize(signalInstance.cast<PySideSignalInstance *>(), key, reinterpret_cast<PySideSignal *>(value), source, 0);
diff -ur python3-pyside2-5.15.5.orig/sources/shiboken2/libshiboken/basewrapper.cpp python3-pyside2-5.15.5/sources/shiboken2/libshiboken/basewrapper.cpp
--- python3-pyside2-5.15.5.orig/sources/shiboken2/libshiboken/basewrapper.cpp 2023-09-27 21:52:01.414249566 -0400
+++ python3-pyside2-5.15.5/sources/shiboken2/libshiboken/basewrapper.cpp 2023-09-27 21:55:00.575303169 -0400
@@ -1969,3 +1969,23 @@
} // namespace Object
} // namespace Shiboken
+
+namespace Shiboken::Type
+{
+
+TypeDict::TypeDict(PyTypeObject *t) noexcept :
+ m_pyObj(t->tp_dict)
+{
+ if (m_pyObj == nullptr) {
+ m_pyObj = PyObject_GenericGetDict(reinterpret_cast<PyObject *>(t), nullptr);
+ m_owned = true;
+ }
+}
+
+TypeDict::~TypeDict()
+{
+ if (m_owned)
+ Py_DECREF(m_pyObj);
+}
+
+} // namespace Shiboken::Type
diff -ur python3-pyside2-5.15.5.orig/sources/shiboken2/libshiboken/basewrapper.h python3-pyside2-5.15.5/sources/shiboken2/libshiboken/basewrapper.h
--- python3-pyside2-5.15.5.orig/sources/shiboken2/libshiboken/basewrapper.h 2023-09-27 21:52:01.416249578 -0400
+++ python3-pyside2-5.15.5/sources/shiboken2/libshiboken/basewrapper.h 2023-09-27 21:54:17.907052245 -0400
@@ -486,4 +486,33 @@
} // namespace Shiboken
+namespace Shiboken::Type
+{
+
+/// TypeDict holds the tp_dict of a type. As of Python 3.12, tp_dict is nullptr,
+/// so, PyObject_GenericGetDict() needs to be used and the reference managed.
+/// FIXME: Replace by AutoDecRef when Python 3.12 is the minimum supported.
+class LIBSHIBOKEN_API TypeDict
+{
+public:
+ TypeDict(const TypeDict &) = delete;
+ TypeDict(TypeDict &&) = delete;
+ TypeDict &operator=(const TypeDict &) = delete;
+ TypeDict &operator=(TypeDict &&) = delete;
+
+ explicit TypeDict(PyTypeObject *t) noexcept;
+ ~TypeDict();
+
+ inline PyObject *object() { return m_pyObj; }
+ inline operator PyObject *() { return m_pyObj; }
+ inline operator bool() const { return m_pyObj != nullptr; }
+ inline PyObject *operator->() { return m_pyObj; }
+
+private:
+ PyObject *m_pyObj;
+ bool m_owned = false;
+};
+
+} // namespace Shiboken::Type
+
#endif // BASEWRAPPER_H
diff -ur python3-pyside2-5.15.5.orig/sources/shiboken2/libshiboken/signature/signature_helper.cpp python3-pyside2-5.15.5/sources/shiboken2/libshiboken/signature/signature_helper.cpp
--- python3-pyside2-5.15.5.orig/sources/shiboken2/libshiboken/signature/signature_helper.cpp 2023-09-27 21:52:01.417249584 -0400
+++ python3-pyside2-5.15.5/sources/shiboken2/libshiboken/signature/signature_helper.cpp 2023-09-27 22:00:12.347136628 -0400
@@ -50,6 +50,7 @@
#include "sbkstring.h"
#include "sbkstaticstrings.h"
#include "sbkstaticstrings_p.h"
+#include "basewrapper.h"
#include "signature_p.h"
@@ -105,7 +106,8 @@
*/
assert(PyType_Check(type));
PyType_Ready(type);
- PyObject *dict = type->tp_dict;
+ Shiboken::Type::TypeDict dict(type);
+ assert(dict);
for (; gsp->name != nullptr; gsp++) {
PyObject *have_descr = PyDict_GetItemString(dict, gsp->name);
if (have_descr != nullptr) {
--- python3-pyside2-5.15.5.orig/sources/pyside2/PySide2/support/generate_pyi.py.orig 2023-09-27 22:20:58.761497093 -0400
+++ python3-pyside2-5.15.5/sources/pyside2/PySide2/support/generate_pyi.py 2023-09-27 22:21:27.701667008 -0400
@@ -113,9 +113,6 @@
prefix = '~'
return prefix + self.__name__
"""
- def _typevar__repr__(self):
- return "typing." + self.__name__
- typing.TypeVar.__repr__ = _typevar__repr__
# Adding a pattern to substitute "Union[T, NoneType]" by "Optional[T]"
# I tried hard to replace typing.Optional by a simple override, but

View file

@ -1,12 +1,12 @@
# Template file for 'python3-pyside2' # Template file for 'python3-pyside2'
pkgname=python3-pyside2 pkgname=python3-pyside2
version=5.15.5 version=5.15.10
revision=2 revision=1
_pkgname="pyside-setup-opensource-src-${version}" _pkgname="pyside-setup-opensource-src-${version}"
build_wrksrc="sources/pyside2" build_wrksrc="sources/pyside2"
build_style=cmake build_style=cmake
configure_args="-DPYTHON_EXECUTABLE=/usr/bin/python" configure_args="-DPYTHON_EXECUTABLE=/usr/bin/python"
hostmakedepends="cmake python3 shiboken2" hostmakedepends="python3-setuptools shiboken2"
makedepends="python3-devel libshiboken2-devel qt5-devel makedepends="python3-devel libshiboken2-devel qt5-devel
qt5-multimedia-devel qt5-tools-devel qt5-plugin-mysql qt5-plugin-odbc qt5-multimedia-devel qt5-tools-devel qt5-plugin-mysql qt5-plugin-odbc
qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds qt5-x11extras-devel qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds qt5-x11extras-devel
@ -23,7 +23,7 @@ maintainer="yopito <pierre.bourgin@free.fr>"
license="LGPL-3.0-or-later" license="LGPL-3.0-or-later"
homepage="https://wiki.qt.io/Qt_for_Python" homepage="https://wiki.qt.io/Qt_for_Python"
distfiles="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-${version}-src/${_pkgname}.tar.xz" distfiles="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-${version}-src/${_pkgname}.tar.xz"
checksum=3920a4fb353300260c9bc46ff70f1fb975c5e7efa22e9d51222588928ce19b33 checksum=2af691d3613a41f83a60439b46568fc2c696dbfae42f7cd7b07152d115ead33a
build_options="webengine" build_options="webengine"
desc_option_webengine="Build Qt5 WebEngine bindings" desc_option_webengine="Build Qt5 WebEngine bindings"

View file

@ -0,0 +1 @@
../../python3-pyside2/patches/python3.12.patch

View file

@ -1,11 +1,11 @@
# Template file for 'shiboken2' # Template file for 'shiboken2'
pkgname=shiboken2 pkgname=shiboken2
version=5.15.7 version=5.15.10
revision=1 revision=1
_pkgname="pyside-setup-opensource-src-${version}" _pkgname="pyside-setup-opensource-src-${version}"
build_wrksrc="sources/shiboken2" build_wrksrc="sources/shiboken2"
build_style=cmake build_style=cmake
hostmakedepends="cmake python3-devel" hostmakedepends="python3-devel python3-setuptools"
makedepends="python3-devel qt5-devel qt5-xmlpatterns-devel clang libxml2-devel makedepends="python3-devel qt5-devel qt5-xmlpatterns-devel clang libxml2-devel
libxslt-devel python3-numpy" libxslt-devel python3-numpy"
depends="clang" depends="clang"
@ -14,7 +14,7 @@ maintainer="yopito <pierre.bourgin@free.fr>"
license="GPL-3.0-or-later" license="GPL-3.0-or-later"
homepage="https://wiki.qt.io/Qt_for_Python/Shiboken" homepage="https://wiki.qt.io/Qt_for_Python/Shiboken"
distfiles="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-${version}-src/${_pkgname}.tar.xz" distfiles="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-${version}-src/${_pkgname}.tar.xz"
checksum=f61210ae24e6882d5d0ca0059229e5dc4f35e2bca92dd6caf96c0f41943a8294 checksum=2af691d3613a41f83a60439b46568fc2c696dbfae42f7cd7b07152d115ead33a
python_version=3 python_version=3
export CLANG_INSTALL_DIR=${XBPS_CROSS_BASE}/usr export CLANG_INSTALL_DIR=${XBPS_CROSS_BASE}/usr