diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2022-02-08 20:55:08 +0100 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2022-02-08 20:58:29 +0100 |
commit | dd788798d12a04fb9c052c5df2d111a052e07ab0 (patch) | |
tree | 0ed3b8ecfe55fa98838666f36229a48e2ebaf8e4 /dev-qt | |
parent | app-shells/bash: Stabilize 5.1_p16 arm64, #832876 (diff) | |
download | gentoo-dd788798d12a04fb9c052c5df2d111a052e07ab0.tar.gz gentoo-dd788798d12a04fb9c052c5df2d111a052e07ab0.tar.bz2 gentoo-dd788798d12a04fb9c052c5df2d111a052e07ab0.zip |
dev-qt/qtwayland: Add upstream-pending fixes in advance
- client: Gracefully handle shutdown and window hiding
- Use proper dependencies in compile tests
- Client: Remove mWaitingForUpdateDelivery
- Wayland mutex fixes
See also:
https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/23
https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/33
https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/35
https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/34
KDE-bug: https://bugs.kde.org/show_bug.cgi?id=449163
QTBUG: https://bugreports.qt.io/browse/QTBUG-91264
QTBUG: https://bugreports.qt.io/browse/QTBUG-90037
QTBUG: https://bugreports.qt.io/browse/QTBUG-100475
Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'dev-qt')
7 files changed, 513 insertions, 0 deletions
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest index b5b66bd5c2dd..2ff54b09a0bf 100644 --- a/dev-qt/qtwayland/Manifest +++ b/dev-qt/qtwayland/Manifest @@ -1,2 +1,3 @@ DIST qtwayland-5.15.2-4644d51f.tar.gz 831697 BLAKE2B c3d60416ef71030018918ec5157122e2585d270d5aa1a74d66874a33f14f0c4ac85da5a1dd7bfb422a1090f79e5d2c08763c68fe724416b34bad16f945d1740c SHA512 e350396e9bdfa6f0fda938af74c722792d50473eb3d786442ba11919e7801f0cd8d045916c8e49d8a63ffd966376cb74e7cc1c3d4d1732e71061fb8343a497d3 DIST qtwayland-5.15.2-867540b9.tar.gz 830061 BLAKE2B b831288d6a3e671631b4df00eb1edb72e35128f3ed5a73983b3e15193f554fddcd0337deb832d44b795d2e37f0601fe35b8b0fcb5986bcc44154d172f3a54193 SHA512 b834802811d9f65559ef5e7468189b53c666e390aa09edeb490e5fee2dece13082b11da0f8b5924b89f7dc8e1eba375a485940f4dfbf0445f3d1e96033e33f24 +DIST qtwayland-5.15.2-ce2caf49.tar.gz 831808 BLAKE2B af7006f3ce5bb262710c5405f20107239140afe5c7f2b8b10ac834b7e41076a274adbf34152cba3fed19538f653f70faffb1255e622b8607d34f5a4695603461 SHA512 8eaf58da68311b072f5d0192444dafc5819971807682bb85f2316c10e4e64a735a95b05a0a5c1e4a66542702281deb364a6470f6bd0ea042818edb5a9b0396fb diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-QTBUG-90037-QTBUG-91264.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-QTBUG-90037-QTBUG-91264.patch new file mode 100644 index 000000000000..8bffa3e08b3e --- /dev/null +++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-QTBUG-90037-QTBUG-91264.patch @@ -0,0 +1,131 @@ +From d7b34dbf072236cdfb3b64e5ad26d1ff29dfec5f Mon Sep 17 00:00:00 2001 +From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> +Date: Thu, 22 Apr 2021 08:42:33 +0200 +Subject: client: Gracefully handle shutdown and window hiding + +When a window is hidden or destroyed, the render thread may already +be rendering. We need to properly read-lock the surface pointer +when it is in use and exit when it becomes null. + +Note that there is also a potential crash in the Mesa GL driver +where it keeps a proxy to the wl_surface, so if we delete this +while we are still rendering, it can crash inside the driver. +This is not addressed by this patch, and has not been reproduced +on any other drivers so far. + +[ChangeLog][Client] Fixed a crash that could happen when hiding +or closing windows while Qt Quick was actively rendering on +a different thread. + +Pick-to: 6.0 6.1 5.15 +Fixes: QTBUG-91264 +Fixes: QTBUG-90037 +Task-number: QTBUG-92249 +Change-Id: I029b123b83c58740321e8b90a463ced748d8bcf4 +Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> +Reviewed-by: David Edmundson <davidedmundson@kde.org> +(cherry picked from commit b19b0fbaf775e8b8eda1e03c265a5393d618c6c0) +--- + src/client/qwaylandwindow.cpp | 17 ++++++++++++++++- + src/client/qwaylandwindow_p.h | 2 +- + .../client/wayland-egl/qwaylandglcontext.cpp | 1 - + 3 files changed, 17 insertions(+), 3 deletions(-) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 494911b3..0d849b57 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -414,6 +414,7 @@ void QWaylandWindow::closePopups(QWaylandWindow *parent) + + QPlatformScreen *QWaylandWindow::calculateScreenFromSurfaceEvents() const + { ++ QReadLocker lock(&mSurfaceLock); + if (mSurface) { + if (auto *screen = mSurface->oldestEnteredScreen()) + return screen; +@@ -552,6 +553,10 @@ void QWaylandWindow::sendRecursiveExposeEvent() + + void QWaylandWindow::attach(QWaylandBuffer *buffer, int x, int y) + { ++ QReadLocker locker(&mSurfaceLock); ++ if (mSurface == nullptr) ++ return; ++ + if (buffer) { + Q_ASSERT(!buffer->committed()); + handleUpdate(); +@@ -571,6 +576,10 @@ void QWaylandWindow::attachOffset(QWaylandBuffer *buffer) + + void QWaylandWindow::damage(const QRect &rect) + { ++ QReadLocker locker(&mSurfaceLock); ++ if (mSurface == nullptr) ++ return; ++ + const int s = scale(); + if (mDisplay->compositorVersion() >= 4) + mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height()); +@@ -605,6 +614,8 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage) + qCDebug(lcWaylandBackingstore) << "Buffer already committed, ignoring."; + return; + } ++ ++ QReadLocker locker(&mSurfaceLock); + if (!mSurface) + return; + +@@ -624,7 +635,9 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage) + + void QWaylandWindow::commit() + { +- mSurface->commit(); ++ QReadLocker locker(&mSurfaceLock); ++ if (mSurface != nullptr) ++ mSurface->commit(); + } + + const wl_callback_listener QWaylandWindow::callbackListener = { +@@ -725,6 +738,7 @@ QPointF QWaylandWindow::mapFromWlSurface(const QPointF &surfacePosition) const + + wl_surface *QWaylandWindow::wlSurface() + { ++ QReadLocker locker(&mSurfaceLock); + return mSurface ? mSurface->object() : nullptr; + } + +@@ -749,6 +763,7 @@ QWaylandScreen *QWaylandWindow::waylandScreen() const + + void QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation orientation) + { ++ QReadLocker locker(&mSurfaceLock); + if (mDisplay->compositorVersion() < 2) + return; + +diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h +index d45980a8..54ac67a9 100644 +--- a/src/client/qwaylandwindow_p.h ++++ b/src/client/qwaylandwindow_p.h +@@ -288,7 +288,7 @@ private: + + static QWaylandWindow *mMouseGrab; + +- QReadWriteLock mSurfaceLock; ++ mutable QReadWriteLock mSurfaceLock; + + friend class QWaylandSubSurface; + }; +diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp +index 683fe123..8f12736d 100644 +--- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp ++++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp +@@ -192,7 +192,6 @@ public: + } + void blit(QWaylandEglWindow *window) + { +- Q_ASSERT(window->wlSurface()); + QOpenGLTextureCache *cache = QOpenGLTextureCache::cacheForContext(m_context->context()); + + QSize surfaceSize = window->surfaceSize(); +-- +2.35.0 + diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-fix-qmake-deps.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-fix-qmake-deps.patch new file mode 100644 index 000000000000..e0c18228ed0f --- /dev/null +++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-fix-qmake-deps.patch @@ -0,0 +1,126 @@ +From 3b72261b8b06397a532a40e41103c6b7a44e3ab5 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt <fabian@ritter-vogt.de> +Date: Fri, 4 Feb 2022 11:07:36 +0100 +Subject: [PATCH] Use proper dependencies in compile tests + +Use the dependencies as found by the "libraries" section instead of relying +on them being available in the default location (e.g. "-ldrm"). + +Additionally, VK_USE_PLATFORM_WAYLAND_KHR requires <wayland-client.h>, so +add the wayland-client dependency. + +This fixes those tests if e.g. wayland-client headers need to be found through +pkgconfig. + +This part of the code changed completely in Qt 6, so this is a totally +different patch and not a cherry-pick of 5fc2e1915c3a +("CMake: Fix qtwayland feature detection"). + +Fixes: QTBUG-100475 +--- + src/client/configure.json | 8 ++++---- + src/compositor/configure.json | 34 +++++++++++++++++++++++++++++----- + 2 files changed, 33 insertions(+), 9 deletions(-) + +diff --git a/src/client/configure.json b/src/client/configure.json +index 2f424580..29222357 100644 +--- a/src/client/configure.json ++++ b/src/client/configure.json +@@ -149,8 +149,7 @@ + "#endif" + ] + }, +- "libs": "-ldrm", +- "use": "egl" ++ "use": "drm egl" + }, + "vulkan-server-buffer": { + "label": "Vulkan Buffer Sharing", +@@ -168,7 +167,8 @@ + "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;", + "return 0;" + ] +- } ++ }, ++ "use": "wayland-client" + }, + "egl_1_5-wayland": { + "label": "EGL 1.5 with Wayland Platform", +@@ -183,7 +183,7 @@ + "eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr);" + ] + }, +- "use": "egl" ++ "use": "egl wayland-client" + } + }, + +diff --git a/src/compositor/configure.json b/src/compositor/configure.json +index bcfd5215..da95d07b 100644 +--- a/src/compositor/configure.json ++++ b/src/compositor/configure.json +@@ -7,6 +7,31 @@ + "testDir": "../../config.tests", + + "libraries": { ++ "wayland-client": { ++ "label": "Wayland client library", ++ "headers": "wayland-version.h", ++ "test": { ++ "main": [ ++ "#if WAYLAND_VERSION_MAJOR < 1", ++ "# error Wayland 1.8.0 or higher required", ++ "#endif", ++ "#if WAYLAND_VERSION_MAJOR == 1", ++ "# if WAYLAND_VERSION_MINOR < 8", ++ "# error Wayland 1.8.0 or higher required", ++ "# endif", ++ "# if WAYLAND_VERSION_MINOR == 8", ++ "# if WAYLAND_VERSION_MICRO < 0", ++ "# error Wayland 1.8.0 or higher required", ++ "# endif", ++ "# endif", ++ "#endif" ++ ] ++ }, ++ "sources": [ ++ { "type": "pkgConfig", "args": "wayland-client" }, ++ "-lwayland-client" ++ ] ++ }, + "wayland-server": { + "label": "wayland-server", + "headers": "wayland-version.h", +@@ -151,8 +176,7 @@ + "#endif" + ] + }, +- "libs": "-ldrm", +- "use": "egl" ++ "use": "drm egl" + }, + "dmabuf-client-buffer": { + "label": "Linux Client dma-buf Buffer Sharing", +@@ -176,8 +200,7 @@ + "return 0;" + ] + }, +- "libs": "-ldrm", +- "use": "egl" ++ "use": "drm egl" + }, + "vulkan-server-buffer": { + "label": "Vulkan Buffer Sharing", +@@ -195,7 +218,8 @@ + "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;", + "return 0;" + ] +- } ++ }, ++ "use": "wayland-client" + } + }, + +-- +GitLab + diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-fixup-mutexes.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-fixup-mutexes.patch new file mode 100644 index 000000000000..b861cebe60ac --- /dev/null +++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-fixup-mutexes.patch @@ -0,0 +1,87 @@ +From bf4335b1ea9b179076cbd7a1c2e8cfa9538b1dc1 Mon Sep 17 00:00:00 2001 +From: David Edmundson <davidedmundson@kde.org> +Date: Thu, 3 Feb 2022 14:27:08 +0000 +Subject: [PATCH] Fix up mutexes for frame callbacks + +Everything related to frame callback timings is used by potentially 3 +threads. Access needs guarding. + +Change-Id: I9f22390c175d9f2f63d31b1ebf0cdc0b830be937 +--- + src/client/qwaylandwindow.cpp | 14 +++++++++----- + src/client/qwaylandwindow_p.h | 10 +++++++--- + 2 files changed, 16 insertions(+), 8 deletions(-) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 7aee362a..72e0e601 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -256,8 +256,12 @@ void QWaylandWindow::reset() + mFrameCallback = nullptr; + } + +- mFrameCallbackElapsedTimer.invalidate(); +- mWaitingForFrameCallback = false; ++ { ++ QMutexLocker locker(&mFrameSyncMutex); ++ mFrameCallbackElapsedTimer.invalidate(); ++ mWaitingForFrameCallback = false; ++ } ++ + mFrameCallbackTimedOut = false; + + mMask = QRegion(); +@@ -1142,6 +1146,7 @@ QVariant QWaylandWindow::property(const QString &name, const QVariant &defaultVa + + void QWaylandWindow::timerEvent(QTimerEvent *event) + { ++ QMutexLocker locker(&mFrameSyncMutex); + if (event->timerId() != mFrameCallbackCheckIntervalTimerId) + return; + +@@ -1200,15 +1205,14 @@ void QWaylandWindow::handleUpdate() + { + qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread(); + +- if (mWaitingForFrameCallback) +- return; +- + // TODO: Should sync subsurfaces avoid requesting frame callbacks? + QReadLocker lock(&mSurfaceLock); + if (!mSurface) + return; + + QMutexLocker locker(&mFrameSyncMutex); ++ if (mWaitingForFrameCallback) ++ return; + + struct ::wl_surface *wrappedSurface = reinterpret_cast<struct ::wl_surface *>(wl_proxy_create_wrapper(mSurface->object())); + wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrappedSurface), mDisplay->frameEventQueue()); +diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h +index 3ff68ccb..025d7917 100644 +--- a/src/client/qwaylandwindow_p.h ++++ b/src/client/qwaylandwindow_p.h +@@ -226,13 +226,17 @@ protected: + Qt::MouseButtons mMousePressedInContentArea = Qt::NoButton; + + WId mWindowId; ++ ++ // The following are used by the main thread the render thread and the event frame thread ++ // Access should be guarded by mFrameSyncMutex ++ QMutex mFrameSyncMutex; ++ QWaitCondition mFrameSyncWait; + bool mWaitingForFrameCallback = false; +- bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out + int mFrameCallbackCheckIntervalTimerId = -1; + QElapsedTimer mFrameCallbackElapsedTimer; ++ ++ bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out + struct ::wl_callback *mFrameCallback = nullptr; +- QMutex mFrameSyncMutex; +- QWaitCondition mFrameSyncWait; + + // True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer + bool mWaitingForUpdate = false; +-- +GitLab + diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-guard-mResizeDirty.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-guard-mResizeDirty.patch new file mode 100644 index 000000000000..c2e377cff054 --- /dev/null +++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-guard-mResizeDirty.patch @@ -0,0 +1,37 @@ +From 2e2042aa18efd1389a140a5d0028d8359bd455a7 Mon Sep 17 00:00:00 2001 +From: David Edmundson <davidedmundson@kde.org> +Date: Thu, 3 Feb 2022 19:42:33 +0000 +Subject: [PATCH] Guard mResizeDirty by the correctMutex + +mResizeDirty is used in the GUI thread in setCanResize which can be +called from the GUI thread. It is queried and set whilst the resizeLock +is held. We need to guard our usage. + +Change-Id: I5f8dcf8aa2cb2c4bb6274103df1da9e3e268605a +--- + src/client/qwaylandwindow.cpp | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 949374b1..7aee362a 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -357,11 +357,12 @@ void QWaylandWindow::setGeometry(const QRect &rect) + if (mWindowDecoration) + mWindowDecoration->update(); + +- if (mResizeAfterSwap && windowType() == Egl && mSentInitialResize) ++ if (mResizeAfterSwap && windowType() == Egl && mSentInitialResize) { ++ QMutexLocker lock(&mResizeLock); + mResizeDirty = true; +- else ++ } else { + QWindowSystemInterface::handleGeometryChange(window(), geometry()); +- ++ } + mSentInitialResize = true; + } + QRect exposeGeometry(QPoint(), geometry().size()); +-- +GitLab + diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-remove-mWaitingForUpdateDelivery.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-remove-mWaitingForUpdateDelivery.patch new file mode 100644 index 000000000000..a76b15d39cac --- /dev/null +++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-remove-mWaitingForUpdateDelivery.patch @@ -0,0 +1,79 @@ +From 214f7ab9d3384a4123f14d9f6cd0205cf0aaa794 Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii <vlad.zahorodnii@kde.org> +Date: Tue, 1 Feb 2022 13:05:36 +0200 +Subject: [PATCH] Client: Remove mWaitingForUpdateDelivery + +Currently, mWaitingForUpdateDelivery is shared between the main thread +(doHandleFrameCallback()) and the frame callback event thread +(handleFrameCallback()), however the access to it is not synchronized +between both threads. On the other hand, QWaylandWindow +already ensures not to create a frame callback if there's already one +pending. + +This change removes mWaitingForUpdateDelivery flag because it should be +already covered by mWaitingForFrameCallback and to remove unsynchronized +shared state between threads. + +Change-Id: I0e5a25d18d1e66c4d7683e7e972330c4d7cbbf38 +Reviewed-by: David Edmundson <davidedmundson@kde.org> +(cherry picked from commit feb1a5c207c13d0bf87c0d8ad039279dbf8cee9e) +--- + src/client/qwaylandwindow.cpp | 29 ++++++++++++----------------- + src/client/qwaylandwindow_p.h | 1 - + 2 files changed, 12 insertions(+), 18 deletions(-) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 4c5711a0..949374b1 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -648,23 +648,18 @@ void QWaylandWindow::handleFrameCallback() + mFrameCallbackElapsedTimer.invalidate(); + + // The rest can wait until we can run it on the correct thread +- if (!mWaitingForUpdateDelivery) { +- auto doHandleExpose = [this]() { +- bool wasExposed = isExposed(); +- mFrameCallbackTimedOut = false; +- if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed? +- sendExposeEvent(QRect(QPoint(), geometry().size())); +- if (wasExposed && hasPendingUpdateRequest()) +- deliverUpdateRequest(); +- +- mWaitingForUpdateDelivery = false; +- }; +- +- // Queued connection, to make sure we don't call handleUpdate() from inside waitForFrameSync() +- // in the single-threaded case. +- mWaitingForUpdateDelivery = true; +- QMetaObject::invokeMethod(this, doHandleExpose, Qt::QueuedConnection); +- } ++ auto doHandleExpose = [this]() { ++ bool wasExposed = isExposed(); ++ mFrameCallbackTimedOut = false; ++ if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed? ++ sendExposeEvent(QRect(QPoint(), geometry().size())); ++ if (wasExposed && hasPendingUpdateRequest()) ++ deliverUpdateRequest(); ++ }; ++ ++ // Queued connection, to make sure we don't call handleUpdate() from inside waitForFrameSync() ++ // in the single-threaded case. ++ QMetaObject::invokeMethod(this, doHandleExpose, Qt::QueuedConnection); + + mFrameSyncWait.notify_all(); + } +diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h +index d45980a8..3ff68ccb 100644 +--- a/src/client/qwaylandwindow_p.h ++++ b/src/client/qwaylandwindow_p.h +@@ -228,7 +228,6 @@ protected: + WId mWindowId; + bool mWaitingForFrameCallback = false; + bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out +- bool mWaitingForUpdateDelivery = false; + int mFrameCallbackCheckIntervalTimerId = -1; + QElapsedTimer mFrameCallbackElapsedTimer; + struct ::wl_callback *mFrameCallback = nullptr; +-- +GitLab + diff --git a/dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild b/dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild new file mode 100644 index 000000000000..2761a297bc7b --- /dev/null +++ b/dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild @@ -0,0 +1,52 @@ +# Copyright 1999-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +KDE_ORG_COMMIT=ce2caf493a1343fbd9f8e4c85baf6a61c057f242 +inherit qt5-build + +DESCRIPTION="Wayland platform plugin for Qt" + +if [[ ${QT5_BUILD_TYPE} == release ]]; then + KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~sparc ~x86" +fi + +SLOT=5/${QT5_PV} # bug 815646 +IUSE="vulkan X" + +DEPEND=" + dev-libs/wayland + =dev-qt/qtcore-${QT5_PV}*:5= + =dev-qt/qtdeclarative-${QT5_PV}*:5= + =dev-qt/qtgui-${QT5_PV}*:5=[egl,libinput,vulkan=,X?] + media-libs/libglvnd + vulkan? ( dev-util/vulkan-headers ) + X? ( + =dev-qt/qtgui-${QT5_PV}*[-gles2-only] + x11-libs/libX11 + x11-libs/libXcomposite + ) +" +RDEPEND="${DEPEND}" +BDEPEND=" + dev-util/wayland-scanner +" + +PATCHES=( + "${FILESDIR}/${P}-QTBUG-90037-QTBUG-91264.patch" + "${FILESDIR}/${P}-fix-qmake-deps.patch" + "${FILESDIR}/${P}-remove-mWaitingForUpdateDelivery.patch" + "${FILESDIR}/${P}-guard-mResizeDirty.patch" + "${FILESDIR}/${P}-fixup-mutexes.patch" +) + +src_configure() { + local myqmakeargs=( + -- + $(qt_use vulkan feature-wayland-vulkan-server-buffer) + $(qt_use X feature-xcomposite-egl) + $(qt_use X feature-xcomposite-glx) + ) + qt5-build_src_configure +} |