commit:     8f1dbf57e17294c7af8ca1eb28a7a09755a67b1e
Author:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
AuthorDate: Mon May 23 10:53:28 2022 +0000
Commit:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
CommitDate: Wed Jun  8 19:15:18 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8f1dbf57

dev-python/QtPy: enable py3.11

Pyside2 currently does not compile with py3.11 and it is
not likely to get fixed soon because upstream development
has moved to pyside6 for Qt6. Python 3.10 on pyside2 already
required a bunch of patches to function.

Signed-off-by: Andrew Ammerlaan <andrewammerlaan <AT> gentoo.org>

 dev-python/QtPy/QtPy-2.1.0-r1.ebuild | 146 +++++++++++++++++++++++++++++++++++
 1 file changed, 146 insertions(+)

diff --git a/dev-python/QtPy/QtPy-2.1.0-r1.ebuild 
b/dev-python/QtPy/QtPy-2.1.0-r1.ebuild
new file mode 100644
index 000000000000..41ec2ce12760
--- /dev/null
+++ b/dev-python/QtPy/QtPy-2.1.0-r1.ebuild
@@ -0,0 +1,146 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{8..11} )
+
+inherit distutils-r1 virtualx
+
+DESCRIPTION="Abstraction layer on top of PyQt5 and PySide2 and additional 
custom QWidgets"
+HOMEPAGE="
+       https://github.com/spyder-ide/qtpy/
+       https://pypi.org/project/QtPy/
+"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+
+_IUSE_QT_MODULES="
+       declarative designer gui help location multimedia network opengl
+       positioning printsupport sensors serialport speech sql svg testlib
+       webchannel webengine websockets widgets x11extras xml xmlpatterns
+"
+IUSE="+pyqt5 pyside2 ${_IUSE_QT_MODULES}"
+unset _IUSE_QT_MODULES
+
+REQUIRED_USE="
+       || ( pyqt5 pyside2 )
+       python_targets_python3_11? ( pyqt5 !pyside2 )
+"
+
+# These flags are currently *not* common to both the PySide2 and PyQt5 ebuild
+# Disable them for now, please check periodically if this is still up to date.
+#      bluetooth? ( pyqt5 )
+#      dbus? ( pyqt5 )
+#
+#      3d? ( pyside2 )
+#      charts? ( pyside2 )
+#      concurrent? ( pyside2 )
+#      datavis? ( pyside2 )
+#      scxml? ( pyside2 )
+#      script? ( pyside2 )
+#      scripttools? ( pyside2 )
+
+# WARNING: the obvious solution of using || for PyQt5/pyside2 is not going
+# to work. The package only checks whether PyQt5/pyside2 is installed, it does
+# not verify whether they have the necessary modules (i.e. satisfy the USE 
dep).
+#
+# Webengine is a special case, because PyQt5 provides this in a separate 
package
+# while PySide2 ships it in the same package.
+#
+# declarative/qml/quick is a special case, because PyQt5 bundles the bindings
+# for qml and quick in one flag: declarative PySide2 does not.
+#
+# The PyQt5 ebuild currently enables xml support unconditionally, the flag is
+# added anyway with a (+) to make it future proof if the ebuild were to change
+# this behaviour in the future.
+#
+# The PySide2 ebuild currently enables opengl and serialport support
+# unconditionally, the flag is added anyway with a (+) to make it future proof
+# if the ebuild were to change this behaviour in the future.
+RDEPEND="
+       dev-python/packaging[${PYTHON_USEDEP}]
+       pyqt5? (
+               dev-python/PyQt5[${PYTHON_USEDEP}]
+               dev-python/PyQt5[declarative?,designer?,gui?,help?,location?]
+               dev-python/PyQt5[multimedia?,network?,opengl?,positioning?]
+               
dev-python/PyQt5[printsupport?,sensors?,serialport?,speech(-)?,sql?,svg?]
+               dev-python/PyQt5[testlib?,webchannel?,websockets?,widgets?]
+               dev-python/PyQt5[x11extras?,xml(+)?,xmlpatterns?]
+               webengine? ( dev-python/PyQtWebEngine[${PYTHON_USEDEP}] )
+       )
+       pyside2? (
+               $(python_gen_cond_dep '
+                       dev-python/pyside2[${PYTHON_USEDEP}]
+                       
dev-python/pyside2[designer?,gui?,help?,location?,multimedia?]
+                       
dev-python/pyside2[network?,opengl(+)?,positioning?,printsupport?]
+                       
dev-python/pyside2[sensors?,serialport(+)?,speech?,sql?,svg?]
+                       
dev-python/pyside2[testlib?,webchannel?,webengine?,websockets?]
+                       
dev-python/pyside2[widgets?,x11extras?,xml?,xmlpatterns?]
+                       declarative? ( dev-python/pyside2[qml,quick] )
+               ' python3_{8..10})
+       )
+"
+
+# The QtPy testsuite skips tests for bindings that are not installed, so here 
we
+# ensure that everything is available and all tests are run. Note that not
+# all flags are available in PyQt5/PySide2, so some tests are still skipped.
+BDEPEND="
+       test? (
+               dev-python/mock[${PYTHON_USEDEP}]
+               pyqt5? (
+                       dev-python/PyQt5[${PYTHON_USEDEP}]
+                       
dev-python/PyQt5[bluetooth,dbus,declarative,designer,gui,help,location]
+                       
dev-python/PyQt5[multimedia,network,opengl,positioning,printsupport]
+                       
dev-python/PyQt5[sensors,serialport,speech(-),sql,svg,testlib,webchannel]
+                       
dev-python/PyQt5[websockets,widgets,x11extras,xml(+),xmlpatterns]
+                       dev-python/PyQtWebEngine[${PYTHON_USEDEP}]
+               )
+               pyside2? (
+                       $(python_gen_cond_dep '
+                               dev-python/pyside2[${PYTHON_USEDEP}]
+                               
dev-python/pyside2[3d,charts,concurrent,datavis,designer,gui,help]
+                               
dev-python/pyside2[location,multimedia,network,opengl(+),positioning]
+                               
dev-python/pyside2[printsupport,qml,quick,script,scripttools,scxml]
+                               
dev-python/pyside2[sensors,serialport(+),speech,sql,svg,testlib]
+                               
dev-python/pyside2[webchannel,webengine,websockets,widgets,x11extras]
+                               dev-python/pyside2[xml,xmlpatterns]
+                       ' python3_{8..10})
+               )
+       )
+"
+
+distutils_enable_tests pytest
+
+src_prepare() {
+       distutils-r1_src_prepare
+       sed -i -e 's:--cov=qtpy --cov-report=term-missing::' pytest.ini || die
+       # Disable Qt for Python implementations that are not selected
+       if ! use pyqt5; then
+               sed -i -e "s/from PyQt5.QtCore import/raise ImportError #/" 
qtpy/__init__.py || die
+       fi
+       if ! use pyside2; then
+               sed -i -e "s/from PySide2 import/raise ImportError #/" 
qtpy/__init__.py || die
+               sed -i -e "s/from PySide2.QtCore import/raise ImportError #/" 
qtpy/__init__.py || die
+       fi
+}
+
+python_test() {
+       if use pyqt5; then
+               QT_API="pyqt5" virtx epytest
+       fi
+       if use pyside2; then
+               QT_API="pyside2" virtx epytest
+       fi
+}
+
+pkg_postinst() {
+       if use pyqt5 && use pyside2; then
+               ewarn "You have enabled both PyQt5 and PySide2, note that QtPy 
will default"
+               ewarn "to PyQt5 unless the QT_API environment variable 
overrides this."
+       fi
+}

Reply via email to