From 6267e6350c9fac84f1514be7d300a06de2f6ee43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Mon, 17 Nov 2025 15:24:07 +0100 Subject: [PATCH] dev-python/pyqtgraph: Bump to 0.14.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michał Górny --- dev-python/pyqtgraph/Manifest | 1 + dev-python/pyqtgraph/pyqtgraph-0.14.0.ebuild | 167 +++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 dev-python/pyqtgraph/pyqtgraph-0.14.0.ebuild diff --git a/dev-python/pyqtgraph/Manifest b/dev-python/pyqtgraph/Manifest index 697f33f534f1..e03b9e840620 100644 --- a/dev-python/pyqtgraph/Manifest +++ b/dev-python/pyqtgraph/Manifest @@ -1 +1,2 @@ DIST pyqtgraph-0.13.7.gh.tar.gz 2364456 BLAKE2B 3ce1a3eb177a2a6328f1b7354bf9d4a87ffedcf4fa75fa407bd2df708b91fe98e2500364220ac7395745c69ac86f4830ea58999d05af49850edc723a6ccad5a1 SHA512 91e06e143fec4b1a6fae5cc7112a1fb6b7e74c7a38605172aacc5639eb220e30c54694e419313c7bb8368ea5c5f45f41d58e4510735e63a7d6ef03cdbb0f05e9 +DIST pyqtgraph-0.14.0.gh.tar.gz 2397130 BLAKE2B 51cec6093e1061a62f8db1ba431a43a8fc4831c5b7e07c8c88bdf3bdcf615589375c2fae5927ca027ce0b77529b49ad232a60a2751948e8fe100fcddaff9805a SHA512 f9c973d5dbfd79ef34652a5eb8eadbc1b0215aa1c30773e5c58148bae6a6d79d3e21a904b1a6dd8ff6eb7fe15debf6c1d45c8a9cce96cbcc60495bc9814259f7 diff --git a/dev-python/pyqtgraph/pyqtgraph-0.14.0.ebuild b/dev-python/pyqtgraph/pyqtgraph-0.14.0.ebuild new file mode 100644 index 000000000000..7f3e84f12e52 --- /dev/null +++ b/dev-python/pyqtgraph/pyqtgraph-0.14.0.ebuild @@ -0,0 +1,167 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=setuptools +PYTHON_COMPAT=( python3_{11..13} ) + +inherit distutils-r1 + +DESCRIPTION="A pure-python graphics and GUI library built on PyQt and numpy" +HOMEPAGE=" + https://www.pyqtgraph.org/ + https://github.com/pyqtgraph/pyqtgraph/ + https://pypi.org/project/pyqtgraph/ +" +SRC_URI=" + https://github.com/pyqtgraph/pyqtgraph/archive/${P}.tar.gz + -> ${P}.gh.tar.gz +" +S=${WORKDIR}/${PN}-${P} + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~riscv ~x86" +IUSE="opengl svg qt5 +qt6" +REQUIRED_USE="test? ( opengl svg ) || ( qt5 qt6 )" + +RDEPEND=" + dev-python/colorama[${PYTHON_USEDEP}] + >=dev-python/numpy-1.22[${PYTHON_USEDEP}] + dev-python/scipy[${PYTHON_USEDEP}] + opengl? ( dev-python/pyopengl[${PYTHON_USEDEP}] ) + qt5? ( dev-python/pyqt5[gui,widgets,opengl=,svg=,${PYTHON_USEDEP}] ) + qt6? ( dev-python/pyqt6[gui,widgets,opengl=,svg=,${PYTHON_USEDEP}] ) +" +BDEPEND=" + test? ( + dev-python/h5py[${PYTHON_USEDEP}] + qt5? ( dev-python/pyqt5[testlib,${PYTHON_USEDEP}] ) + qt6? ( dev-python/pyqt6[testlib,${PYTHON_USEDEP}] ) + dev-vcs/git + ) + sys-apps/gawk +" + +EPYTEST_PLUGINS=( pytest-xvfb ) +EPYTEST_XDIST=1 +distutils_enable_tests pytest + +EPYTEST_DESELECT=( + # apparently fragile + tests/test_reload.py::test_reload + + # TODO + tests/exporters/test_svg.py::test_plotscene + tests/graphicsItems/test_ROI.py::test_PolyLineROI +) + +python_prepare_all() { + distutils-r1_python_prepare_all + + if ! use opengl; then + rm -r pyqtgraph/opengl || die + fi + + # pyqtgraph will automatically use any QT bindings it finds, + # patch the supported Qt versions to only include the ones we have enabled + # This can be simplified to: + # `sed 's/QT_LIB = os.getenv('PYQTGRAPH_QT_LIB')/'QT_LIB = "PyQt6"/' -i pyqtgraph/Qt/__init__.py` + # when we only need to support pyqt6. + local upstream_supported_qt=( + PySide{,2,6} + PyQt{4,5,6} + ) + local gentoo_qt=() + local is_supported_impl use_qt qt + # pyqtgraph has conditionals that depend on these values; we can't just remove them. + # set deselected or unsupported to None to avoid more patching + for qt in "${upstream_supported_qt[@]}"; do + is_supported_impl=0 + case ${qt} in + PyQt5) is_supported_impl=1; use_qt=${qt:2} ;; + PyQt6) is_supported_impl=1; use_qt=${qt:2} ;; + esac + if [[ "${is_supported_impl}" -eq 0 ]]; then + gentoo_qt+=( "${qt^^} = None" ) + continue + fi + if use ${use_qt,,}; then + gentoo_qt+=( "${qt^^} = '${qt}'" ) + else + gentoo_qt+=( "${qt^^} = None" ) + fi + done + + gawk -v qt_string="$(printf "%s\n" "${gentoo_qt[@]}")" -i inplace ' + BEGIN { + i = 0 + split(qt_string, qt_array, "\n") + j = 1 + } + /PYSIDE = '"'"'PySide'"'"'/ { + i = 6 # length of upstream_supported_qt + for (k = 1; k <= length(qt_array); k++) { + print qt_array[k] + j++ + } + } + i > 0 { + i-- + next + } + { print } + ' pyqtgraph/Qt/__init__.py || die "Failed to patch supported Qt versions" + + # We also need to remove them from load order. + local liborder=() + local qt + # The order is important (we want to prefer the newest at runtime) + for qt in qt6 qt5; do + if use ${qt}; then + liborder+=( "PY${qt^^}" ) + fi + done + + gawk -v libOrder="$(printf "%s, " "${liborder[@]}")" -i inplace ' + BEGIN { + libOrder = "[" substr(libOrder, 1, length(libOrder) - 2) "]" + } + /libOrder = \[PYQT6, PYSIDE6, PYQT5, PYSIDE2\]/ { + sub(/\[PYQT6, PYSIDE6, PYQT5, PYSIDE2\]/, libOrder) + } + { print } + ' pyqtgraph/Qt/__init__.py || die "Failed to patch qt version order" + + # Finally update the list of supported frontends in test to never try unsupported or deselected + if use test; then + local frontends=() + for qt in qt5 qt6; do + if use ${qt}; then + frontends+=( "Qt.PY${qt^^}: False," ) + fi + done + gawk -v frontends="$(printf "%s\n" "${frontends[@]}")" -i inplace ' + BEGIN { + i = 0 + split(frontends, frontend_array, "\n") + j = 1 + } + /frontends = {/ { + i = 6 # length of frontends + + print "frontends = {" + for (k = 1; k <= length(frontend_array); k++) { + print " " frontend_array[k] + } + print "}" + } + i > 0 { + i-- + next + } + { print } + ' pyqtgraph/examples/test_examples.py || die "Failed to patch test frontends" + fi +}