summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2026-05-04 19:11:09 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2026-05-04 19:11:09 +0000
commit74809f022a396e9b750082d19a74002999a4e5cd (patch)
tree3f8ba31b40b2678551400e2b242060195a996d61 /dev-python
parent92217a61c4e16e9d7f04aac37db59ee63c528d6c (diff)
downloadbaldeagleos-repo-74809f022a396e9b750082d19a74002999a4e5cd.tar.gz
baldeagleos-repo-74809f022a396e9b750082d19a74002999a4e5cd.tar.xz
baldeagleos-repo-74809f022a396e9b750082d19a74002999a4e5cd.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/pyside/Manifest1
-rw-r--r--dev-python/pyside/files/pyside-6.11.0-find-cmake-helpers.patch26
-rw-r--r--dev-python/pyside/files/pyside-6.11.0-fix-tests.patch40
-rw-r--r--dev-python/pyside/pyside-6.11.0.ebuild598
-rw-r--r--dev-python/pyside/pyside-6.9999.ebuild39
5 files changed, 689 insertions, 15 deletions
diff --git a/dev-python/pyside/Manifest b/dev-python/pyside/Manifest
index c46230704f0a..24bdb49a8642 100644
--- a/dev-python/pyside/Manifest
+++ b/dev-python/pyside/Manifest
@@ -1,2 +1,3 @@
DIST pyside-setup-everywhere-src-6.10.2.tar.xz 17877708 BLAKE2B 67be6ef1aaadf36a6e8083f808b8f0e47256ac714f73660cb026ef977676928ae3a16b887fd6f31a343fa5d957b945ce0fc6249aa904d84c7e5a8e320502c2d3 SHA512 363b448fe1a304aea09e095aad9f1ecbe2798f0b0e046ca509e918fdc3e8e6a788928a84f2837ad6c75ea79ce37ec38aaff761ddf323bf8e264304ea3d54ceb4
DIST pyside-setup-everywhere-src-6.10.3.tar.xz 17900952 BLAKE2B e30ede40299161a928a919895a9d26e04e9b58eafa681c2c41ebd37eed39e9b7df74435720e693f87e72f67701dad92cc36938896946f382dac6db0266365fa9 SHA512 6a42478bdfbaef07a993451de423420b20b1a0858c3a86b67071d209a384a6ec6847d95a057a7fc8585206434b817c54f1e301ccf057635e04ea63c6713a7eec
+DIST pyside-setup-everywhere-src-6.11.0.tar.xz 18017608 BLAKE2B 8a9b41cf6fd95788db430c348bc1a58d664db8c97329a21109e20a575f6caa6c8c1401cc195f4d0218ab56c36e5b6c5b38a7a59fdf2daf77fccb9df065eb1c07 SHA512 f99db04837a1b74534aef1906dd5be5f88130175374ff734bbf3de6e47d2c678789969b16c1ea01ef9d60127895d72081cdb56b6155871e9e43331a6fce9fb05
diff --git a/dev-python/pyside/files/pyside-6.11.0-find-cmake-helpers.patch b/dev-python/pyside/files/pyside-6.11.0-find-cmake-helpers.patch
new file mode 100644
index 000000000000..4e321cc773ac
--- /dev/null
+++ b/dev-python/pyside/files/pyside-6.11.0-find-cmake-helpers.patch
@@ -0,0 +1,26 @@
+diff --git a/sources/pyside6/cmake/PySideHelpers.cmake b/sources/pyside6/cmake/PySideHelpers.cmake
+index ec803a1..335893f 100644
+--- a/sources/pyside6/cmake/PySideHelpers.cmake
++++ b/sources/pyside6/cmake/PySideHelpers.cmake
+@@ -43,6 +43,8 @@ function(pyside_internal_find_host_shiboken_tools)
+ if(QFP_SHIBOKEN_HOST_PATH)
+ list(APPEND find_package_extra_args PATHS "${QFP_SHIBOKEN_HOST_PATH}/lib/cmake")
+ list(PREPEND CMAKE_FIND_ROOT_PATH "${QFP_SHIBOKEN_HOST_PATH}")
++ elseif(QFP_SHIBOKEN_TARGET_PATH)
++ list(APPEND find_package_extra_args PATHS "${QFP_SHIBOKEN_TARGET_PATH}/lib/cmake")
+ endif()
+
+ # When doing a regular build, immediately mark the package as required.
+diff --git a/sources/shiboken6/cmake/ShibokenHelpers.cmake b/sources/shiboken6/cmake/ShibokenHelpers.cmake
+index 8c3c8f9..b5e3c68 100644
+--- a/sources/shiboken6/cmake/ShibokenHelpers.cmake
++++ b/sources/shiboken6/cmake/ShibokenHelpers.cmake
+@@ -530,6 +530,8 @@ function(shiboken_internal_find_host_shiboken_tools)
+ if(QFP_SHIBOKEN_HOST_PATH)
+ list(APPEND find_package_extra_args PATHS "${QFP_SHIBOKEN_HOST_PATH}/lib/cmake")
+ list(PREPEND CMAKE_FIND_ROOT_PATH "${QFP_SHIBOKEN_HOST_PATH}")
++ elseif(QFP_SHIBOKEN_TARGET_PATH)
++ list(APPEND find_package_extra_args PATHS "${QFP_SHIBOKEN_TARGET_PATH}/lib/cmake")
+ endif()
+ set(SHIBOKEN6TOOLS_SKIP_FIND_DEPENDENCIES TRUE)
+ find_package(
diff --git a/dev-python/pyside/files/pyside-6.11.0-fix-tests.patch b/dev-python/pyside/files/pyside-6.11.0-fix-tests.patch
new file mode 100644
index 000000000000..427e9b4041a1
--- /dev/null
+++ b/dev-python/pyside/files/pyside-6.11.0-fix-tests.patch
@@ -0,0 +1,40 @@
+https://github.com/pyside/pyside-setup/commit/33641ce807353f56d083f3ed1059bf67ce800e92
+
+Affects python-3.14.4 as well for me (Alfred Wingate).
+
+From 33641ce807353f56d083f3ed1059bf67ce800e92 Mon Sep 17 00:00:00 2001
+From: Friedemann Kleint <Friedemann.Kleint@qt.io>
+Date: Mon, 27 Apr 2026 22:02:54 +0200
+Subject: [PATCH] libpyside: Fix tests bug_408/994 crashing in debug mode or
+ when using Python 3.15
+
+Python asserts about memory allocation for the metaObject attribute
+string when not holding the GIL when connections done in Qt C++ are
+disconnected by the destructor, triggering
+disconnectNotify()/metaObject(). To fix this, ensure the string is
+created at initialization time.
+
+The scenario of appears in ~QTextStream when wrapping it around
+after another QIODevice after qtbase/e3c290e1947515992821e6bf97d74d65c9254271.
+
+Task-number: PYSIDE-3221
+Pick-to: 6.11 6.8
+Change-Id: I76d0cf7567bfe073ad419b2f4b1d6617918bdb85
+Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
+--- a/sources/pyside6/libpyside/signalmanager.cpp
++++ b/sources/pyside6/libpyside/signalmanager.cpp
+@@ -301,6 +301,14 @@ static PyObject *CopyCppToPythonPyObject(const void *cppIn)
+
+ void SignalManager::init()
+ {
++ // Force the metaObject attribute into existence. This fixes an
++ // exit crash (Python 3.15/allocation asserting since GIL is not held)
++ // when connections done in Qt C++ are disconnected by the destructor,
++ // triggering disconnectNotify()/metaObject().
++ // Note: SbkDeallocWrapperCommon() temporarily releases the GIL for
++ // legacy bug 500 (~QPrintDialog hanging).
++ [[maybe_unused]] auto *mo = metaObjectAttr();
++
+ // Register Qt primitive typedefs used on signals.
+ using namespace Shiboken;
+
diff --git a/dev-python/pyside/pyside-6.11.0.ebuild b/dev-python/pyside/pyside-6.11.0.ebuild
new file mode 100644
index 000000000000..271003a58b37
--- /dev/null
+++ b/dev-python/pyside/pyside-6.11.0.ebuild
@@ -0,0 +1,598 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# NOTE: We combine here several PyPI packages, we do this because
+# pyside can and does break if it is compiled with a different
+# toolchain then was used to build shiboken. This bundling ensures
+# that we always use the same toolchain for all components.
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..14} )
+# LLVM-22 support should be present in 6.11.1
+# https://github.com/qtproject/pyside-pyside-setup/commit/291ef13ec8352ff2890b1c5d149e44fdd5f49da1
+LLVM_COMPAT=( {18..21} )
+DISTUTILS_USE_PEP517=setuptools
+DISTUTILS_EXT=1
+
+inherit distutils-r1 llvm-r2 multiprocessing ninja-utils qmake-utils virtualx
+
+MY_PN=${PN}-setup-everywhere-src
+MY_P=${MY_PN}-${PV}
+
+DESCRIPTION="Python bindings for the Qt framework"
+HOMEPAGE="https://wiki.qt.io/PySide6"
+
+if [[ ${PV} == *.9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI=(
+ "https://code.qt.io/${PN}/${PN}-setup.git"
+ "https://github.com/qtproject/${PN}-${PN}-setup.git"
+ )
+ EGIT_BRANCH=dev
+ [[ ${PV} == 6.*.9999 ]] && EGIT_BRANCH=${PV%.9999}
+else
+ SRC_URI="https://download.qt.io/official_releases/QtForPython/${PN}6/PySide6-${PV}-src/${MY_P}.tar.xz"
+ S="${WORKDIR}/${MY_P}"
+ KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
+fi
+
+LICENSE="|| ( GPL-2 GPL-3 LGPL-3 )"
+SLOT="6/${PV}"
+
+# If a flag enables multiple Qt modules, they should be ordered
+# according to their dependencies, e.g. for 3d, 3DCore must be first.
+# Widgets for various modules are handled as a special case later
+declare -A QT_MODULES=(
+ ["3d"]="3DCore 3DRender 3DLogic 3DInput 3DAnimation 3DExtras"
+ ["bluetooth"]="Bluetooth"
+ ["charts"]="Charts"
+ ["+concurrent"]="Concurrent"
+ ["+core"]="Core"
+ ["+dbus"]="DBus"
+ ["designer"]="Designer"
+ ["+gui"]="Gui"
+ ["help"]="Help"
+ ["httpserver"]="HttpServer"
+ ["location"]="Location"
+ ["multimedia"]="Multimedia" # plus widgets
+ ["network-auth"]="NetworkAuth"
+ ["+network"]="Network"
+ ["nfc"]="Nfc"
+ ["+opengl"]="OpenGL" # plus widgets
+ ["pdfium"]="Pdf" # plus widgets
+ ["positioning"]="Positioning"
+ ["+printsupport"]="PrintSupport"
+ ["qml"]="Qml"
+ ["quick3d"]="Quick3D"
+ ["quick"]="Quick" # plus widgets
+ ["remoteobjects"]="RemoteObjects"
+ ["scxml"]="Scxml"
+ ["sensors"]="Sensors"
+ ["serialbus"]="SerialBus"
+ ["serialport"]="SerialPort"
+ ["spatialaudio"]="SpatialAudio"
+ ["+sql"]="Sql"
+ ["svg"]="Svg" # plus widgets
+ ["speech"]="TextToSpeech"
+ ["+testlib"]="Test"
+ ["uitools"]="UiTools"
+ ["webchannel"]="WebChannel"
+ ["webengine"]="WebEngineCore" # plus widgets and quick
+ ["websockets"]="WebSockets"
+ ["webview"]="WebView"
+ ["+widgets"]="Widgets"
+ ["+xml"]="Xml"
+)
+
+# Manually reextract these requirements on version bumps by running the
+# following one-liner from within "${S}":
+# $ grep -E '(set|list).*_deps' sources/pyside6/PySide6/Qt*/CMakeLists.txt
+declare -A QT_REQUIREMENTS=(
+ # opengl not unconditionally required but is needed to get the correct build order
+ ["3d"]="gui network opengl"
+ ["bluetooth"]="core"
+ ["charts"]="core gui widgets"
+ ["concurrent"]="core"
+ ["dbus"]="core"
+ ["designer"]="widgets"
+ ["gles2-only"]="gui"
+ ["gui"]="core"
+ ["help"]="widgets"
+ ["httpserver"]="core concurrent network websockets"
+ ["location"]="core positioning"
+ ["multimedia"]="core gui network"
+ ["network-auth"]="network"
+ ["network"]="core"
+ ["nfc"]="core"
+ ["opengl"]="gui"
+ ["pdfium"]="core gui network"
+ ["positioning"]="core"
+ ["printsupport"]="widgets"
+ ["qml"]="network"
+ # opengl not unconditionally required but is needed to get the correct build order
+ ["quick"]="gui network qml opengl"
+ ["quick3d"]="gui network qml quick"
+ ["remoteobjects"]="core network"
+ ["scxml"]="core"
+ ["sensors"]="core"
+ ["serialbus"]="core network serialport"
+ ["serialport"]="core"
+ ["spatialaudio"]="core gui network multimedia"
+ ["speech"]="core multimedia"
+ ["sql"]="widgets"
+ ["svg"]="gui"
+ ["testlib"]="widgets"
+ ["uitools"]="widgets"
+ ["webchannel"]="core"
+ # quick not unconditionally required but is needed to get the correct build order
+ ["webengine"]="core gui network printsupport quick webchannel"
+ ["websockets"]="network"
+ ["webview"]="gui quick webengine"
+ ["widgets"]="gui"
+ ["xml"]="core"
+)
+
+IUSE="${!QT_MODULES[*]} debug doc gles2-only numpy test tools"
+RESTRICT="!test? ( test )"
+
+# majority of QtQml tests require QtQuick support
+REQUIRED_USE="
+ test? (
+ qml? ( quick )
+ )
+"
+for requirement in "${!QT_REQUIREMENTS[@]}"; do
+ REQUIRED_USE+=" ${requirement}? ( ${QT_REQUIREMENTS[${requirement}]} ) "
+done
+
+# Minimal supported version of Qt.
+QT_PV="$(ver_cut 1-3)*:6"
+
+# WebEngine needs sound support, so enable either pulseaudio or alsa
+RDEPEND="
+ dev-libs/libxml2:=
+ dev-libs/libxslt
+ =dev-qt/qtbase-${QT_PV}[concurrent?,dbus?,gles2-only=,network?,opengl?,sql?,widgets?,xml?]
+ $(llvm_gen_dep '
+ llvm-core/clang:${LLVM_SLOT}
+ ')
+ 3d? ( =dev-qt/qt3d-${QT_PV}[qml?,gles2-only=] )
+ bluetooth? ( =dev-qt/qtconnectivity-${QT_PV}[bluetooth] )
+ charts? ( =dev-qt/qtcharts-${QT_PV} )
+ designer? ( =dev-qt/qttools-${QT_PV}[designer,widgets,gles2-only=] )
+ gui? (
+ =dev-qt/qtbase-${QT_PV}[gui,jpeg(+)]
+ x11-libs/libxkbcommon
+ )
+ help? ( =dev-qt/qttools-${QT_PV}[assistant,gles2-only=] )
+ httpserver? ( =dev-qt/qthttpserver-${QT_PV} )
+ location? ( =dev-qt/qtlocation-${QT_PV} )
+ multimedia? ( =dev-qt/qtmultimedia-${QT_PV}[widgets(+)?] )
+ network? ( =dev-qt/qtbase-${QT_PV}[ssl] )
+ network-auth? ( =dev-qt/qtnetworkauth-${QT_PV} )
+ nfc? ( =dev-qt/qtconnectivity-${QT_PV}[nfc] )
+ numpy? ( >=dev-python/numpy-2.1.3[${PYTHON_USEDEP}] )
+ pdfium? ( =dev-qt/qtwebengine-${QT_PV}[pdfium(-),widgets?] )
+ positioning? ( =dev-qt/qtpositioning-${QT_PV} )
+ printsupport? ( =dev-qt/qtbase-${QT_PV}[gui,widgets] )
+ qml? ( =dev-qt/qtdeclarative-${QT_PV}[opengl?,widgets?] )
+ quick3d? ( =dev-qt/qtquick3d-${QT_PV}[opengl?] )
+ remoteobjects? ( =dev-qt/qtremoteobjects-${QT_PV} )
+ scxml? ( =dev-qt/qtscxml-${QT_PV} )
+ sensors? ( =dev-qt/qtsensors-${QT_PV}[qml?] )
+ speech? ( =dev-qt/qtspeech-${QT_PV} )
+ serialbus? ( =dev-qt/qtserialbus-${QT_PV} )
+ serialport? ( =dev-qt/qtserialport-${QT_PV} )
+ svg? ( =dev-qt/qtsvg-${QT_PV} )
+ testlib? ( =dev-qt/qtbase-${QT_PV}[gui] )
+ tools? (
+ =dev-qt/qtbase-${QT_PV}
+ =dev-qt/qtdeclarative-${QT_PV}[qmlls]
+ =dev-qt/qttools-${QT_PV}[assistant,designer,linguist]
+ dev-python/pkginfo[${PYTHON_USEDEP}]
+ )
+ uitools? ( =dev-qt/qttools-${QT_PV}[gles2-only=,widgets] )
+ webchannel? ( =dev-qt/qtwebchannel-${QT_PV} )
+ webengine? ( || (
+ =dev-qt/qtwebengine-${QT_PV}[alsa,widgets?]
+ =dev-qt/qtwebengine-${QT_PV}[pulseaudio,widgets?]
+ )
+ )
+ websockets? ( =dev-qt/qtwebsockets-${QT_PV} )
+ webview? ( =dev-qt/qtwebview-${QT_PV} )
+ !dev-python/pyside:0
+ !dev-python/shiboken6
+ !dev-python/pyside6-tools
+"
+
+DEPEND="${RDEPEND}
+ $(llvm_gen_dep '
+ llvm-core/clang:${LLVM_SLOT}
+ llvm-core/llvm:${LLVM_SLOT}
+ ')
+ dev-util/vulkan-headers
+ test? ( =dev-qt/qtbase-${QT_PV}[gui] )
+" # testlib is toggled by the gui flag on qtbase
+
+BDEPEND="
+ dev-build/cmake
+ dev-python/distro[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
+ dev-util/patchelf
+ doc? (
+ >=dev-libs/libxml2-2.6.32
+ >=dev-libs/libxslt-1.1.19
+ media-gfx/graphviz
+ dev-python/sphinx[${PYTHON_USEDEP}]
+ dev-python/myst-parser[${PYTHON_USEDEP}]
+ )
+ numpy? ( dev-python/numpy[${PYTHON_USEDEP}] )
+ test? ( dev-python/pkginfo[${PYTHON_USEDEP}] )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-6.10.0-dont-vendor-ffmpeg.patch"
+ "${FILESDIR}/${PN}-6.10.1-pass-ninja-opts.patch"
+ "${FILESDIR}/${PN}-6.11.0-find-cmake-helpers.patch"
+ "${FILESDIR}/${PN}-6.11.0-fix-tests.patch"
+)
+
+# Build system duplicates system libraries. TODO: fix
+QA_PREBUILT=(
+ "/usr/lib/python*/site-packages/PySide6/*"
+)
+
+python_prepare_all() {
+ distutils-r1_python_prepare_all
+
+ # Shiboken6 assumes Vulkan headers live under either "$VULKAN_SDK/include"
+ # or "$VK_SDK_PATH/include" rather than "${EPREFIX}/usr/include/vulkan".
+ sed -i -e "s~\bdetectVulkan(&headerPaths);~headerPaths.append(HeaderPath{QByteArrayLiteral(\"${EPREFIX}/usr/include/vulkan\"), HeaderType::System});~" \
+ sources/shiboken6_generator/ApiExtractor/clangparser/compilersupport.cpp || die
+
+ # Shiboken6 assumes the "/usr/lib/clang/${CLANG_NEWEST_VERSION}/include/"
+ # subdirectory provides Clang builtin includes (e.g., "stddef.h") for the
+ # currently installed version of Clang, where ${CLANG_NEWEST_VERSION} is
+ # the largest version specifier that exists under the "/usr/lib/clang/"
+ # subdirectory. This assumption is false in edge cases, including when
+ # users downgrade from newer Clang versions but fail to remove those
+ # versions with "emerge --depclean". See also:
+ # https://github.com/leycec/raiagent/issues/85
+ #
+ # Sadly, the clang-* family of functions exported by the "toolchain-funcs"
+ # eclass are defective, returning nonsensical placeholder strings if the
+ # end user has *NOT* explicitly configured their C++ compiler to be Clang.
+ # PySide6 does *NOT* care whether the end user has done so or not, as
+ # PySide6 unconditionally requires Clang in either case. See also:
+ # https://bugs.gentoo.org/619490
+ sed -e \
+ 's~(findClangBuiltInIncludesDir())~(QStringLiteral("'"${EPREFIX}"'/usr/lib/clang/'"${LLVM_SLOT}"'/include"))~' \
+ -i sources/shiboken6_generator/ApiExtractor/clangparser/compilersupport.cpp || die
+
+ sed -e \
+ 's~set(libclang_directory_suffix "lib")~set(libclang_directory_suffix "'"$(get_libdir)"'")~' \
+ -i sources/shiboken6/cmake/ShibokenHelpers.cmake || die
+
+ # blacklist.txt works like XFAIL
+ cat <<- EOF >> build_history/blacklist.txt || die
+ # segfaults with QOpenGLContext::create
+ [pysidetest::qapp_like_a_macro_test]
+ linux
+ # no mypy
+ [pysidetest::mypy_correctness_test]
+ linux
+ # Tries to execute pip install
+ [pyside6-deploy::test_pyside6_deploy]
+ linux
+ [pyside6-android-deploy::test_pyside6_android_deploy]
+ linux
+ # Behavior changed and test not changed to accomodate
+ # https://bugreports.qt.io/projects/PYSIDE/issues/PYSIDE-3135
+ [registry::existence_test]
+ linux
+ # Doesn't appear to play well with virtualx as it tries to use wayland
+ [QtUiTools::loadUiType_test]
+ linux
+ # py3.14?
+ [sample::multiple_derived]
+ linux
+ # Doesn't appear to play well with virtualx as it tries to use wayland
+ [QtWidgets::qapp_issue_585]
+ linux
+ EOF
+
+ if ! use numpy; then
+ cat <<- EOF >> build_history/blacklist.txt || die
+ # Requires numpy support to pass
+ [sample::array_numpy]
+ linux
+ [sample::nontypetemplate]
+ linux
+ [QtGui::qpainter_test]
+ linux
+ [QtCore::qrangemodel_test]
+ linux
+ EOF
+ fi
+}
+
+python_configure_all() {
+ export LLVM_INSTALL_DIR="$(get_llvm_prefix)"
+
+ # see pyside-6.10.1-pass-ninja-opts.patch
+ export NINJAOPTS="$(get_NINJAOPTS)"
+
+ ENABLED_QT_MODULES=()
+
+ # The order matters, dependencies must come first so process
+ # REQUIRED_USE and recursively enable modules
+ enable_qt_mod() {
+ local flag=${1}
+ local modules=${QT_MODULES[${flag}]}
+ if [[ -z ${modules} ]]; then
+ die "incorrect flag=${flag}, not registered"
+ fi
+ local dependencies=${QT_REQUIREMENTS[${flag//+}]}
+ if [[ -n ${dependencies} ]]; then
+ local depflag
+ for depflag in ${dependencies}; do
+ if use "${depflag}"; then
+ if [[ -z ${QT_MODULES[${depflag}]} ]]; then
+ depflag=+${depflag}
+ fi
+ enable_qt_mod "${depflag}"
+ else
+ die "${depflag} is required but not enabled"
+ fi
+ done
+ fi
+ if [[ "${ENABLED_QT_MODULES[*]}" != *${modules}* ]]; then
+ # modules is whitespace separated. We expand implicitly.
+ ENABLED_QT_MODULES+=( ${modules} )
+ fi
+ }
+ # Enable specified qt modules
+ local flag
+ for flag in "${!QT_MODULES[@]}"; do
+ if use "${flag//+}"; then
+ enable_qt_mod "${flag}"
+ fi
+ done
+
+ # Special cases
+ if use widgets; then
+ use multimedia && ENABLED_QT_MODULES+=( MultimediaWidgets )
+ use opengl && ENABLED_QT_MODULES+=( OpenGLWidgets )
+ use pdfium && ENABLED_QT_MODULES+=( PdfWidgets )
+ use quick && ENABLED_QT_MODULES+=( QuickWidgets )
+ use svg && ENABLED_QT_MODULES+=( SvgWidgets )
+ use webengine && ENABLED_QT_MODULES+=( WebEngineWidgets )
+ fi
+ if use quick; then
+ use webengine && ENABLED_QT_MODULES+=( WebEngineQuick )
+ use testlib && ENABLED_QT_MODULES+=( QuickTest )
+ fi
+
+ # Arguments listed in options.py
+ MAIN_DISTUTILS_ARGS=(
+ --cmake="${ESYSROOT}/usr/bin/cmake"
+ --ignore-git
+ --limited-api=no
+ --module-subset="$(printf '%s,' "${ENABLED_QT_MODULES[@]}")"
+ --no-strip
+ --no-size-optimization
+ --openssl="${ESYSROOT}/usr/bin/openssl"
+ --qt="$(ver_cut 1-3)"
+ --qtpaths="$(qt6_get_bindir)/qtpaths"
+ --verbose-build
+ --parallel="$(makeopts_jobs)"
+ "$(usex debug "--debug" "--relwithdebinfo")"
+ "--$(usex doc "build" "skip")-docs"
+ "--$(usex numpy "enable" "disable")-numpy-support"
+ )
+
+ if use test; then
+ MAIN_DISTUTILS_ARGS+=(
+ "--build-tests"
+ "--use-xvfb"
+ )
+ fi
+
+ if ! use tools; then
+ MAIN_DISTUTILS_ARGS+=(
+ "--no-qt-tools"
+ )
+ fi
+}
+
+python_compile() {
+ DISTUTILS_ARGS=(
+ "${MAIN_DISTUTILS_ARGS[@]}"
+ --build-type=shiboken6-generator
+ )
+ distutils-r1_python_compile
+
+ # The build system uses its own build dir, find the name of this dir.
+ local pyside_build_dir
+ read -r pyside_build_dir < <(
+ find "${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))" \
+ -maxdepth 1 -type d -name 'qfp*-py*-qt*-*' -printf "%f\n"
+ )
+ export pyside_build_id="${pyside_build_dir#"qfp$(usev debug d)-py${EPYTHON#python}-qt$(ver_cut 1-3)-"}"
+ export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package:${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
+
+ DISTUTILS_ARGS=(
+ "${MAIN_DISTUTILS_ARGS[@]}"
+ --reuse-build
+ --shiboken-target-path="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package/shiboken6_generator"
+ --build-type=shiboken6
+ )
+ distutils-r1_python_compile
+ export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package:${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
+
+ # Copy shiboken6_generator files to shiboken6 package so we can reuse the shiboken-target-path
+ rsync -ur "${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-2))/${pyside_build_dir}/package/shiboken6_generator/"* "${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package/shiboken6/" || die
+ ln -s shiboken6 "${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package/shiboken6_generator" || die
+
+ # If no pyside modules enabled, build just shiboken
+ if [[ ${#ENABLED_QT_MODULES[@]} -gt 0 ]]; then
+ DISTUTILS_ARGS=(
+ "${MAIN_DISTUTILS_ARGS[@]}"
+ --reuse-build
+ --shiboken-target-path="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package/shiboken6"
+ --build-type=pyside6
+ )
+ distutils-r1_python_compile
+ export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package:${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
+ fi
+
+ # Link libraries to the usual location for backwards compatibility
+ pushd "${BUILD_DIR}/install/$(python_get_sitedir)" >/dev/null ||
+ die
+ mkdir -p "${BUILD_DIR}/install/usr/$(get_libdir)" || die
+ local lib
+ for lib in */*.cpython-*.so
+ do
+ local base=${lib##*/}
+ ln -s "${base}" "${lib%/*}/${base%%.*}-${EPYTHON}.so" ||
+ die
+ done
+ for lib in */*.cpython-*.so."$(ver_cut 1-2)"
+ do
+ local base=${lib##*/}
+ ln -s "${base}" "${lib%/*}/${base%%.*}-${EPYTHON}.so.$(ver_cut 1-2)" ||
+ die
+ done
+ for lib in */*.so*; do
+ ln -s "../../$(python_get_sitedir)/${lib}" \
+ "${BUILD_DIR}/install/usr/$(get_libdir)/${lib#*/}" || die
+ done
+ popd >/dev/null || die
+
+ # Symlinks for compatibility with pypi wheels
+ local dir
+ if [[ -d ${BUILD_DIR}/install/$(python_get_sitedir)/PySide6 ]]
+ then
+ pushd "${BUILD_DIR}/install/$(python_get_sitedir)/PySide6" \
+ >/dev/null || die
+ mkdir -p "${BUILD_DIR}/install/usr/share/PySide6" || die
+ for dir in doc glue typesystems; do
+ ln -s "../../../$(python_get_sitedir)/PySide6/${dir}" \
+ "${BUILD_DIR}/install/usr/share/PySide6/${dir}" ||
+ die
+ done
+ popd >/dev/null || die
+ fi
+ mkdir -p "${BUILD_DIR}/install/usr/include"
+ for dir in PySide6 shiboken6 shiboken6_generator; do
+ if [[ -d ${BUILD_DIR}/install/$(python_get_sitedir)/${dir}/include ]]
+ then
+ ln -s "../../$(python_get_sitedir)/${dir}/include" \
+ "${BUILD_DIR}/install/usr/include/${dir//_generator}" ||
+ die
+ fi
+ done
+
+ # Install misc files from inner install dir
+ find "${BUILD_DIR}"/build*/"${pyside_build_dir}"/install -type f \
+ -name libPySidePlugin.so -exec \
+ mkdir -p "${BUILD_DIR}/install/$(qt6_get_plugindir)/designer/" \; \
+ -exec \
+ cp "{}" "${BUILD_DIR}/install/$(qt6_get_plugindir)/designer/" \; \
+ || die
+
+ for dir in cmake pkgconfig; do
+ find "${BUILD_DIR}"/build*/"${pyside_build_dir}"/install -type d -name "${dir}" \
+ -exec cp -r "{}" "${BUILD_DIR}/install/usr/lib/" \; \
+ || die
+ done
+
+ # Uniquify the pkgconfigs file for the current Python target,
+ # preserving an unversioned "shiboken6.pc" file arbitrarily
+ # associated with the last Python target.
+ if [[ -f ${BUILD_DIR}/install/usr/lib/pkgconfig/shiboken6.pc ]]
+ then
+ sed -e 's~prefix=.*~prefix=/usr~g' \
+ -e 's~exec_prefix=.*~exec_prefix=${prefix}~g' \
+ -e "s~libdir=.*~libdir=$(python_get_sitedir)/shiboken6~g" \
+ -e "s~includedir=.*~includedir=$(python_get_sitedir)/shiboken6_generator/include~g" \
+ -i "${BUILD_DIR}/install/usr/lib/pkgconfig/shiboken6.pc" || die
+ cp "${BUILD_DIR}/install/usr/lib/pkgconfig/"shiboken6{,-${EPYTHON}}.pc || die
+ fi
+ if [[ -f ${BUILD_DIR}/install/usr/lib/pkgconfig/pyside6.pc ]]
+ then
+ sed -e 's~^Requires: shiboken6$~&-'${EPYTHON}'~' \
+ -e 's~prefix=.*~prefix=/usr~g' \
+ -e 's~exec_prefix=.*~exec_prefix=${prefix}~g' \
+ -e "s~libdir=.*~libdir=$(python_get_sitedir)/PySide6~g" \
+ -e "s~includedir=.*~includedir=$(python_get_sitedir)/PySide6/include~g" \
+ -e "s~typesystemdir=.*~typesystemdir=$(python_get_sitedir)/PySide6/typesystems~g" \
+ -e "s~gluedir=.*~gluedir=$(python_get_sitedir)/PySide6/glue~g" \
+ -e "s~pythonpath=.*~pythonpath=$(python_get_sitedir)~g" \
+ -i "${BUILD_DIR}/install/usr/lib/pkgconfig/pyside6.pc" || die
+ cp "${BUILD_DIR}/install/usr/lib/pkgconfig/"pyside6{,-${EPYTHON}}.pc || die
+ fi
+
+ # _IMPORT_PREFIX breaks on split-usr/merged-usr plus weird random issues.
+ # These are not duplicates, the generated files are somehow different on
+ # different systems.
+ sed \
+ -e "s~\${_IMPORT_PREFIX}/lib/libshiboken6\.cpython~/usr/$(get_libdir)/libshiboken6\.cpython~g" \
+ -e "s~\${_IMPORT_PREFIX}/shiboken6/libshiboken6\.cpython~/usr/$(get_libdir)/libshiboken6\.cpython~g" \
+ -e "s~\${_IMPORT_PREFIX}/bin/shiboken6~/usr/bin/shiboken6~g" \
+ -e "s~\${_IMPORT_PREFIX}/shiboken6_generator/shiboken6~/usr/bin/shiboken6~g" \
+ -e "s~\${_IMPORT_PREFIX}/lib/libpyside6\.cpython~/usr/$(get_libdir)/libpyside6\.cpython~g" \
+ -e "s~\${_IMPORT_PREFIX}/PySide6/libpyside6\.cpython~/usr/$(get_libdir)/libpyside6\.cpython~g" \
+ -e "s~\${_IMPORT_PREFIX}/lib/libpyside6qml\.cpython~/usr/$(get_libdir)/libpyside6qml\.cpython~g" \
+ -e "s~\${_IMPORT_PREFIX}/PySide6/libpyside6qml\.cpython~/usr/$(get_libdir)/libpyside6qml\.cpython~g" \
+ -e "s~libshiboken6\.cpython.*\.so\.$(ver_cut 1-3)~libshiboken6\${PYTHON_CONFIG_SUFFIX}\.so\.$(ver_cut 1-2)~g" \
+ -e "s~libpyside6\.cpython.*\.so\.$(ver_cut 1-3)~libpyside6\${PYTHON_CONFIG_SUFFIX}\.so\.$(ver_cut 1-2)~g" \
+ -e "s~libpyside6qml\.cpython.*\.so\.$(ver_cut 1-3)~libpyside6qml\${PYTHON_CONFIG_SUFFIX}\.so\.$(ver_cut 1-2)~g" \
+ -e "s~libshiboken6\.cpython.*\.so\.$(ver_cut 1-2)~libshiboken6\${PYTHON_CONFIG_SUFFIX}\.so\.$(ver_cut 1-2)~g" \
+ -e "s~libpyside6\.cpython.*\.so\.$(ver_cut 1-2)~libpyside6\${PYTHON_CONFIG_SUFFIX}\.so\.$(ver_cut 1-2)~g" \
+ -e "s~libpyside6qml\.cpython.*\.so\.$(ver_cut 1-2)~libpyside6qml\${PYTHON_CONFIG_SUFFIX}\.so\.$(ver_cut 1-2)~g" \
+ -e "s~\${PACKAGE_PREFIX_DIR}/~\${PACKAGE_PREFIX_DIR}/share/PySide6/~g" \
+ -e "s~\${_IMPORT_PREFIX}/shiboken6/include~/usr/include/shiboken6~g" \
+ -e "s~\${_IMPORT_PREFIX}/PySide6/include~/usr/include/PySide6~g" \
+ -i "${BUILD_DIR}/install/usr/lib/cmake/"*/*.cmake || die
+ local file
+ for file in "${BUILD_DIR}/install/usr/lib/cmake/"*/*.cpython-*.cmake
+ do
+ local base=${file##*/}
+ ln -s "${base}" "${file%/*}/${base%%.*}-${EPYTHON}.cmake" ||
+ die
+ done
+}
+
+python_test() {
+ # Otherwise it picks the last built directory breaking assumption for multi target builds
+ local pyside_build_dir="qfp$(usev debug d)-py${EPYTHON#python}-qt$(ver_cut 1-3)-${pyside_build_id}"
+
+ local buildno=$(find "${BUILD_DIR}"/build* -name "${pyside_build_dir}" | sort -V | tail -n1)
+ if [[ -z "${buildno}" ]]; then
+ die "could not find any build directories for ${pyside_build_dir}"
+ fi
+
+ buildno="${buildno#"${BUILD_DIR}/build"}"
+ buildno="${buildno%"/${pyside_build_dir}"}"
+
+ local -x PYTHONPATH="${BUILD_DIR}/install$(python_get_sitedir)"
+ local -x QTEST_ENVIRONMENT=ci
+
+ # test shiboken6 build
+ virtx ${EPYTHON} testrunner.py test --buildno "$((buildno - 1))" --projects=shiboken6 ||
+ die "Tests failed with ${EPYTHON}"
+
+ if use core; then
+ # test pyside6 build
+ virtx ${EPYTHON} testrunner.py test --buildno "${buildno}" --projects=pyside6 ||
+ die "Tests failed with ${EPYTHON}"
+ fi
+}
+
+pkg_preinst() {
+ # Avoid symlinks being blocked by directories
+ rm -rf "${EROOT}/usr/include/"{PySide6,shiboken6} || die
+ rm -rf "${EROOT}/usr/share/PySide6" || die
+}
diff --git a/dev-python/pyside/pyside-6.9999.ebuild b/dev-python/pyside/pyside-6.9999.ebuild
index 3dcde577062c..b887f9bf9212 100644
--- a/dev-python/pyside/pyside-6.9999.ebuild
+++ b/dev-python/pyside/pyside-6.9999.ebuild
@@ -9,7 +9,7 @@
EAPI=8
PYTHON_COMPAT=( python3_{10..14} )
-LLVM_COMPAT=( {16..21} )
+LLVM_COMPAT=( {18..22} )
DISTUTILS_USE_PEP517=setuptools
DISTUTILS_EXT=1
@@ -85,8 +85,9 @@ declare -A QT_MODULES=(
# Manually reextract these requirements on version bumps by running the
# following one-liner from within "${S}":
-# $ grep 'set.*_deps' PySide6/Qt*/CMakeLists.txt
+# $ grep -E '(set|list).*_deps' sources/pyside6/PySide6/Qt*/CMakeLists.txt
declare -A QT_REQUIREMENTS=(
+ # opengl not unconditionally required but is needed to get the correct build order
["3d"]="gui network opengl"
["bluetooth"]="core"
["charts"]="core gui widgets"
@@ -107,6 +108,7 @@ declare -A QT_REQUIREMENTS=(
["positioning"]="core"
["printsupport"]="widgets"
["qml"]="network"
+ # opengl not unconditionally required but is needed to get the correct build order
["quick"]="gui network qml opengl"
["quick3d"]="gui network qml quick"
["remoteobjects"]="core network"
@@ -121,6 +123,7 @@ declare -A QT_REQUIREMENTS=(
["testlib"]="widgets"
["uitools"]="widgets"
["webchannel"]="core"
+ # quick not unconditionally required but is needed to get the correct build order
["webengine"]="core gui network printsupport quick webchannel"
["websockets"]="network"
["webview"]="gui quick webengine"
@@ -213,7 +216,7 @@ DEPEND="${RDEPEND}
BDEPEND="
dev-build/cmake
dev-python/distro[${PYTHON_USEDEP}]
- <dev-python/wheel-0.46.0[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
dev-util/patchelf
doc? (
>=dev-libs/libxml2-2.6.32
@@ -223,11 +226,10 @@ BDEPEND="
dev-python/myst-parser[${PYTHON_USEDEP}]
)
numpy? ( dev-python/numpy[${PYTHON_USEDEP}] )
+ test? ( dev-python/pkginfo[${PYTHON_USEDEP}] )
"
PATCHES=(
- # Needs porting to newer wheel and setuptools
- "${FILESDIR}/${PN}-6.8.2-quick-fix-build-wheel.patch"
"${FILESDIR}/${PN}-6.10.0-dont-vendor-ffmpeg.patch"
"${FILESDIR}/${PN}-6.10.1-pass-ninja-opts.patch"
)
@@ -243,7 +245,7 @@ python_prepare_all() {
# Shiboken6 assumes Vulkan headers live under either "$VULKAN_SDK/include"
# or "$VK_SDK_PATH/include" rather than "${EPREFIX}/usr/include/vulkan".
sed -i -e "s~\bdetectVulkan(&headerPaths);~headerPaths.append(HeaderPath{QByteArrayLiteral(\"${EPREFIX}/usr/include/vulkan\"), HeaderType::System});~" \
- sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp || die
+ sources/shiboken6_generator/ApiExtractor/clangparser/compilersupport.cpp || die
# Shiboken6 assumes the "/usr/lib/clang/${CLANG_NEWEST_VERSION}/include/"
# subdirectory provides Clang builtin includes (e.g., "stddef.h") for the
@@ -262,7 +264,7 @@ python_prepare_all() {
# https://bugs.gentoo.org/619490
sed -e \
's~(findClangBuiltInIncludesDir())~(QStringLiteral("'"${EPREFIX}"'/usr/lib/clang/'"${LLVM_SLOT}"'/include"))~' \
- -i sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp || die
+ -i sources/shiboken6_generator/ApiExtractor/clangparser/compilersupport.cpp || die
sed -e \
's~set(libclang_directory_suffix "lib")~set(libclang_directory_suffix "'"$(get_libdir)"'")~' \
@@ -291,6 +293,9 @@ python_prepare_all() {
# py3.14?
[sample::multiple_derived]
linux
+ # Doesn't appear to play well with virtualx as it tries to use wayland
+ [QtWidgets::qapp_issue_585]
+ linux
EOF
if ! use numpy; then
@@ -400,7 +405,7 @@ python_configure_all() {
python_compile() {
DISTUTILS_ARGS=(
"${MAIN_DISTUTILS_ARGS[@]}"
- --build-type=shiboken6
+ --build-type=shiboken6-generator
)
distutils-r1_python_compile
@@ -411,27 +416,31 @@ python_compile() {
-maxdepth 1 -type d -name 'qfp*-py*-qt*-*' -printf "%f\n"
)
export pyside_build_id="${pyside_build_dir#"qfp$(usev debug d)-py${EPYTHON#python}-qt$(ver_cut 1-3)-"}"
- export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
+ export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package:${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
DISTUTILS_ARGS=(
"${MAIN_DISTUTILS_ARGS[@]}"
--reuse-build
- --shiboken-target-path="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install"
- --build-type=shiboken6-generator
+ --shiboken-target-path="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package/shiboken6_generator"
+ --build-type=shiboken6
)
distutils-r1_python_compile
- export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
+ export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package:${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
+
+ # Copy shiboken6_generator files to shiboken6 package so we can reuse the shiboken-target-path
+ rsync -ur "${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-2))/${pyside_build_dir}/package/shiboken6_generator/"* "${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package/shiboken6/" || die
+ ln -s shiboken6 "${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package/shiboken6_generator" || die
# If no pyside modules enabled, build just shiboken
if [[ ${#ENABLED_QT_MODULES[@]} -gt 0 ]]; then
DISTUTILS_ARGS=(
"${MAIN_DISTUTILS_ARGS[@]}"
--reuse-build
- --shiboken-target-path="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install"
+ --shiboken-target-path="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package/shiboken6"
--build-type=pyside6
)
distutils-r1_python_compile
- export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
+ export PYTHONPATH="${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/package:${BUILD_DIR}/build$((${#DISTUTILS_WHEELS[@]}-1))/${pyside_build_dir}/install/lib/${EPYTHON}/site-packages:${PYTHONPATH}"
fi
# Link libraries to the usual location for backwards compatibility
@@ -542,7 +551,7 @@ python_compile() {
-e "s~\${PACKAGE_PREFIX_DIR}/~\${PACKAGE_PREFIX_DIR}/share/PySide6/~g" \
-e "s~\${_IMPORT_PREFIX}/shiboken6/include~/usr/include/shiboken6~g" \
-e "s~\${_IMPORT_PREFIX}/PySide6/include~/usr/include/PySide6~g" \
- -i "${BUILD_DIR}/install/usr/lib/cmake/"*/*.cmake || die
+ -i "${BUILD_DIR}/install/usr/lib/cmake/"*/*.cmake || die
local file
for file in "${BUILD_DIR}/install/usr/lib/cmake/"*/*.cpython-*.cmake
do