From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id C4B6815802C for ; Fri, 20 Dec 2024 16:09:52 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E98E5E08ED; Fri, 20 Dec 2024 16:09:51 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id A6C14E08F3 for ; Fri, 20 Dec 2024 16:09:50 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 9805F340806 for ; Fri, 20 Dec 2024 16:09:49 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id F16EC1F64 for ; Fri, 20 Dec 2024 16:09:47 +0000 (UTC) From: "Nowa Ammerlaan" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Nowa Ammerlaan" Message-ID: <1734710949.c854ec57b46f85f8d2606af6e1017f70a03cb9f1.nowa@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: dev-python/qtpy/ X-VCS-Repository: repo/gentoo X-VCS-Files: dev-python/qtpy/metadata.xml dev-python/qtpy/qtpy-2.4.2-r1.ebuild X-VCS-Directories: dev-python/qtpy/ X-VCS-Committer: nowa X-VCS-Committer-Name: Nowa Ammerlaan X-VCS-Revision: c854ec57b46f85f8d2606af6e1017f70a03cb9f1 X-VCS-Branch: master Date: Fri, 20 Dec 2024 16:09:47 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 840d6ef7-308e-4d71-a4e4-2cddd2377758 X-Archives-Hash: 9600a03cae55eaecd4dae49a725d8332 commit: c854ec57b46f85f8d2606af6e1017f70a03cb9f1 Author: Nowa Ammerlaan gentoo org> AuthorDate: Fri Dec 20 15:59:14 2024 +0000 Commit: Nowa Ammerlaan gentoo org> CommitDate: Fri Dec 20 16:09:09 2024 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c854ec57 dev-python/qtpy: add 2.4.2-r1, drop qt5 support Signed-off-by: Nowa Ammerlaan gentoo.org> dev-python/qtpy/metadata.xml | 5 + dev-python/qtpy/qtpy-2.4.2-r1.ebuild | 186 +++++++++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+) diff --git a/dev-python/qtpy/metadata.xml b/dev-python/qtpy/metadata.xml index 6d647f05cf63..7feee8ad3488 100644 --- a/dev-python/qtpy/metadata.xml +++ b/dev-python/qtpy/metadata.xml @@ -24,13 +24,18 @@ Pull in bindings for the QtHelp module Pull in QtMultimedia and QtMultimediaWidgets modules Pull in bindings for the QtNetwork module + Pull in bindings for the QtNFC module Pull in bindings for the QtOpenGL module + Pull in bindings for the QtPDFium module Pull in bindings for the QtPositioning module Pull in bindings for the QtPrintSupport module Build bindings for the QtQml Build bindings for the QtQuick + Build bindings for the QtQuick3D + Pull in bindings for the QtRemoteObjects module Pull in bindings for the QtSensors module Pull in bindings for the QtSerialPort module + Pull in bindings for the QtSpatialAudio module Pull in bindings for the QtTextToSpeech module Pull in bindings for the QtSql module Pull in bindings for the QtSvg module diff --git a/dev-python/qtpy/qtpy-2.4.2-r1.ebuild b/dev-python/qtpy/qtpy-2.4.2-r1.ebuild new file mode 100644 index 000000000000..41db84c47c11 --- /dev/null +++ b/dev-python/qtpy/qtpy-2.4.2-r1.ebuild @@ -0,0 +1,186 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=setuptools +PYPI_PN=QtPy +PYTHON_COMPAT=( python3_{10..13} ) + +inherit distutils-r1 virtualx pypi + +DESCRIPTION="Abstraction layer on top of PyQt and PySide with additional custom QWidgets" +HOMEPAGE=" + https://github.com/spyder-ide/qtpy/ + https://pypi.org/project/QtPy/ +" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86" + +_IUSE_QT_MODULES=" + bluetooth dbus designer +gui help multimedia +network nfc opengl pdfium + positioning printsupport qml quick quick3d remoteobjects sensors serialport + spatialaudio speech +sql svg testlib webchannel webengine websockets + +widgets +xml +" +IUSE="+pyqt6 pyside6 ${_IUSE_QT_MODULES}" +unset _IUSE_QT_MODULES + +REQUIRED_USE="|| ( pyqt6 pyside6 )" + +# These flags are currently *not* common to the PySide2/6 and PyQt5/6 ebuilds +# Disable them for now, please check periodically if this is still up to date. +# 3d? ( pyside6 only ) +# charts? ( pyside6 only ) +# concurrent? ( pyside6 only ) +# httpserver? ( pyside6 only ) +# scxml? ( pyside6 only ) +# uitools? ( pyside6 only ) +# location? ( pyside6 only) +# network-auth? ( pyside6 only ) +# +# vulkan? ( pyqt6 only ) + +# 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 PyQt6 provides this in a separate package +# while PySide6 ships it in the same package. +RDEPEND=" + dev-python/packaging[${PYTHON_USEDEP}] + pyqt6? ( + dev-python/pyqt6[${PYTHON_USEDEP}] + dev-python/pyqt6[bluetooth?,dbus?,designer?,gui?,help?,multimedia?] + dev-python/pyqt6[network?,nfc?,opengl?,pdfium?,positioning?] + dev-python/pyqt6[printsupport?,qml?,quick?,quick3d?,remoteobjects?] + dev-python/pyqt6[sensors?,serialport?,spatialaudio?,speech?,sql?,svg?] + dev-python/pyqt6[testlib?,webchannel?,websockets?,widgets?,xml?] + webengine? ( dev-python/pyqt6-webengine[${PYTHON_USEDEP},widgets?,quick?] ) + + ) + pyside6? ( + dev-python/pyside6[${PYTHON_USEDEP}] + dev-python/pyside6[bluetooth?,dbus?,designer?,gui?,help?,multimedia?] + dev-python/pyside6[network?,nfc?,opengl?,pdfium?,positioning?] + dev-python/pyside6[printsupport?,qml?,quick?,quick3d?,remoteobjects(-)?] + dev-python/pyside6[sensors?,serialport?,spatialaudio?,speech?,sql?,svg?] + dev-python/pyside6[testlib?,webchannel?,webengine?,websockets?,widgets?,xml?] + ) +" + +# 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/pytest-qt[${PYTHON_USEDEP}] + pyqt6? ( + dev-python/pyqt6[${PYTHON_USEDEP}] + dev-python/pyqt6[bluetooth,dbus,designer,gui,help,multimedia] + dev-python/pyqt6[network,nfc,opengl,pdfium,positioning,printsupport] + dev-python/pyqt6[qml,quick,quick3d,sensors,serialport] + dev-python/pyqt6[spatialaudio,speech,sql,svg,testlib,webchannel] + dev-python/pyqt6[vulkan(-),websockets,widgets,xml] + dev-python/pyqt6-webengine[${PYTHON_USEDEP},widgets,quick] + dev-qt/qtbase:6[sqlite] + ) + pyside6? ( + dev-python/pyside6[${PYTHON_USEDEP}] + dev-python/pyside6[3d,bluetooth,charts,concurrent,dbus,designer,gui] + dev-python/pyside6[help,location,multimedia,network,network-auth] + dev-python/pyside6[nfc,opengl,pdfium,positioning,printsupport,qml] + dev-python/pyside6[quick,quick3d,scxml,sensors,serialport] + dev-python/pyside6[spatialaudio,speech,sql,svg,testlib,webchannel] + dev-python/pyside6[webengine,websockets,widgets,xml] + dev-python/pyside6-tools[${PYTHON_USEDEP}] + dev-qt/qtbase:6[sqlite] + ) + ) +" + +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 + + # Always disable PyQt5 + sed \ + -e '/from PyQt5.QtCore import/,/)/c\ \ \ \ \ \ \ \ raise ImportError #/' \ + -e '/if "PyQt5" in sys.modules:/,/"pyqt5"/c\' \ + -i qtpy/__init__.py || die + + # We need to ensure the first option is an 'if' not 'elif' + sed -e 's/elif "PySide2" in sys.modules:/if "PySide2" in sys.modules:/g' \ + -i qtpy/__init__.py || die + + # Always disable PySide2 + sed \ + -e "s/from PySide2 import/raise ImportError #/" \ + -e "s/from PySide2.QtCore import/raise ImportError #/" \ + -e '/if "PySide2" in sys.modules:/,/"pyside2"/c\' \ + -i qtpy/__init__.py || die + + sed \ + -e 's/elif "PyQt6" in sys.modules:/if "PyQt6" in sys.modules:/g' \ + -i qtpy/__init__.py || die + + if ! use pyqt6; then + sed \ + -e '/from PyQt6.QtCore import/,/)/c\ \ \ \ \ \ \ \ raise ImportError #/' \ + -e '/if "PyQt6" in sys.modules:/,/"pyqt6"/c\' \ + -i qtpy/__init__.py || die + + sed \ + -e 's/elif "PySide6" in sys.modules:/if "PySide6" in sys.modules:/g' \ + -i qtpy/__init__.py || die + fi + if ! use pyside6; then + sed \ + -e "s/from PySide6 import/raise ImportError #/" \ + -e "s/from PySide6.QtCore import/raise ImportError #/" \ + -e '/if "PySide6" in sys.modules:/,/"pyside6"/c\' \ + -i qtpy/__init__.py || die + fi +} + +python_test() { + local -x QT_API + local -a EPYTEST_DESELECT + local other + + # Test for each enabled Qt4Python target. + # Deselect the other targets, their test fails if we specify QT_API + # or if we have disabled their corresponding inherit in __init__.py above + for QT_API in PyQt6 PySide6; do + if use "${QT_API,,}"; then + EPYTEST_DESELECT=() + for other in PyQt{5,6} PySide{2,6}; do + if [[ ${QT_API} != ${other} ]]; then + EPYTEST_DESELECT+=( + "qtpy/tests/test_main.py::test_qt_api_environ[${other}]" + ) + fi + done + + einfo "Testing with ${EPYTHON} and QT_API=${QT_API}" + nonfatal epytest -o addopts= || + die -n "Tests failed with ${EPYTHON} and QT_API=${QT_API}" || + return 1 + fi + done +} + +src_test() { + virtx distutils-r1_src_test +} + +pkg_postinst() { + elog "When multiple Qt4Python targets are enabled QtPy will default to" + elog "the first enabled target in this order: PyQt6 PySide6." + elog "This can be overridden with the QT_API environment variable." +}