mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-24 06:48:18 -07:00
dev-qt/qtbase: drop 6.7.2-r5, 6.7.3-r2
Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
This commit is contained in:
@@ -1,3 +1 @@
|
||||
DIST qtbase-everywhere-src-6.7.2.tar.xz 49364504 BLAKE2B b48b8a8decafe3262d459b9446c25561851fef88b3316107c2909f5964e8122a558b5501a3e59667bdf4776d36ea5ba0d9f227538c45c1f8e94fbc8fff4244a6 SHA512 eb4b2f1fb02ab0ed5508d32449e140778278ff1a619cfcae14920b276b5c46e01a566d73fb8f84cf2cfc81e19cb11e53ab500df6b27d12ab875aa8c07bd15d6b
|
||||
DIST qtbase-everywhere-src-6.7.3.tar.xz 49426156 BLAKE2B da7eacd64bd122bf2b320c0cec41ae7630e55e0d588912bc2cc6ef7ecc755af0f375ca84c6fe0bb8381e4008da2fd43fc491c5c88ecc7694223c62700761ed37 SHA512 99495c6ed942b3a7bd19f9471bac76502baaafc20ad7e139adf25726f699c1b4deffa1ab761fe9a49a3ffe6a36d830422a20f8a369aded67a083652bf4a19290
|
||||
DIST qtbase-everywhere-src-6.8.1.tar.xz 48220752 BLAKE2B b42d562f9069cf3d68807c63492f0ae1dcb9cb9a057a8d8548a7d134b36af169e403324e2902fa59c6c82ce087add107173c7606dff952dbbbc06c33b056ddff SHA512 87b7df95a63f7c28bfc7659f19658e4151b9da55b0dc4d34dc0e04c5270254b01a72f8deac0b2fc5543fce8d7542128addb398833de9c3248196aa96b2dd1601
|
||||
|
||||
@@ -1,200 +0,0 @@
|
||||
https://bugs.gentoo.org/935869
|
||||
https://github.com/qt/qtbase/commit/2b1e36e183ce75c224305c7a94457b92f7a5cf58
|
||||
From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= <marten.nordheim@qt.io>
|
||||
Date: Tue, 25 Jun 2024 17:09:35 +0200
|
||||
Subject: [PATCH] HTTP2: Delay any communication until encrypted() can be
|
||||
responded to
|
||||
|
||||
We have the encrypted() signal that lets users do extra checks on the
|
||||
established connection. It is emitted as BlockingQueued, so the HTTP
|
||||
thread stalls until it is done emitting. Users can potentially call
|
||||
abort() on the QNetworkReply at that point, which is passed as a Queued
|
||||
call back to the HTTP thread. That means that any currently queued
|
||||
signal emission will be processed before the abort() call is processed.
|
||||
|
||||
In the case of HTTP2 it is a little special since it is multiplexed and
|
||||
the code is built to start requests as they are available. This means
|
||||
that, while the code worked fine for HTTP1, since one connection only
|
||||
has one request, it is not working for HTTP2, since we try to send more
|
||||
requests in-between the encrypted() signal and the abort() call.
|
||||
|
||||
This patch changes the code to delay any communication until the
|
||||
encrypted() signal has been emitted and processed, for HTTP2 only.
|
||||
It's done by adding a few booleans, both to know that we have to return
|
||||
early and so we can keep track of what events arose and what we need to
|
||||
resume once enough time has passed that any abort() call must have been
|
||||
processed.
|
||||
|
||||
Fixes: QTBUG-126610
|
||||
--- a/src/network/access/qhttp2protocolhandler.cpp
|
||||
+++ b/src/network/access/qhttp2protocolhandler.cpp
|
||||
@@ -304,10 +304,10 @@
|
||||
}
|
||||
|
||||
- if (!prefaceSent && !sendClientPreface())
|
||||
- return false;
|
||||
-
|
||||
if (!requests.size())
|
||||
return true;
|
||||
|
||||
+ if (!prefaceSent && !sendClientPreface())
|
||||
+ return false;
|
||||
+
|
||||
m_channel->state = QHttpNetworkConnectionChannel::WritingState;
|
||||
// Check what was promised/pushed, maybe we do not have to send a request
|
||||
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
|
||||
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
|
||||
@@ -210,4 +210,8 @@
|
||||
{
|
||||
Q_ASSERT(protocolHandler);
|
||||
+ if (waitingForPotentialAbort) {
|
||||
+ needInvokeSendRequest = true;
|
||||
+ return false; // this return value is unused
|
||||
+ }
|
||||
return protocolHandler->sendRequest();
|
||||
}
|
||||
@@ -222,7 +226,6 @@
|
||||
{
|
||||
QMetaObject::invokeMethod(this, [this] {
|
||||
- Q_ASSERT(protocolHandler);
|
||||
if (reply)
|
||||
- protocolHandler->sendRequest();
|
||||
+ sendRequest();
|
||||
}, Qt::ConnectionType::QueuedConnection);
|
||||
}
|
||||
@@ -231,4 +234,8 @@
|
||||
{
|
||||
Q_ASSERT(protocolHandler);
|
||||
+ if (waitingForPotentialAbort) {
|
||||
+ needInvokeReceiveReply = true;
|
||||
+ return;
|
||||
+ }
|
||||
protocolHandler->_q_receiveReply();
|
||||
}
|
||||
@@ -237,4 +244,8 @@
|
||||
{
|
||||
Q_ASSERT(protocolHandler);
|
||||
+ if (waitingForPotentialAbort) {
|
||||
+ needInvokeReadyRead = true;
|
||||
+ return;
|
||||
+ }
|
||||
protocolHandler->_q_readyRead();
|
||||
}
|
||||
@@ -1240,5 +1251,16 @@
|
||||
// Similar to HTTP/1.1 counterpart below:
|
||||
const auto &pair = std::as_const(h2RequestsToSend).first();
|
||||
+ waitingForPotentialAbort = true;
|
||||
emit pair.second->encrypted();
|
||||
+
|
||||
+ // We don't send or handle any received data until any effects from
|
||||
+ // emitting encrypted() have been processed. This is necessary
|
||||
+ // because the user may have called abort(). We may also abort the
|
||||
+ // whole connection if the request has been aborted and there is
|
||||
+ // no more requests to send.
|
||||
+ QMetaObject::invokeMethod(this,
|
||||
+ &QHttpNetworkConnectionChannel::checkAndResumeCommunication,
|
||||
+ Qt::QueuedConnection);
|
||||
+
|
||||
// In case our peer has sent us its settings (window size, max concurrent streams etc.)
|
||||
// let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection).
|
||||
@@ -1258,4 +1280,26 @@
|
||||
}
|
||||
|
||||
+
|
||||
+void QHttpNetworkConnectionChannel::checkAndResumeCommunication()
|
||||
+{
|
||||
+ Q_ASSERT(connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2
|
||||
+ || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct);
|
||||
+
|
||||
+ // Because HTTP/2 requires that we send a SETTINGS frame as the first thing we do, and respond
|
||||
+ // to a SETTINGS frame with an ACK, we need to delay any handling until we can ensure that any
|
||||
+ // effects from emitting encrypted() have been processed.
|
||||
+ // This function is called after encrypted() was emitted, so check for changes.
|
||||
+
|
||||
+ if (!reply && h2RequestsToSend.isEmpty())
|
||||
+ abort();
|
||||
+ waitingForPotentialAbort = false;
|
||||
+ if (needInvokeReadyRead)
|
||||
+ _q_readyRead();
|
||||
+ if (needInvokeReceiveReply)
|
||||
+ _q_receiveReply();
|
||||
+ if (needInvokeSendRequest)
|
||||
+ sendRequest();
|
||||
+}
|
||||
+
|
||||
void QHttpNetworkConnectionChannel::requeueHttp2Requests()
|
||||
{
|
||||
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
|
||||
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
|
||||
@@ -75,4 +75,8 @@
|
||||
bool ssl;
|
||||
bool isInitialized;
|
||||
+ bool waitingForPotentialAbort = false;
|
||||
+ bool needInvokeReceiveReply = false;
|
||||
+ bool needInvokeReadyRead = false;
|
||||
+ bool needInvokeSendRequest = false;
|
||||
ChannelState state;
|
||||
QHttpNetworkRequest request; // current request, only used for HTTP
|
||||
@@ -147,4 +151,6 @@
|
||||
void resendCurrentRequest();
|
||||
|
||||
+ void checkAndResumeCommunication();
|
||||
+
|
||||
bool isSocketBusy() const;
|
||||
bool isSocketWriting() const;
|
||||
--- a/tests/auto/network/access/http2/tst_http2.cpp
|
||||
+++ b/tests/auto/network/access/http2/tst_http2.cpp
|
||||
@@ -107,4 +107,6 @@
|
||||
void duplicateRequestsWithAborts();
|
||||
|
||||
+ void abortOnEncrypted();
|
||||
+
|
||||
protected slots:
|
||||
// Slots to listen to our in-process server:
|
||||
@@ -1480,4 +1482,46 @@
|
||||
}
|
||||
|
||||
+void tst_Http2::abortOnEncrypted()
|
||||
+{
|
||||
+#if !QT_CONFIG(ssl)
|
||||
+ QSKIP("TLS support is needed for this test");
|
||||
+#else
|
||||
+ clearHTTP2State();
|
||||
+ serverPort = 0;
|
||||
+
|
||||
+ ServerPtr targetServer(newServer(defaultServerSettings, H2Type::h2Direct));
|
||||
+
|
||||
+ QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection);
|
||||
+ runEventLoop();
|
||||
+
|
||||
+ nRequests = 1;
|
||||
+ nSentRequests = 0;
|
||||
+
|
||||
+ const auto url = requestUrl(H2Type::h2Direct);
|
||||
+ QNetworkRequest request(url);
|
||||
+ request.setAttribute(QNetworkRequest::Http2DirectAttribute, true);
|
||||
+
|
||||
+ std::unique_ptr<QNetworkReply> reply{manager->get(request)};
|
||||
+ reply->ignoreSslErrors();
|
||||
+ connect(reply.get(), &QNetworkReply::encrypted, reply.get(), [reply = reply.get()](){
|
||||
+ reply->abort();
|
||||
+ });
|
||||
+ connect(reply.get(), &QNetworkReply::errorOccurred, this, &tst_Http2::replyFinishedWithError);
|
||||
+
|
||||
+ runEventLoop();
|
||||
+ STOP_ON_FAILURE
|
||||
+
|
||||
+ QCOMPARE(nRequests, 0);
|
||||
+ QCOMPARE(reply->error(), QNetworkReply::OperationCanceledError);
|
||||
+
|
||||
+ const bool res = QTest::qWaitFor(
|
||||
+ [this, server = targetServer.get()]() {
|
||||
+ return serverGotSettingsACK || prefaceOK || nSentRequests > 0;
|
||||
+ },
|
||||
+ 500);
|
||||
+ QVERIFY(!res);
|
||||
+#endif // QT_CONFIG(ssl)
|
||||
+}
|
||||
+
|
||||
void tst_Http2::serverStarted(quint16 port)
|
||||
{
|
||||
@@ -1,43 +0,0 @@
|
||||
Backport from 6.7.3 as it may cause major problems for x86 sse2-less
|
||||
systems using gcc14.
|
||||
|
||||
https://github.com/qt/qtbase/commit/39fa7e7bef90be2940c5f736935f963e3969e0bd
|
||||
From: Dmitry Shachnev <mitya57@gmail.com>
|
||||
Date: Sat, 27 Jul 2024 23:03:07 +0300
|
||||
Subject: [PATCH] Use _Float16 only when SSE2 is enabled
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The GCC documentation [1] says: “On x86 targets with SSE2 enabled, GCC
|
||||
supports half-precision (16-bit) floating point via the _Float16 type”.
|
||||
|
||||
On non-SSE2 x86 (such as Debian i386 baseline [2]), __FLT16_MAX__ is
|
||||
defined starting with GCC 14 [3], however any non-trivial use of the
|
||||
_Float16 type results in an error:
|
||||
|
||||
error: operation not permitted on type ‘_Float16’ without option ‘-msse2’
|
||||
|
||||
which makes some packages fail to build on i386 architecture [4].
|
||||
|
||||
[1]: https://gcc.gnu.org/onlinedocs/gcc/Half-Precision.html
|
||||
[2]: https://wiki.debian.org/ArchitectureSpecificsMemo#i386-1
|
||||
[3]: https://gcc.gnu.org/g:9a19fa8b616f83474c35cc5b34a3865073ced829
|
||||
[4]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1076986
|
||||
--- a/src/corelib/global/qtypes.h
|
||||
+++ b/src/corelib/global/qtypes.h
|
||||
@@ -264,11 +264,10 @@
|
||||
# define QFLOAT16_IS_NATIVE 1
|
||||
using NativeFloat16Type = decltype(__FLT16_MAX__);
|
||||
-#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__)
|
||||
+#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__) && defined(__ARM_FP16_FORMAT_IEEE)
|
||||
# define QFLOAT16_IS_NATIVE 1
|
||||
-# ifdef __ARM_FP16_FORMAT_IEEE
|
||||
using NativeFloat16Type = __fp16;
|
||||
-# else
|
||||
+#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__) && defined(__SSE2__)
|
||||
+# define QFLOAT16_IS_NATIVE 1
|
||||
using NativeFloat16Type = _Float16;
|
||||
-# endif
|
||||
#else
|
||||
# define QFLOAT16_IS_NATIVE 0
|
||||
@@ -1,32 +0,0 @@
|
||||
https://codereview.qt-project.org/c/qt/qtbase/+/582403
|
||||
From: Sam James <sam@gentoo.org>
|
||||
Date: Sat, 10 Aug 2024 16:43:05 +0100
|
||||
Subject: [PATCH] Fix ODR violation for IsFloatType_v
|
||||
|
||||
With recent GCC 15 trunk, I started to see:
|
||||
```
|
||||
ld: .../kwalletentry.cc.o:(.rodata+0x0): multiple definition of `QtPrivate::IsFloatType_v<_Float16>';
|
||||
src/runtime/kwalletd/backend/CMakeFiles/KF6WalletBackend.dir/cbc.cc.o:(.rodata+0x0): first defined here
|
||||
```
|
||||
|
||||
The issue is that constexpr is only implicitly inline for functions or
|
||||
static data members [0], so the two constexpr IsFloatType_v definitions
|
||||
here cause an ODR violation.
|
||||
|
||||
Explicitly mark them as inline constexpr.
|
||||
|
||||
[0] http://eel.is/c++draft/dcl.constexpr#1.sentence-3
|
||||
--- a/src/corelib/global/qcomparehelpers.h
|
||||
+++ b/src/corelib/global/qcomparehelpers.h
|
||||
@@ -348,9 +348,9 @@
|
||||
|
||||
template <typename T>
|
||||
-constexpr bool IsFloatType_v = std::is_floating_point_v<T>;
|
||||
+inline constexpr bool IsFloatType_v = std::is_floating_point_v<T>;
|
||||
|
||||
#if QFLOAT16_IS_NATIVE
|
||||
template <>
|
||||
-constexpr bool IsFloatType_v<QtPrivate::NativeFloat16Type> = true;
|
||||
+inline constexpr bool IsFloatType_v<QtPrivate::NativeFloat16Type> = true;
|
||||
#endif
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
https://bugreports.qt.io/browse/QTBUG-129193
|
||||
https://forums.gentoo.org/viewtopic-t-1170690.html
|
||||
https://forums.gentoo.org/viewtopic-t-1169619.html
|
||||
https://codereview.qt-project.org/c/qt/qtbase/+/593073
|
||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||
Date: Mon, 23 Sep 2024 13:44:31 -0700
|
||||
Subject: [PATCH] qsimd_x86: disable the requirement that CPUs must have RNGs
|
||||
|
||||
Intel CPUs have had this since 2013 (Ivy Bridge), but some older
|
||||
Bulldozer AMD CPUs appear to be missing it. This creates a mismatch
|
||||
between when the __haswell__ macro gets declared in qsimd_p.h and the
|
||||
runtime check using the CpuArchHaswell value. That in turn creates a
|
||||
condition where qInitDrawhelperFunctions() in qdrawhelper.cpp leaves the
|
||||
memfill pointers set to null.
|
||||
|
||||
#elif defined(__SSE2__)
|
||||
# ifndef __haswell__
|
||||
qt_memfill32 = qt_memfill32_sse2;
|
||||
qt_memfill64 = qt_memfill64_sse2;
|
||||
# endif
|
||||
...
|
||||
#if defined(QT_COMPILER_SUPPORTS_AVX2)
|
||||
if (qCpuHasFeature(ArchHaswell)) {
|
||||
qt_memfill32 = qt_memfill32_avx2;
|
||||
qt_memfill64 = qt_memfill64_avx2;
|
||||
|
||||
It does this so the qt_memfillXX_sse2 functions don't have to be defined
|
||||
anywhere, so the QtGui build won't carry unnecessary dead code.
|
||||
|
||||
This is old code (from Qt 4.x) and several improvements I've made for
|
||||
QtCore are not applied yet. My work for qSimdDispatcher[1] isn't
|
||||
complete: it might have avoided this problem here, but it would also
|
||||
have required major work for the draw helpers to work in the first
|
||||
place.
|
||||
|
||||
[1] https://codereview.qt-project.org/c/qt/qtbase/+/537384
|
||||
|
||||
Pick-to: 6.8 6.7 6.5 6.2
|
||||
Fixes: QTBUG-129193
|
||||
Change-Id: Ia427a9e502b0fb46b2bdfffda8e2131b7091c9e9
|
||||
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
||||
--- a/src/corelib/global/qsimd_x86_p.h
|
||||
+++ b/src/corelib/global/qsimd_x86_p.h
|
||||
@@ -85,16 +85,14 @@
|
||||
#define cpu_snb (cpu_wsm \
|
||||
| cpu_feature_avx)
|
||||
#define cpu_ivb (cpu_snb \
|
||||
- | cpu_feature_f16c \
|
||||
- | cpu_feature_rdrnd)
|
||||
+ | cpu_feature_f16c)
|
||||
#define cpu_hsw (cpu_ivb \
|
||||
| cpu_feature_avx2 \
|
||||
| cpu_feature_fma \
|
||||
| cpu_feature_bmi \
|
||||
| cpu_feature_bmi2 \
|
||||
| cpu_feature_movbe)
|
||||
-#define cpu_bdw (cpu_hsw \
|
||||
- | cpu_feature_rdseed)
|
||||
+#define cpu_bdw (cpu_hsw)
|
||||
#define cpu_bdx (cpu_bdw)
|
||||
#define cpu_skl (cpu_bdw)
|
||||
#define cpu_skx (cpu_skl \
|
||||
@@ -237,9 +235,9 @@
|
||||
#define QT_FUNCTION_TARGET_STRING_ARCH_NHM QT_FUNCTION_TARGET_STRING_ARCH_CORE2 ",sse4.1,sse4.2,popcnt"
|
||||
#define QT_FUNCTION_TARGET_STRING_ARCH_WSM QT_FUNCTION_TARGET_STRING_ARCH_NHM
|
||||
#define QT_FUNCTION_TARGET_STRING_ARCH_SNB QT_FUNCTION_TARGET_STRING_ARCH_WSM ",avx"
|
||||
-#define QT_FUNCTION_TARGET_STRING_ARCH_IVB QT_FUNCTION_TARGET_STRING_ARCH_SNB ",f16c,rdrnd,fsgsbase"
|
||||
+#define QT_FUNCTION_TARGET_STRING_ARCH_IVB QT_FUNCTION_TARGET_STRING_ARCH_SNB ",f16c,fsgsbase"
|
||||
#define QT_FUNCTION_TARGET_STRING_ARCH_HSW QT_FUNCTION_TARGET_STRING_ARCH_IVB ",avx2,fma,bmi,bmi2,lzcnt,movbe"
|
||||
-#define QT_FUNCTION_TARGET_STRING_ARCH_BDW QT_FUNCTION_TARGET_STRING_ARCH_HSW ",adx,rdseed"
|
||||
+#define QT_FUNCTION_TARGET_STRING_ARCH_BDW QT_FUNCTION_TARGET_STRING_ARCH_HSW ",adx"
|
||||
#define QT_FUNCTION_TARGET_STRING_ARCH_BDX QT_FUNCTION_TARGET_STRING_ARCH_BDW
|
||||
#define QT_FUNCTION_TARGET_STRING_ARCH_SKL QT_FUNCTION_TARGET_STRING_ARCH_BDW ",xsavec,xsaves"
|
||||
#define QT_FUNCTION_TARGET_STRING_ARCH_SKX QT_FUNCTION_TARGET_STRING_ARCH_SKL ",avx512f,avx512dq,avx512cd,avx512bw,avx512vl"
|
||||
@@ -473,9 +471,9 @@
|
||||
CpuArchNHM = cpu_nhm,
|
||||
CpuArchWSM = cpu_wsm,
|
||||
CpuArchSNB = cpu_snb,
|
||||
- CpuArchIVB = cpu_ivb,
|
||||
+ CpuArchIVB = cpu_ivb, ///< rdrnd
|
||||
CpuArchHSW = cpu_hsw, ///< hle,rtm
|
||||
- CpuArchBDW = cpu_bdw,
|
||||
+ CpuArchBDW = cpu_bdw, ///< rdseed
|
||||
CpuArchBDX = cpu_bdx,
|
||||
CpuArchSKL = cpu_skl,
|
||||
CpuArchSKX = cpu_skx, ///< clwb
|
||||
--- a/util/x86simdgen/3rdparty/simd-intel.conf
|
||||
+++ b/util/x86simdgen/3rdparty/simd-intel.conf
|
||||
@@ -142,9 +142,9 @@
|
||||
arch=NHM Core2 sse4.1,sse4.2,popcnt
|
||||
arch=WSM NHM
|
||||
arch=SNB WSM avx
|
||||
-arch=IVB SNB f16c,rdrnd,fsgsbase
|
||||
+arch=IVB SNB f16c,fsgsbase # rdrnd
|
||||
arch=HSW IVB avx2,fma,bmi,bmi2,lzcnt,movbe # hle,rtm
|
||||
-arch=BDW HSW adx,rdseed
|
||||
+arch=BDW HSW adx # rdseed
|
||||
arch=BDX BDW
|
||||
arch=SKL BDW xsavec,xsaves
|
||||
arch=SKX SKL avx512f,avx512dq,avx512cd,avx512bw,avx512vl #clwb
|
||||
@@ -1,8 +0,0 @@
|
||||
https://bugs.gentoo.org/938475
|
||||
Older version of https://codereview.qt-project.org/c/qt/qtbase/+/585668 for 6.7
|
||||
--- a/src/corelib/tools/qcontiguouscache.h
|
||||
+++ b/src/corelib/tools/qcontiguouscache.h
|
||||
@@ -10,2 +10,3 @@
|
||||
#include <QtCore/qtcoreexports.h>
|
||||
+#include <QtCore/qglobal.h>
|
||||
#include <QtCore/qtypeinfo.h>
|
||||
@@ -1,28 +0,0 @@
|
||||
https://bugs.kde.org/show_bug.cgi?id=490791
|
||||
https://codereview.qt-project.org/c/qt/qtbase/+/584636
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Wed, 31 Jul 2024 11:59:14 +0100
|
||||
Subject: [PATCH] QWidget: Store initialScreen as QPointer
|
||||
|
||||
A Toplevel QWidget can hold a pointer to the screen where it will
|
||||
eventually show contents, before a QWidgetWindow is created which then
|
||||
takes precedence.
|
||||
|
||||
The screen member of QWindows is always kept up-to-date when a screen is
|
||||
removed, but not the contents of a toplevel window. If a widget has
|
||||
setScreen called but is never shown, it has potentially dangling pointer
|
||||
which can cause issues in the future.
|
||||
|
||||
Pick-to: 6.5
|
||||
Change-Id: Ia7c80549e8b3c90a75cdde745487e87ecddaca63
|
||||
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||
(cherry picked from commit d67acf94afffde6a71498be6e30447f3acf7558e)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
(cherry picked from commit 6af4e5f604fff40cdb3be40099b8884362806ef4)
|
||||
--- a/src/widgets/kernel/qwidget_p.h
|
||||
+++ b/src/widgets/kernel/qwidget_p.h
|
||||
@@ -110,3 +110,3 @@
|
||||
Qt::WindowFlags savedFlags; // Save widget flags while showing fullscreen
|
||||
- QScreen *initialScreen; // Screen when passing a QDesktop[Screen]Widget as parent.
|
||||
+ QPointer<QScreen> initialScreen; // Screen when passing a QDesktop[Screen]Widget as parent.
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
https://bugreports.qt.io/browse/QTBUG-125053
|
||||
https://bugreports.qt.io/browse/QTBUG-127340
|
||||
https://codereview.qt-project.org/c/qt/qtbase/+/593123
|
||||
--- a/src/corelib/itemmodels/qabstractitemmodel.cpp
|
||||
+++ b/src/corelib/itemmodels/qabstractitemmodel.cpp
|
||||
@@ -3396,4 +3396,11 @@
|
||||
void QAbstractItemModel::beginResetModel()
|
||||
{
|
||||
+ Q_D(QAbstractItemModel);
|
||||
+ if (d->resetting) {
|
||||
+ qWarning() << "beginResetModel called on" << this << "without calling endResetModel first";
|
||||
+ // Warn, but don't return early in case user code relies on the incorrect behavior.
|
||||
+ }
|
||||
+
|
||||
+ d->resetting = true;
|
||||
emit modelAboutToBeReset(QPrivateSignal());
|
||||
}
|
||||
@@ -3413,6 +3420,12 @@
|
||||
{
|
||||
Q_D(QAbstractItemModel);
|
||||
+ if (!d->resetting) {
|
||||
+ qWarning() << "endResetModel called on" << this << "without calling beginResetModel first";
|
||||
+ // Warn, but don't return early in case user code relies on the incorrect behavior.
|
||||
+ }
|
||||
+
|
||||
d->invalidatePersistentIndexes();
|
||||
resetInternalData();
|
||||
+ d->resetting = false;
|
||||
emit modelReset(QPrivateSignal());
|
||||
}
|
||||
--- a/src/corelib/itemmodels/qabstractitemmodel_p.h
|
||||
+++ b/src/corelib/itemmodels/qabstractitemmodel_p.h
|
||||
@@ -46,4 +46,6 @@
|
||||
~QAbstractItemModelPrivate();
|
||||
|
||||
+ static const QAbstractItemModelPrivate *get(const QAbstractItemModel *model) { return model->d_func(); }
|
||||
+
|
||||
void removePersistentIndexData(QPersistentModelIndexData *data);
|
||||
void movePersistentIndexes(const QList<QPersistentModelIndexData *> &indexes, int change, const QModelIndex &parent,
|
||||
@@ -116,4 +118,6 @@
|
||||
} persistent;
|
||||
|
||||
+ bool resetting = false;
|
||||
+
|
||||
static const QHash<int,QByteArray> &defaultRoleNames();
|
||||
static bool isVariantLessThan(const QVariant &left, const QVariant &right,
|
||||
@@ -1,156 +0,0 @@
|
||||
https://bugreports.qt.io/browse/QTBUG-129509
|
||||
https://bugreports.qt.io/browse/QTBUG-129514
|
||||
https://codereview.qt-project.org/c/qt/qtbase/+/594889
|
||||
From 42845904d51ad14b2ab41a165bd9b9b1a9459840 Mon Sep 17 00:00:00 2001
|
||||
From: Liang Qi <liang.qi@qt.io>
|
||||
Date: Tue, 01 Oct 2024 12:46:30 +0200
|
||||
Subject: [PATCH] Revert "xcb: handle XI2 input button and motion events from slave devices"
|
||||
|
||||
This reverts commit b71be292780b858f2c55ce92601452e2ea946de2, which causes a regression when using mouse wheel and moving cursor together
|
||||
on scroll bar for some qt applications, like qutebrowser and
|
||||
qbittorrent.
|
||||
|
||||
Fixes: QTBUG-129509
|
||||
Fixes: QTBUG-129514
|
||||
Task-number: QTBUG-110841
|
||||
Pick-to: 6.8.0 6.8 6.7 6.5 6.2 5.15
|
||||
Change-Id: I703158874413a1306ea99217bced4ba38382f543
|
||||
--- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
|
||||
+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
|
||||
@@ -683,94 +683,21 @@
|
||||
}
|
||||
|
||||
-//implementation is ported from https://codereview.qt-project.org/c/qt/qtbase/+/231552/12/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp#558
|
||||
-namespace {
|
||||
-
|
||||
-/*! \internal
|
||||
-
|
||||
- Qt listens for XIAllDevices to avoid losing mouse events. This function
|
||||
- ensures that we don't process the same event twice: from a slave device and
|
||||
- then again from a master device.
|
||||
-
|
||||
- In a normal use case (e.g. mouse press and release inside a window), we will
|
||||
- drop events from master devices as duplicates. Other advantage of processing
|
||||
- events from slave devices is that they don't share button state. All buttons
|
||||
- on a master device share the state.
|
||||
-
|
||||
- Examples of special cases:
|
||||
-
|
||||
-\list
|
||||
-
|
||||
-\li During system move/resize, window manager (_NET_WM_MOVERESIZE) grabs the
|
||||
- master pointer, in this case we process the matching release from the slave
|
||||
- device. A master device event is not sent by the server, hence no duplicate
|
||||
- event to drop. If we listened for XIAllMasterDevices instead, we would never
|
||||
- see a release event in this case.
|
||||
-
|
||||
-\li If we dismiss a context menu by clicking somewhere outside a Qt application,
|
||||
- we will process the mouse press from the master pointer as that is the
|
||||
- device we are grabbing. We are not grabbing slave devices (grabbing on the
|
||||
- slave device is buggy according to 19d289ab1b5bde3e136765e5432b5c7d004df3a4).
|
||||
- And since the event occurs outside our window, the slave device event is
|
||||
- not sent to us by the server, hence no duplicate event to drop.
|
||||
-
|
||||
-\endlist
|
||||
-*/
|
||||
-bool isDuplicateEvent(xcb_ge_event_t *event)
|
||||
-{
|
||||
- Q_ASSERT(event);
|
||||
-
|
||||
- struct qXIEvent {
|
||||
- bool isValid = false;
|
||||
- uint16_t sourceid;
|
||||
- uint8_t evtype;
|
||||
- uint32_t detail;
|
||||
- int32_t root_x;
|
||||
- int32_t root_y;
|
||||
- };
|
||||
- static qXIEvent lastSeenEvent;
|
||||
-
|
||||
- bool isDuplicate = false;
|
||||
- auto *xiDeviceEvent = reinterpret_cast<qt_xcb_input_device_event_t *>(event);
|
||||
- if (lastSeenEvent.isValid) {
|
||||
- isDuplicate = lastSeenEvent.sourceid == xiDeviceEvent->sourceid &&
|
||||
- lastSeenEvent.evtype == xiDeviceEvent->event_type &&
|
||||
- lastSeenEvent.detail == xiDeviceEvent->detail &&
|
||||
- lastSeenEvent.root_x == xiDeviceEvent->root_x &&
|
||||
- lastSeenEvent.root_y == xiDeviceEvent->root_y;
|
||||
- } else {
|
||||
- lastSeenEvent.isValid = true;
|
||||
- }
|
||||
- lastSeenEvent.sourceid = xiDeviceEvent->sourceid;
|
||||
- lastSeenEvent.evtype = xiDeviceEvent->event_type;
|
||||
- lastSeenEvent.detail = xiDeviceEvent->detail;
|
||||
- lastSeenEvent.root_x = xiDeviceEvent->root_x;
|
||||
- lastSeenEvent.root_y = xiDeviceEvent->root_y;
|
||||
-
|
||||
- if (isDuplicate) {
|
||||
- qCDebug(lcQpaXInputEvents, "Duplicate XI2 event %d", event->event_type);
|
||||
- // This sanity check ensures that special cases like QTBUG-59277 keep working.
|
||||
- lastSeenEvent.isValid = false; // An event can be a duplicate only once.
|
||||
- }
|
||||
-
|
||||
- return isDuplicate;
|
||||
-}
|
||||
-
|
||||
-} // namespace
|
||||
-
|
||||
void QXcbConnection::xi2HandleEvent(xcb_ge_event_t *event)
|
||||
{
|
||||
auto *xiEvent = reinterpret_cast<qt_xcb_input_device_event_t *>(event);
|
||||
- if (m_xiSlavePointerIds.contains(xiEvent->deviceid)) {
|
||||
- if (!(xiEvent->event_type == XCB_INPUT_BUTTON_PRESS
|
||||
- || xiEvent->event_type == XCB_INPUT_BUTTON_RELEASE
|
||||
- || xiEvent->event_type == XCB_INPUT_MOTION)) {
|
||||
- if (!m_duringSystemMoveResize)
|
||||
- return;
|
||||
- if (xiEvent->event == XCB_NONE)
|
||||
- return;
|
||||
-
|
||||
- if (xiEvent->event_type == XCB_INPUT_TOUCH_END)
|
||||
- abortSystemMoveResize(xiEvent->event);
|
||||
+ setTime(xiEvent->time);
|
||||
+ if (m_xiSlavePointerIds.contains(xiEvent->deviceid) && xiEvent->event_type != XCB_INPUT_PROPERTY) {
|
||||
+ if (!m_duringSystemMoveResize)
|
||||
+ return;
|
||||
+ if (xiEvent->event == XCB_NONE)
|
||||
+ return;
|
||||
|
||||
+ if (xiEvent->event_type == XCB_INPUT_BUTTON_RELEASE
|
||||
+ && xiEvent->detail == XCB_BUTTON_INDEX_1 ) {
|
||||
+ abortSystemMoveResize(xiEvent->event);
|
||||
+ } else if (xiEvent->event_type == XCB_INPUT_TOUCH_END) {
|
||||
+ abortSystemMoveResize(xiEvent->event);
|
||||
+ return;
|
||||
+ } else {
|
||||
return;
|
||||
}
|
||||
@@ -784,25 +711,9 @@
|
||||
case XCB_INPUT_BUTTON_PRESS:
|
||||
case XCB_INPUT_BUTTON_RELEASE:
|
||||
- case XCB_INPUT_MOTION: {
|
||||
- if (isDuplicateEvent(event))
|
||||
- return;
|
||||
- if (m_xiSlavePointerIds.contains(xiEvent->deviceid)) {
|
||||
- if (m_duringSystemMoveResize) {
|
||||
- if (xiEvent->event_type == XCB_INPUT_BUTTON_RELEASE
|
||||
- && xiEvent->detail == XCB_BUTTON_INDEX_1 ) {
|
||||
- abortSystemMoveResize(xiEvent->event);
|
||||
- } else {
|
||||
- return;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- xiDeviceEvent = xiEvent;
|
||||
- eventListener = windowEventListenerFromId(xiDeviceEvent->event);
|
||||
- sourceDeviceId = xiDeviceEvent->sourceid; // use the actual device id instead of the master
|
||||
- break;
|
||||
- }
|
||||
+ case XCB_INPUT_MOTION:
|
||||
case XCB_INPUT_TOUCH_BEGIN:
|
||||
case XCB_INPUT_TOUCH_UPDATE:
|
||||
- case XCB_INPUT_TOUCH_END: {
|
||||
+ case XCB_INPUT_TOUCH_END:
|
||||
+ {
|
||||
xiDeviceEvent = xiEvent;
|
||||
eventListener = windowEventListenerFromId(xiDeviceEvent->event);
|
||||
@@ -1,364 +0,0 @@
|
||||
# Copyright 2021-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit flag-o-matic qt6-build toolchain-funcs
|
||||
|
||||
DESCRIPTION="Cross-platform application development framework"
|
||||
|
||||
if [[ ${QT6_BUILD_TYPE} == release ]]; then
|
||||
KEYWORDS="amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv x86"
|
||||
fi
|
||||
|
||||
declare -A QT6_IUSE=(
|
||||
[global]="+ssl +udev zstd"
|
||||
[core]="icu journald syslog"
|
||||
[modules]="+concurrent +dbus +gui +network +sql +xml"
|
||||
|
||||
[gui]="
|
||||
+X accessibility eglfs evdev gles2-only +libinput
|
||||
opengl renderdoc tslib vulkan wayland +widgets
|
||||
"
|
||||
[network]="brotli gssapi libproxy sctp"
|
||||
[sql]="mysql oci8 odbc postgres +sqlite"
|
||||
[widgets]="cups gtk"
|
||||
|
||||
[optfeature]="nls" #810802
|
||||
)
|
||||
IUSE="${QT6_IUSE[*]}"
|
||||
REQUIRED_USE="
|
||||
?? ( journald syslog )
|
||||
$(
|
||||
printf '%s? ( gui ) ' ${QT6_IUSE[gui]//+/}
|
||||
printf '%s? ( network ) ' ${QT6_IUSE[network]//+/}
|
||||
printf '%s? ( sql ) ' ${QT6_IUSE[sql]//+/}
|
||||
printf '%s? ( gui widgets ) ' ${QT6_IUSE[widgets]//+/}
|
||||
)
|
||||
accessibility? ( dbus )
|
||||
eglfs? ( opengl )
|
||||
gles2-only? ( opengl )
|
||||
gui? ( || ( X eglfs wayland ) )
|
||||
libinput? ( udev )
|
||||
sql? ( || ( ${QT6_IUSE[sql]//+/} ) )
|
||||
test? ( icu sql? ( sqlite ) )
|
||||
"
|
||||
|
||||
# groups:
|
||||
# - global (configure.cmake)
|
||||
# - qtcore (src/corelib/configure.cmake)
|
||||
# - qtgui (src/gui/configure.cmake)
|
||||
# - qtnetwork (src/network/configure.cmake)
|
||||
# - qtprintsupport (src/printsupport/configure.cmake) [gui+widgets]
|
||||
# - qtsql (src/plugins/sqldrivers/configure.cmake)
|
||||
# nolink: renderdoc, systemd
|
||||
COMMON_DEPEND="
|
||||
sys-libs/zlib:=
|
||||
ssl? ( dev-libs/openssl:= )
|
||||
udev? ( virtual/libudev:= )
|
||||
zstd? ( app-arch/zstd:= )
|
||||
|
||||
app-crypt/libb2
|
||||
dev-libs/double-conversion:=
|
||||
dev-libs/glib:2
|
||||
dev-libs/libpcre2:=[pcre16,unicode(+)]
|
||||
icu? ( dev-libs/icu:= )
|
||||
journald? ( sys-apps/systemd )
|
||||
|
||||
dbus? ( sys-apps/dbus )
|
||||
gui? (
|
||||
media-libs/fontconfig
|
||||
media-libs/freetype:2
|
||||
media-libs/harfbuzz:=
|
||||
media-libs/libjpeg-turbo:=
|
||||
media-libs/libpng:=
|
||||
x11-libs/libdrm
|
||||
x11-libs/libxkbcommon[X?]
|
||||
X? (
|
||||
x11-libs/libICE
|
||||
x11-libs/libSM
|
||||
x11-libs/libX11
|
||||
x11-libs/libxcb:=
|
||||
x11-libs/xcb-util-cursor
|
||||
x11-libs/xcb-util-image
|
||||
x11-libs/xcb-util-keysyms
|
||||
x11-libs/xcb-util-renderutil
|
||||
x11-libs/xcb-util-wm
|
||||
)
|
||||
accessibility? ( app-accessibility/at-spi2-core:2 )
|
||||
eglfs? ( media-libs/mesa[gbm(+)] )
|
||||
evdev? ( sys-libs/mtdev )
|
||||
libinput? ( dev-libs/libinput:= )
|
||||
opengl? (
|
||||
gles2-only? ( media-libs/libglvnd )
|
||||
!gles2-only? ( media-libs/libglvnd[X?] )
|
||||
)
|
||||
renderdoc? ( media-gfx/renderdoc )
|
||||
tslib? ( x11-libs/tslib )
|
||||
widgets? (
|
||||
cups? ( net-print/cups )
|
||||
gtk? (
|
||||
x11-libs/gdk-pixbuf:2
|
||||
>=x11-libs/gtk+-3.24.41-r1:3[X?,wayland?]
|
||||
x11-libs/pango
|
||||
)
|
||||
)
|
||||
)
|
||||
network? (
|
||||
brotli? ( app-arch/brotli:= )
|
||||
gssapi? ( virtual/krb5 )
|
||||
libproxy? ( net-libs/libproxy )
|
||||
)
|
||||
sql? (
|
||||
mysql? ( dev-db/mysql-connector-c:= )
|
||||
oci8? ( dev-db/oracle-instantclient:=[sdk] )
|
||||
odbc? ( dev-db/unixODBC )
|
||||
postgres? ( dev-db/postgresql:* )
|
||||
sqlite? ( dev-db/sqlite:3 )
|
||||
)
|
||||
"
|
||||
RDEPEND="
|
||||
${COMMON_DEPEND}
|
||||
syslog? ( virtual/logger )
|
||||
"
|
||||
DEPEND="
|
||||
${COMMON_DEPEND}
|
||||
X? ( x11-base/xorg-proto )
|
||||
gui? (
|
||||
vulkan? ( dev-util/vulkan-headers )
|
||||
)
|
||||
network? (
|
||||
sctp? ( net-misc/lksctp-tools )
|
||||
)
|
||||
test? (
|
||||
elibc_musl? ( sys-libs/timezone-data )
|
||||
)
|
||||
"
|
||||
BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
|
||||
PDEPEND="
|
||||
nls? ( ~dev-qt/qttranslations-${PV}:6 )
|
||||
wayland? ( ~dev-qt/qtwayland-${PV}:6 )
|
||||
"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${PN}-6.5.2-hppa-forkfd-grow-stack.patch
|
||||
"${FILESDIR}"/${PN}-6.5.2-no-symlink-check.patch
|
||||
"${FILESDIR}"/${PN}-6.6.1-forkfd-childstack-size.patch
|
||||
"${FILESDIR}"/${PN}-6.6.3-gcc14-avx512fp16.patch
|
||||
"${FILESDIR}"/${PN}-6.7.2-CVE-2024-39936.patch
|
||||
"${FILESDIR}"/${PN}-6.7.2-gcc15-odr.patch
|
||||
"${FILESDIR}"/${PN}-6.7.2-float16-sse2.patch
|
||||
"${FILESDIR}"/${PN}-6.7.2-qwindowprivate-crash.patch
|
||||
"${FILESDIR}"/${PN}-6.7.2-qcontiguouscache.patch
|
||||
"${FILESDIR}"/${PN}-6.7.2-haswell-no-rdrnd.patch
|
||||
)
|
||||
|
||||
src_prepare() {
|
||||
qt6-build_src_prepare
|
||||
|
||||
if use test; then
|
||||
# test itself has -Werror=strict-aliasing issues, drop for simplicity
|
||||
sed -e '/add_subdirectory(qsharedpointer)/d' \
|
||||
-i tests/auto/corelib/tools/CMakeLists.txt || die
|
||||
|
||||
# workaround for __extendhfxf2 being used for tst_qfloat16.cpp
|
||||
# which is unavailable with compiler-rt (assume used if clang)
|
||||
if tc-is-clang; then
|
||||
sed -e '/add_subdirectory(qfloat16)/d' \
|
||||
-i tests/auto/corelib/global/CMakeLists.txt || die
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
# The only component that uses gdk backends is the qgtk3 platformtheme plugin
|
||||
if use gtk; then
|
||||
# defang automagic dependencies
|
||||
use wayland || append-cxxflags -DGENTOO_GTK_HIDE_WAYLAND
|
||||
use X || append-cxxflags -DGENTOO_GTK_HIDE_X11
|
||||
fi
|
||||
|
||||
local mycmakeargs=(
|
||||
-DBUILD_WITH_PCH=OFF
|
||||
|
||||
-DINSTALL_ARCHDATADIR="${QT6_ARCHDATADIR}"
|
||||
-DINSTALL_BINDIR="${QT6_BINDIR}"
|
||||
-DINSTALL_DATADIR="${QT6_DATADIR}"
|
||||
-DINSTALL_DOCDIR="${QT6_DOCDIR}"
|
||||
-DINSTALL_EXAMPLESDIR="${QT6_EXAMPLESDIR}"
|
||||
-DINSTALL_INCLUDEDIR="${QT6_HEADERDIR}"
|
||||
-DINSTALL_LIBDIR="${QT6_LIBDIR}"
|
||||
-DINSTALL_LIBEXECDIR="${QT6_LIBEXECDIR}"
|
||||
-DINSTALL_MKSPECSDIR="${QT6_MKSPECSDIR}"
|
||||
-DINSTALL_PLUGINSDIR="${QT6_PLUGINDIR}"
|
||||
-DINSTALL_QMLDIR="${QT6_QMLDIR}"
|
||||
-DINSTALL_SYSCONFDIR="${QT6_SYSCONFDIR}"
|
||||
-DINSTALL_TRANSLATIONSDIR="${QT6_TRANSLATIONDIR}"
|
||||
|
||||
-DQT_UNITY_BUILD=ON # ~30% faster build, affects other dev-qt/* too
|
||||
|
||||
-DQT_FEATURE_relocatable=OFF #927691
|
||||
$(qt_feature ssl openssl)
|
||||
$(qt_feature ssl openssl_linked)
|
||||
$(qt_feature udev libudev)
|
||||
$(qt_feature zstd)
|
||||
|
||||
# qtcore
|
||||
$(qt_feature icu)
|
||||
$(qt_feature journald)
|
||||
$(qt_feature syslog)
|
||||
|
||||
# tools
|
||||
-DQT_FEATURE_androiddeployqt=OFF
|
||||
|
||||
# modules
|
||||
$(qt_feature concurrent)
|
||||
$(qt_feature dbus)
|
||||
$(qt_feature gui)
|
||||
$(qt_feature network)
|
||||
$(qt_feature sql)
|
||||
# trivial, and is often needed (sometimes even when not building tests)
|
||||
-DQT_FEATURE_testlib=ON
|
||||
$(qt_feature xml)
|
||||
)
|
||||
|
||||
use gui && mycmakeargs+=(
|
||||
$(qt_feature X xcb)
|
||||
$(qt_feature X system_xcb_xinput)
|
||||
$(qt_feature X xkbcommon_x11)
|
||||
$(cmake_use_find_package X X11) # needed for truly no automagic
|
||||
$(qt_feature accessibility accessibility_atspi_bridge)
|
||||
$(qt_feature eglfs)
|
||||
$(qt_feature evdev)
|
||||
$(qt_feature evdev mtdev)
|
||||
$(qt_feature libinput)
|
||||
$(qt_feature renderdoc graphicsframecapture)
|
||||
$(qt_feature tslib)
|
||||
$(qt_feature vulkan)
|
||||
$(qt_feature wayland)
|
||||
$(qt_feature widgets)
|
||||
-DINPUT_opengl=$(usex opengl $(usex gles2-only es2 desktop) no)
|
||||
-DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
|
||||
) && use widgets && mycmakeargs+=(
|
||||
# note: qtprintsupport is enabled w/ gui+widgets regardless of USE=cups
|
||||
$(qt_feature cups)
|
||||
$(qt_feature gtk gtk3)
|
||||
)
|
||||
|
||||
use network && mycmakeargs+=(
|
||||
$(qt_feature brotli)
|
||||
$(qt_feature gssapi)
|
||||
$(qt_feature libproxy)
|
||||
$(qt_feature sctp)
|
||||
$(usev test -DQT_SKIP_DOCKER_COMPOSE=ON)
|
||||
)
|
||||
|
||||
use sql && mycmakeargs+=(
|
||||
-DQT_FEATURE_sql_db2=OFF # unpackaged
|
||||
-DQT_FEATURE_sql_ibase=OFF # unpackaged
|
||||
-DQT_FEATURE_sql_mimer=OFF # unpackaged
|
||||
$(qt_feature mysql sql_mysql)
|
||||
$(qt_feature oci8 sql_oci)
|
||||
$(usev oci8 -DOracle_ROOT="${ESYSROOT}"/usr/$(get_libdir)/oracle/client)
|
||||
$(qt_feature odbc sql_odbc)
|
||||
$(qt_feature postgres sql_psql)
|
||||
$(qt_feature sqlite sql_sqlite)
|
||||
$(qt_feature sqlite system_sqlite)
|
||||
)
|
||||
|
||||
qt6-build_src_configure
|
||||
}
|
||||
|
||||
src_test() {
|
||||
local -x TZ=UTC
|
||||
local -x LC_TIME=C
|
||||
|
||||
local CMAKE_SKIP_TESTS=(
|
||||
# broken with out-of-source + if qtbase is not already installed
|
||||
tst_moc
|
||||
tst_qmake
|
||||
# similarly broken when relocatable=OFF (bug #927691)
|
||||
tst_qapplication
|
||||
tst_qt_cmake_create
|
||||
tst_uic
|
||||
# needs x11/opengl, we *could* run these but tend to be flaky
|
||||
# when opengl rendering is involved (even if software-only)
|
||||
tst_qopengl{,config,widget,window}
|
||||
tst_qgraphicsview
|
||||
tst_qx11info
|
||||
# fails with network sandbox
|
||||
tst_qdnslookup
|
||||
# fails with sandbox
|
||||
tst_qsharedmemory
|
||||
# typical to lack SCTP support on non-generic kernels
|
||||
tst_qsctpsocket
|
||||
# randomly fails without -j1, and not worth it over this (bug #916181)
|
||||
tst_qfiledialog{,2}
|
||||
# may randomly hang+timeout, perhaps related to -j as well
|
||||
tst_qprocess #936484
|
||||
tst_qtimer
|
||||
# these can be flaky depending on the environment/toolchain
|
||||
tst_qlogging # backtrace log test can easily vary
|
||||
tst_q{,raw}font # affected by available fonts / settings (bug #914737)
|
||||
tst_qprinter # checks system's printers (bug #916216)
|
||||
tst_qhighdpi # may detect users' settings and fail (bug #935364)
|
||||
tst_qstorageinfo # checks mounted filesystems
|
||||
# flaky due to using different test framework and fails with USE=-gui
|
||||
tst_selftests
|
||||
# known failing when using clang+glibc+stdc++, needs looking into
|
||||
tst_qthread
|
||||
# partially failing on x86 chroots and seemingly(?) harmless (dev-qt
|
||||
# revdeps tests pass), skip globally to avoid keywording flakiness
|
||||
tst_json
|
||||
tst_qcolorspace
|
||||
tst_qdoublevalidator
|
||||
tst_qglobal
|
||||
tst_qglyphrun
|
||||
tst_qvectornd
|
||||
tst_rcc
|
||||
# similarly, but on armv7 and potentially others (bug #914028)
|
||||
tst_qlineedit
|
||||
tst_qpainter
|
||||
# likewise, known failing on BE arches (bug #914033,914371,918878)
|
||||
tst_qimagereader
|
||||
tst_qimagewriter
|
||||
tst_qpluginloader
|
||||
tst_quuid # >=6.6.2 had related fixes, needs retesting
|
||||
# partially broken on llvm-musl, needs looking into but skip to have
|
||||
# a baseline for regressions (rest of dev-qt still passes with musl)
|
||||
$(usev elibc_musl '
|
||||
tst_qicoimageformat
|
||||
tst_qimagereader
|
||||
tst_qimage
|
||||
')
|
||||
# fails due to hppa's NaN handling, needs looking into (bug #914371)
|
||||
$(usev hppa '
|
||||
tst_qcborvalue
|
||||
tst_qnumeric
|
||||
')
|
||||
# note: for linux, upstream only really runs+maintains tests for amd64
|
||||
# https://doc.qt.io/qt-6/supported-platforms.html
|
||||
)
|
||||
|
||||
qt6-build_src_test
|
||||
}
|
||||
|
||||
src_install() {
|
||||
qt6-build_src_install
|
||||
|
||||
if use test; then
|
||||
local delete_bins=( # need a better way to handle this
|
||||
clientserver copier crashingServer desktopsettingsaware_helper
|
||||
echo fileWriterProcess modal_helper nospace 'one space'
|
||||
paster qcommandlineparser_test_helper qfileopeneventexternal
|
||||
socketprocess syslocaleapp tst_qhashseed_helper 'two space s'
|
||||
write-read-write
|
||||
)
|
||||
local delete=( # sigh
|
||||
"${D}${QT6_BINDIR}"/test*
|
||||
"${delete_bins[@]/#/${D}${QT6_BINDIR}/}"
|
||||
)
|
||||
# using -f given not tracking which tests may be skipped or not
|
||||
rm -rf -- "${delete[@]}" || die
|
||||
fi
|
||||
}
|
||||
@@ -1,361 +0,0 @@
|
||||
# Copyright 2021-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit flag-o-matic qt6-build toolchain-funcs
|
||||
|
||||
DESCRIPTION="Cross-platform application development framework"
|
||||
|
||||
if [[ ${QT6_BUILD_TYPE} == release ]]; then
|
||||
KEYWORDS="amd64 arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv x86"
|
||||
fi
|
||||
|
||||
declare -A QT6_IUSE=(
|
||||
[global]="+ssl +udev zstd"
|
||||
[core]="icu journald syslog"
|
||||
[modules]="+concurrent +dbus +gui +network +sql +xml"
|
||||
|
||||
[gui]="
|
||||
+X accessibility eglfs evdev gles2-only +libinput
|
||||
opengl renderdoc tslib vulkan wayland +widgets
|
||||
"
|
||||
[network]="brotli gssapi libproxy sctp"
|
||||
[sql]="mysql oci8 odbc postgres +sqlite"
|
||||
[widgets]="cups gtk"
|
||||
|
||||
[optfeature]="nls" #810802
|
||||
)
|
||||
IUSE="${QT6_IUSE[*]}"
|
||||
REQUIRED_USE="
|
||||
?? ( journald syslog )
|
||||
$(
|
||||
printf '%s? ( gui ) ' ${QT6_IUSE[gui]//+/}
|
||||
printf '%s? ( network ) ' ${QT6_IUSE[network]//+/}
|
||||
printf '%s? ( sql ) ' ${QT6_IUSE[sql]//+/}
|
||||
printf '%s? ( gui widgets ) ' ${QT6_IUSE[widgets]//+/}
|
||||
)
|
||||
accessibility? ( dbus )
|
||||
eglfs? ( opengl )
|
||||
gles2-only? ( opengl )
|
||||
gui? ( || ( X eglfs wayland ) )
|
||||
libinput? ( udev )
|
||||
sql? ( || ( ${QT6_IUSE[sql]//+/} ) )
|
||||
test? ( icu sql? ( sqlite ) )
|
||||
"
|
||||
|
||||
# groups:
|
||||
# - global (configure.cmake)
|
||||
# - qtcore (src/corelib/configure.cmake)
|
||||
# - qtgui (src/gui/configure.cmake)
|
||||
# - qtnetwork (src/network/configure.cmake)
|
||||
# - qtprintsupport (src/printsupport/configure.cmake) [gui+widgets]
|
||||
# - qtsql (src/plugins/sqldrivers/configure.cmake)
|
||||
# nolink: renderdoc, systemd
|
||||
COMMON_DEPEND="
|
||||
sys-libs/zlib:=
|
||||
ssl? ( dev-libs/openssl:= )
|
||||
udev? ( virtual/libudev:= )
|
||||
zstd? ( app-arch/zstd:= )
|
||||
|
||||
app-crypt/libb2
|
||||
dev-libs/double-conversion:=
|
||||
dev-libs/glib:2
|
||||
dev-libs/libpcre2:=[pcre16,unicode(+)]
|
||||
icu? ( dev-libs/icu:= )
|
||||
journald? ( sys-apps/systemd )
|
||||
|
||||
dbus? ( sys-apps/dbus )
|
||||
gui? (
|
||||
media-libs/fontconfig
|
||||
media-libs/freetype:2
|
||||
media-libs/harfbuzz:=
|
||||
media-libs/libjpeg-turbo:=
|
||||
media-libs/libpng:=
|
||||
x11-libs/libdrm
|
||||
x11-libs/libxkbcommon[X?]
|
||||
X? (
|
||||
x11-libs/libICE
|
||||
x11-libs/libSM
|
||||
x11-libs/libX11
|
||||
x11-libs/libxcb:=
|
||||
x11-libs/xcb-util-cursor
|
||||
x11-libs/xcb-util-image
|
||||
x11-libs/xcb-util-keysyms
|
||||
x11-libs/xcb-util-renderutil
|
||||
x11-libs/xcb-util-wm
|
||||
)
|
||||
accessibility? ( app-accessibility/at-spi2-core:2 )
|
||||
eglfs? ( media-libs/mesa[gbm(+)] )
|
||||
evdev? ( sys-libs/mtdev )
|
||||
libinput? ( dev-libs/libinput:= )
|
||||
opengl? (
|
||||
gles2-only? ( media-libs/libglvnd )
|
||||
!gles2-only? ( media-libs/libglvnd[X?] )
|
||||
)
|
||||
renderdoc? ( media-gfx/renderdoc )
|
||||
tslib? ( x11-libs/tslib )
|
||||
widgets? (
|
||||
cups? ( net-print/cups )
|
||||
gtk? (
|
||||
x11-libs/gdk-pixbuf:2
|
||||
>=x11-libs/gtk+-3.24.41-r1:3[X?,wayland?]
|
||||
x11-libs/pango
|
||||
)
|
||||
)
|
||||
)
|
||||
network? (
|
||||
brotli? ( app-arch/brotli:= )
|
||||
gssapi? ( virtual/krb5 )
|
||||
libproxy? ( net-libs/libproxy )
|
||||
)
|
||||
sql? (
|
||||
mysql? ( dev-db/mysql-connector-c:= )
|
||||
oci8? ( dev-db/oracle-instantclient:=[sdk] )
|
||||
odbc? ( dev-db/unixODBC )
|
||||
postgres? ( dev-db/postgresql:* )
|
||||
sqlite? ( dev-db/sqlite:3 )
|
||||
)
|
||||
"
|
||||
RDEPEND="
|
||||
${COMMON_DEPEND}
|
||||
syslog? ( virtual/logger )
|
||||
"
|
||||
DEPEND="
|
||||
${COMMON_DEPEND}
|
||||
X? ( x11-base/xorg-proto )
|
||||
gui? (
|
||||
vulkan? ( dev-util/vulkan-headers )
|
||||
)
|
||||
network? (
|
||||
sctp? ( net-misc/lksctp-tools )
|
||||
)
|
||||
test? (
|
||||
elibc_musl? ( sys-libs/timezone-data )
|
||||
)
|
||||
"
|
||||
BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
|
||||
PDEPEND="
|
||||
nls? ( ~dev-qt/qttranslations-${PV}:6 )
|
||||
wayland? ( ~dev-qt/qtwayland-${PV}:6 )
|
||||
"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${PN}-6.5.2-hppa-forkfd-grow-stack.patch
|
||||
"${FILESDIR}"/${PN}-6.5.2-no-symlink-check.patch
|
||||
"${FILESDIR}"/${PN}-6.6.1-forkfd-childstack-size.patch
|
||||
"${FILESDIR}"/${PN}-6.6.3-gcc14-avx512fp16.patch
|
||||
"${FILESDIR}"/${PN}-6.7.2-qcontiguouscache.patch
|
||||
"${FILESDIR}"/${PN}-6.7.2-haswell-no-rdrnd.patch
|
||||
"${FILESDIR}"/${PN}-6.7.3-erratic-mouse-input.patch
|
||||
"${FILESDIR}"/${PN}-6.7.3-QTBUG-125053.patch
|
||||
)
|
||||
|
||||
src_prepare() {
|
||||
qt6-build_src_prepare
|
||||
|
||||
if use test; then
|
||||
# test itself has -Werror=strict-aliasing issues, drop for simplicity
|
||||
sed -e '/add_subdirectory(qsharedpointer)/d' \
|
||||
-i tests/auto/corelib/tools/CMakeLists.txt || die
|
||||
|
||||
# workaround for __extendhfxf2 being used for tst_qfloat16.cpp
|
||||
# which is unavailable with compiler-rt (assume used if clang)
|
||||
if tc-is-clang; then
|
||||
sed -e '/add_subdirectory(qfloat16)/d' \
|
||||
-i tests/auto/corelib/global/CMakeLists.txt || die
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
if use gtk; then
|
||||
# defang automagic dependencies (bug #624960)
|
||||
use X || append-cxxflags -DGENTOO_GTK_HIDE_X11
|
||||
use wayland || append-cxxflags -DGENTOO_GTK_HIDE_WAYLAND
|
||||
fi
|
||||
|
||||
local mycmakeargs=(
|
||||
-DBUILD_WITH_PCH=OFF
|
||||
|
||||
-DINSTALL_ARCHDATADIR="${QT6_ARCHDATADIR}"
|
||||
-DINSTALL_BINDIR="${QT6_BINDIR}"
|
||||
-DINSTALL_DATADIR="${QT6_DATADIR}"
|
||||
-DINSTALL_DOCDIR="${QT6_DOCDIR}"
|
||||
-DINSTALL_EXAMPLESDIR="${QT6_EXAMPLESDIR}"
|
||||
-DINSTALL_INCLUDEDIR="${QT6_HEADERDIR}"
|
||||
-DINSTALL_LIBDIR="${QT6_LIBDIR}"
|
||||
-DINSTALL_LIBEXECDIR="${QT6_LIBEXECDIR}"
|
||||
-DINSTALL_MKSPECSDIR="${QT6_MKSPECSDIR}"
|
||||
-DINSTALL_PLUGINSDIR="${QT6_PLUGINDIR}"
|
||||
-DINSTALL_QMLDIR="${QT6_QMLDIR}"
|
||||
-DINSTALL_SYSCONFDIR="${QT6_SYSCONFDIR}"
|
||||
-DINSTALL_TRANSLATIONSDIR="${QT6_TRANSLATIONDIR}"
|
||||
|
||||
-DQT_UNITY_BUILD=ON # ~30% faster build, affects other dev-qt/* too
|
||||
|
||||
-DQT_FEATURE_relocatable=OFF #927691
|
||||
$(qt_feature ssl openssl)
|
||||
$(qt_feature ssl openssl_linked)
|
||||
$(qt_feature udev libudev)
|
||||
$(qt_feature zstd)
|
||||
|
||||
# qtcore
|
||||
$(qt_feature icu)
|
||||
$(qt_feature journald)
|
||||
$(qt_feature syslog)
|
||||
|
||||
# tools
|
||||
-DQT_FEATURE_androiddeployqt=OFF
|
||||
|
||||
# modules
|
||||
$(qt_feature concurrent)
|
||||
$(qt_feature dbus)
|
||||
$(qt_feature gui)
|
||||
$(qt_feature network)
|
||||
$(qt_feature sql)
|
||||
# trivial, and is often needed (sometimes even when not building tests)
|
||||
-DQT_FEATURE_testlib=ON
|
||||
$(qt_feature xml)
|
||||
)
|
||||
|
||||
use gui && mycmakeargs+=(
|
||||
$(qt_feature X xcb)
|
||||
$(qt_feature X system_xcb_xinput)
|
||||
$(qt_feature X xkbcommon_x11)
|
||||
$(cmake_use_find_package X X11) # needed for truly no automagic
|
||||
$(qt_feature accessibility accessibility_atspi_bridge)
|
||||
$(qt_feature eglfs)
|
||||
$(qt_feature evdev)
|
||||
$(qt_feature evdev mtdev)
|
||||
$(qt_feature libinput)
|
||||
$(qt_feature renderdoc graphicsframecapture)
|
||||
$(qt_feature tslib)
|
||||
$(qt_feature vulkan)
|
||||
$(qt_feature wayland)
|
||||
$(qt_feature widgets)
|
||||
-DINPUT_opengl=$(usex opengl $(usex gles2-only es2 desktop) no)
|
||||
-DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
|
||||
) && use widgets && mycmakeargs+=(
|
||||
# note: qtprintsupport is enabled w/ gui+widgets regardless of USE=cups
|
||||
$(qt_feature cups)
|
||||
$(qt_feature gtk gtk3)
|
||||
)
|
||||
|
||||
use network && mycmakeargs+=(
|
||||
$(qt_feature brotli)
|
||||
$(qt_feature gssapi)
|
||||
$(qt_feature libproxy)
|
||||
$(qt_feature sctp)
|
||||
$(usev test -DQT_SKIP_DOCKER_COMPOSE=ON)
|
||||
)
|
||||
|
||||
use sql && mycmakeargs+=(
|
||||
-DQT_FEATURE_sql_db2=OFF # unpackaged
|
||||
-DQT_FEATURE_sql_ibase=OFF # unpackaged
|
||||
-DQT_FEATURE_sql_mimer=OFF # unpackaged
|
||||
$(qt_feature mysql sql_mysql)
|
||||
$(qt_feature oci8 sql_oci)
|
||||
$(usev oci8 -DOracle_ROOT="${ESYSROOT}"/usr/$(get_libdir)/oracle/client)
|
||||
$(qt_feature odbc sql_odbc)
|
||||
$(qt_feature postgres sql_psql)
|
||||
$(qt_feature sqlite sql_sqlite)
|
||||
$(qt_feature sqlite system_sqlite)
|
||||
)
|
||||
|
||||
qt6-build_src_configure
|
||||
}
|
||||
|
||||
src_test() {
|
||||
local -x TZ=UTC
|
||||
local -x LC_TIME=C
|
||||
|
||||
local CMAKE_SKIP_TESTS=(
|
||||
# broken with out-of-source + if qtbase is not already installed
|
||||
tst_moc
|
||||
tst_qmake
|
||||
# similarly broken when relocatable=OFF (bug #927691)
|
||||
tst_qapplication
|
||||
tst_qt_cmake_create
|
||||
tst_uic
|
||||
# needs x11/opengl, we *could* run these but tend to be flaky
|
||||
# when opengl rendering is involved (even if software-only)
|
||||
tst_qopengl{,config,widget,window}
|
||||
tst_qgraphicsview
|
||||
tst_qx11info
|
||||
# fails with network sandbox
|
||||
tst_qdnslookup
|
||||
# fails with sandbox
|
||||
tst_qsharedmemory
|
||||
# typical to lack SCTP support on non-generic kernels
|
||||
tst_qsctpsocket
|
||||
# randomly fails without -j1, and not worth it over this (bug #916181)
|
||||
tst_qfiledialog{,2}
|
||||
# may randomly hang+timeout, perhaps related to -j as well
|
||||
tst_qprocess #936484
|
||||
tst_qtimer
|
||||
# these can be flaky depending on the environment/toolchain
|
||||
tst_qlogging # backtrace log test can easily vary
|
||||
tst_q{,raw}font # affected by available fonts / settings (bug #914737)
|
||||
tst_qprinter # checks system's printers (bug #916216)
|
||||
tst_qhighdpi # may detect users' settings and fail (bug #935364)
|
||||
tst_qstorageinfo # checks mounted filesystems
|
||||
# flaky due to using different test framework and fails with USE=-gui
|
||||
tst_selftests
|
||||
# known failing when using clang+glibc+stdc++, needs looking into
|
||||
tst_qthread
|
||||
# partially failing on x86 chroots and seemingly(?) harmless (dev-qt
|
||||
# revdeps tests pass), skip globally to avoid keywording flakiness
|
||||
tst_json
|
||||
tst_qcolorspace
|
||||
tst_qdoublevalidator
|
||||
tst_qglobal
|
||||
tst_qglyphrun
|
||||
tst_qvectornd
|
||||
tst_rcc
|
||||
# similarly, but on armv7 and potentially others (bug #914028)
|
||||
tst_qlineedit
|
||||
tst_qpainter
|
||||
# likewise, known failing on BE arches (bug #914033,914371,918878)
|
||||
tst_qimagereader
|
||||
tst_qimagewriter
|
||||
tst_qpluginloader
|
||||
tst_quuid # >=6.6.2 had related fixes, needs retesting
|
||||
# partially broken on llvm-musl, needs looking into but skip to have
|
||||
# a baseline for regressions (rest of dev-qt still passes with musl)
|
||||
$(usev elibc_musl '
|
||||
tst_qicoimageformat
|
||||
tst_qimagereader
|
||||
tst_qimage
|
||||
')
|
||||
# fails due to hppa's NaN handling, needs looking into (bug #914371)
|
||||
$(usev hppa '
|
||||
tst_qcborvalue
|
||||
tst_qnumeric
|
||||
')
|
||||
# note: for linux, upstream only really runs+maintains tests for amd64
|
||||
# https://doc.qt.io/qt-6/supported-platforms.html
|
||||
)
|
||||
|
||||
qt6-build_src_test
|
||||
}
|
||||
|
||||
src_install() {
|
||||
qt6-build_src_install
|
||||
|
||||
if use test; then
|
||||
local delete_bins=( # need a better way to handle this
|
||||
clientserver copier crashingServer desktopsettingsaware_helper
|
||||
echo fileWriterProcess modal_helper nospace 'one space'
|
||||
paster qcommandlineparser_test_helper qfileopeneventexternal
|
||||
socketprocess syslocaleapp tst_qhashseed_helper 'two space s'
|
||||
write-read-write
|
||||
)
|
||||
local delete=( # sigh
|
||||
"${D}${QT6_BINDIR}"/test*
|
||||
"${delete_bins[@]/#/${D}${QT6_BINDIR}/}"
|
||||
)
|
||||
# using -f given not tracking which tests may be skipped or not
|
||||
rm -rf -- "${delete[@]}" || die
|
||||
fi
|
||||
}
|
||||
Reference in New Issue
Block a user