Compare commits

1 Commits
main ... 1.1

9 changed files with 305 additions and 245 deletions

View File

@@ -0,0 +1,244 @@
From 2b1e36e183ce75c224305c7a94457b92f7a5cf58 Mon Sep 17 00:00:00 2001
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
Pick-to: 6.5 6.2 5.15 5.12
Change-Id: Ic25a600c278203256e35f541026f34a8783235ae
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit b1e75376cc3adfc7da5502a277dfe9711f3e0536)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 0fb43e4395da34d561814242a0186999e4956e28)
---
src/network/access/qhttp2protocolhandler.cpp | 6 +--
.../access/qhttpnetworkconnectionchannel.cpp | 48 ++++++++++++++++++-
.../access/qhttpnetworkconnectionchannel_p.h | 6 +++
tests/auto/network/access/http2/tst_http2.cpp | 44 +++++++++++++++++
4 files changed, 99 insertions(+), 5 deletions(-)
diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
index 0abd99b9bc..3631b13dc8 100644
--- a/src/network/access/qhttp2protocolhandler.cpp
+++ b/src/network/access/qhttp2protocolhandler.cpp
@@ -303,12 +303,12 @@ bool QHttp2ProtocolHandler::sendRequest()
}
}
- 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
// and have a response already?
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 6766989690..1e4161d1fd 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -209,6 +209,10 @@ void QHttpNetworkConnectionChannel::abort()
bool QHttpNetworkConnectionChannel::sendRequest()
{
Q_ASSERT(protocolHandler);
+ if (waitingForPotentialAbort) {
+ needInvokeSendRequest = true;
+ return false; // this return value is unused
+ }
return protocolHandler->sendRequest();
}
@@ -221,21 +225,28 @@ bool QHttpNetworkConnectionChannel::sendRequest()
void QHttpNetworkConnectionChannel::sendRequestDelayed()
{
QMetaObject::invokeMethod(this, [this] {
- Q_ASSERT(protocolHandler);
if (reply)
- protocolHandler->sendRequest();
+ sendRequest();
}, Qt::ConnectionType::QueuedConnection);
}
void QHttpNetworkConnectionChannel::_q_receiveReply()
{
Q_ASSERT(protocolHandler);
+ if (waitingForPotentialAbort) {
+ needInvokeReceiveReply = true;
+ return;
+ }
protocolHandler->_q_receiveReply();
}
void QHttpNetworkConnectionChannel::_q_readyRead()
{
Q_ASSERT(protocolHandler);
+ if (waitingForPotentialAbort) {
+ needInvokeReadyRead = true;
+ return;
+ }
protocolHandler->_q_readyRead();
}
@@ -1239,7 +1250,18 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
if (!h2RequestsToSend.isEmpty()) {
// 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).
}
@@ -1257,6 +1279,28 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
}
+
+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()
{
const auto h2RequestsToSendCopy = std::exchange(h2RequestsToSend, {});
diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h
index c42290feca..061f20fd42 100644
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
@@ -74,6 +74,10 @@ public:
QAbstractSocket *socket;
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
QHttpNetworkReply *reply; // current reply for this request, only used for HTTP
@@ -146,6 +150,8 @@ public:
void closeAndResendCurrentRequest();
void resendCurrentRequest();
+ void checkAndResumeCommunication();
+
bool isSocketBusy() const;
bool isSocketWriting() const;
bool isSocketWaiting() const;
diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp
index 00efbc9832..c02e7b7b5b 100644
--- a/tests/auto/network/access/http2/tst_http2.cpp
+++ b/tests/auto/network/access/http2/tst_http2.cpp
@@ -106,6 +106,8 @@ private slots:
void duplicateRequestsWithAborts();
+ void abortOnEncrypted();
+
protected slots:
// Slots to listen to our in-process server:
void serverStarted(quint16 port);
@@ -1479,6 +1481,48 @@ void tst_Http2::duplicateRequestsWithAborts()
QCOMPARE(finishedCount, ExpectedSuccessfulRequests);
}
+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)
{
serverPort = port;
--
2.45.2

View File

@@ -1,51 +0,0 @@
From a43c7e58046604796aa69974ea1c5d3e2648c755 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
Date: Fri, 24 Jan 2025 11:07:58 -0800
Subject: [PATCH] QLibraryInfo: speed up checking if ":/qt/etc/qt.conf"
resource exists
Go straight for QResource, because this is run very early in Qt's
initialization, usually as a result of some debug message, via
QLoggingRegistry::initializeRules(). This bypasses the need to create
QResourceFileEnginePrivate, QResourceFileEngine, QFileInfoPrivate, and
QFileInfo, all of which would end up in this .isValid() call.
Additionally, I'm making it query in the C locale, which will also avoid
initializing the system & default QLocales. If a resource exists in any
language, the C locale query will find it.
Task-number: QTBUG-133206
Change-Id: I434b498903d793c12d35fffd3e297bfdbdc1b6fe
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit d59e640c868f3db2d661970f3d34a22013d49053)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit ae2502b4ad3d1215211bf4ed44037a40f52a313d)
---
src/corelib/global/qlibraryinfo.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 94f3e60deba..5f6042be29d 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -6,6 +6,7 @@
#include "qstringlist.h"
#include "qfile.h"
#if QT_CONFIG(settings)
+#include "qresource.h"
#include "qsettings.h"
#endif
#include "qlibraryinfo.h"
@@ -103,7 +104,7 @@ static std::unique_ptr<QSettings> findConfiguration()
return std::make_unique<QSettings>(*qtconfManualPath, QSettings::IniFormat);
QString qtconfig = QStringLiteral(":/qt/etc/qt.conf");
- if (QFile::exists(qtconfig))
+ if (QResource(qtconfig, QLocale::c()).isValid())
return std::make_unique<QSettings>(qtconfig, QSettings::IniFormat);
#ifdef Q_OS_DARWIN
CFBundleRef bundleRef = CFBundleGetMainBundle();
--
2.48.1

View File

@@ -1,49 +0,0 @@
From 12d4bf1ab52748cb84894f50d437064b439e0b7d Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
Date: Fri, 24 Jan 2025 10:43:38 -0800
Subject: [PATCH] QLocale: try to survive being created during application shut
down
QLocale is very often accessed during global static destructors, so
let's try and survive if the default has already been destroyed. In that
case, we shall fall back to the C locale.
I've placed the call to systemData(), which updates the system locale,
before the initialization of defaultLocalePrivate, as the initialization
of the latter depends on the former.
Task-number: QTBUG-133206
Change-Id: I48e29b45f9be4514336cfffdf5affa5631a956a3
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Albert Astals Cid <aacid@kde.org>
(cherry picked from commit e0a1f491567f2495443babc5aa36a038260f96c6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit bcc0e6124a2ec80df535178d056324433f9ff984)
---
src/corelib/text/qlocale.cpp | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index 4f5b5452648..eff083b3d94 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -1112,10 +1112,13 @@ QLocale::QLocale(QStringView name)
*/
QLocale::QLocale()
- : d(*defaultLocalePrivate)
+ : d(c_private())
{
- // Make sure system data is up to date:
- systemData();
+ if (!defaultLocalePrivate.isDestroyed()) {
+ // Make sure system data is up to date:
+ systemData();
+ d = *defaultLocalePrivate;
+ }
}
/*!
--
2.48.1

View File

@@ -1,49 +0,0 @@
From 2ef615228bba9a8eb282437bfb7472f925610e89 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
Date: Fri, 24 Jan 2025 10:28:30 -0800
Subject: [PATCH] QSystemLocale: bail out if accessed post-destruction
There's little we can do, but a lot of content ends up in QLocale very
late in the execution. Let's at least not crash.
Task-number: QTBUG-133206
Change-Id: I77d41141cb115147f9befffdd5e69dac19c96044
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
(cherry picked from commit e32f28034ad2383393645777bcd96eab3f696076)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit d5c5f9f3529b384d0d4bea2d51f0ad6a3d57481d)
---
src/corelib/text/qlocale_unix.cpp | 2 ++
src/corelib/text/qlocale_win.cpp | 2 ++
2 files changed, 4 insertions(+)
diff --git a/src/corelib/text/qlocale_unix.cpp b/src/corelib/text/qlocale_unix.cpp
index a934f24c016..91dbb74c207 100644
--- a/src/corelib/text/qlocale_unix.cpp
+++ b/src/corelib/text/qlocale_unix.cpp
@@ -127,6 +127,8 @@ QLocale QSystemLocale::fallbackLocale() const
QVariant QSystemLocale::query(QueryType type, QVariant &&in) const
{
QSystemLocaleData *d = qSystemLocaleData();
+ if (!d)
+ return QVariant();
if (type == LocaleChanged) {
d->readEnvironment();
diff --git a/src/corelib/text/qlocale_win.cpp b/src/corelib/text/qlocale_win.cpp
index 9fdb46a4c92..793751daaf0 100644
--- a/src/corelib/text/qlocale_win.cpp
+++ b/src/corelib/text/qlocale_win.cpp
@@ -828,6 +828,8 @@ QLocale QSystemLocale::fallbackLocale() const
QVariant QSystemLocale::query(QueryType type, QVariant &&in) const
{
QSystemLocalePrivate *d = systemLocalePrivate();
+ if (!d)
+ return QVariant();
switch(type) {
case DecimalPoint:
return d->decimalPoint();
--
2.48.1

48
gcc14.patch Normal file
View File

@@ -0,0 +1,48 @@
From 39fa7e7bef90be2940c5f736935f963e3969e0bd Mon Sep 17 00:00:00 2001
From: Dmitry Shachnev <mitya57@gmail.com>
Date: Sat, 27 Jul 2024 23:03:07 +0300
Subject: [PATCH] Use _Float16 only when SSE2 is enabled
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
Pick-to: 6.8 6.7 6.5
Change-Id: I393ee83eb8e8888f5fc9e3b349dc8b063eef6f5a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
---
diff --git a/src/corelib/global/qtypes.h b/src/corelib/global/qtypes.h
index db9ba38..28458f6 100644
--- a/src/corelib/global/qtypes.h
+++ b/src/corelib/global/qtypes.h
@@ -263,13 +263,12 @@
// disabled due to https://github.com/llvm/llvm-project/issues/56963
# 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
using NativeFloat16Type = void;

View File

@@ -1,70 +1,3 @@
-------------------------------------------------------------------
Thu Feb 6 13:44:48 UTC 2025 - Christophe Marin <christophe@krop.fr>
- Drop patches:
* 0001-Revert-QThread-Unix-move-the-pthread_key-to-a-file-s.patch
* 0002-Revert-QThread-Unix-revert-to-pthread-destruction-in.patch
- Add patches (kde#499537, QTBUG-133500, QTBUG-130278)
* 0001-QLocale-try-to-survive-being-created-during-applicat.patch
* 0001-QSystemLocale-bail-out-if-accessed-post-destruction.patch
* 0001-QLibraryInfo-speed-up-checking-if-qt-etc-qt.conf-res.patch
-------------------------------------------------------------------
Wed Feb 5 09:54:18 UTC 2025 - Fabian Vogt <fabian@ritter-vogt.de>
- Add patches to avoid crashes on exit (kde#499537):
* 0001-Revert-QThread-Unix-move-the-pthread_key-to-a-file-s.patch
* 0002-Revert-QThread-Unix-revert-to-pthread-destruction-in.patch
-------------------------------------------------------------------
Fri Jan 31 10:22:52 UTC 2025 - Christophe Marin <christophe@krop.fr>
- Update to 6.8.2
https://www.qt.io/blog/qt-6.8.2-released
-------------------------------------------------------------------
Mon Dec 2 13:01:57 UTC 2024 - Christophe Marin <christophe@krop.fr>
- Update to 6.8.1:
* https://www.qt.io/blog/qt-6.8.1-released
- Drop patches, merged upstream:
* 0001-QAbstractItemModelPrivate-add-resetting-member.patch
* 0001-QUuid-restore-sorting-order-of-Qt-6.8.patch
* 0001-QDirIterator-don-t-crash-with-next-after-hasNext-ret.patch
-------------------------------------------------------------------
Tue Oct 22 06:59:37 UTC 2024 - Christophe Marin <christophe@krop.fr>
- Add patch to fix qxmpp test failures (gh#qxmpp-project/qxmpp#659):
* 0001-QUuid-restore-sorting-order-of-Qt-6.8.patch
- Add patch to fix potential crash with QDirIterator (QTBUG-130142):
* 0001-QDirIterator-don-t-crash-with-next-after-hasNext-ret.patch
-------------------------------------------------------------------
Tue Oct 8 09:29:39 UTC 2024 - Christophe Marin <christophe@krop.fr>
- Update to 6.8.0:
* https://www.qt.io/blog/qt-6.8-released
- Add upstream change (needed for kde 493116's bugfix):
* 0001-QAbstractItemModelPrivate-add-resetting-member.patch
- Drop patch, merged upstream:
* 0001-Revert-xcb-handle-XI2-input-button-and-motion-events.patch
-------------------------------------------------------------------
Tue Oct 1 22:23:35 UTC 2024 - Christophe Marin <christophe@krop.fr>
- Add upstream fix:
* 0001-Revert-xcb-handle-XI2-input-button-and-motion-events.patch
-------------------------------------------------------------------
Sat Sep 28 08:22:54 UTC 2024 - Christophe Marin <christophe@krop.fr>
- Update to 6.7.3
* https://www.qt.io/blog/qt-6.7.3-released
- Drop patches, merged upstream:
* gcc14.patch
* 0001-HTTP2-Delay-any-communication-until-encrypted-can-be.patch
-------------------------------------------------------------------
Wed Aug 7 12:46:16 UTC 2024 - Filip Kastl <filip.kastl@suse.com>

View File

@@ -16,8 +16,8 @@
#
%define real_version 6.8.2
%define short_version 6.8
%define real_version 6.7.2
%define short_version 6.7
%define tar_name qtbase-everywhere-src
%define tar_suffix %{nil}
#
@@ -33,7 +33,7 @@
%bcond_without system_md4c
%endif
Name: qt6-base%{?pkg_suffix}
Version: 6.8.2
Version: 6.7.2
Release: 0
Summary: Qt 6 core components (Core, Gui, Widgets, Network...)
# Legal: qtpaths is BSD-3-Clause
@@ -42,10 +42,7 @@ URL: https://www.qt.io
Source0: https://download.qt.io/official_releases/qt/%{short_version}/%{real_version}%{tar_suffix}/submodules/%{tar_name}-%{real_version}%{tar_suffix}.tar.xz
Source99: qt6-base-rpmlintrc
# Patches 0-100 are upstream patches #
# https://bugs.kde.org/show_bug.cgi?id=499537
Patch0: 0001-QLocale-try-to-survive-being-created-during-applicat.patch
Patch1: 0001-QSystemLocale-bail-out-if-accessed-post-destruction.patch
Patch2: 0001-QLibraryInfo-speed-up-checking-if-qt-etc-qt.conf-res.patch
Patch0: gcc14.patch
# Patches 100-200 are openSUSE and/or non-upstream(able) patches #
# No need to pollute the library dir with object files, install them in the qt6 subfolder
Patch100: 0001-CMake-Install-objects-files-into-ARCHDATADIR.patch
@@ -53,6 +50,7 @@ Patch100: 0001-CMake-Install-objects-files-into-ARCHDATADIR.patch
Patch101: 0001-Use-newer-GCC-on-Leap.patch
%endif
Patch102: 0001-Don-t-strip-binaries-when-building-with-qmake.patch
Patch103: 0001-HTTP2-Delay-any-communication-until-encrypted-can-be.patch
##
BuildRequires: cmake >= 3.18.3
BuildRequires: cups-devel
@@ -449,8 +447,6 @@ report generation facilities.
%package -n qt6-printsupport-devel
Summary: Development files for the Qt 6 PrintSupport library
# Due to QTBUG-87776, the dependency needs to be in qt6-printsupport-devel
Requires: cups-devel
Requires: libQt6PrintSupport6 = %{version}
Requires: cmake(Qt6Core) = %{real_version}
Requires: cmake(Qt6Gui) = %{real_version}
@@ -461,6 +457,8 @@ Development files for the Qt 6 PrintSupport library.
%package -n qt6-printsupport-private-devel
Summary: Non-ABI stable API for the Qt 6 PrintSupport library
# Includes <cups/ppd.h> in qprint_p.h
Requires: cups-devel
Requires: qt6-core-private-devel = %{version}
Requires: qt6-gui-private-devel = %{version}
Requires: qt6-widgets-private-devel = %{version}
@@ -744,9 +742,6 @@ installed on your system.
cp src/3rdparty/freetype/LICENSE.txt src/gui/painting/FREETYPE_LICENSE.txt
sed -i 's#../../3rdparty/freetype/LICENSE.txt#FREETYPE_LICENSE.txt#' src/gui/painting/qt_attribution.json
# Same thing for blake2
sed -i '/\/3rdparty\/blake2/d' src/corelib/CMakeLists.txt
# We don't want to use these 3rdparty libraries
rm -r src/3rdparty/{blake2,double-conversion,freetype,harfbuzz-ng,libjpeg,libpng,pcre2,sqlite,xcb,zlib}
%if %{with system_md4c}
@@ -788,15 +783,11 @@ sed -i '/zstd CONFIG/d' cmake/FindWrapZSTD.cmake
-DQT_BUILD_TESTS:BOOL=FALSE \
-DQT_CREATE_VERSIONED_HARD_LINK:BOOL=FALSE \
-DQT_DISABLE_RPATH:BOOL=FALSE \
-DQT_GENERATE_SBOM:BOOL=FALSE \
-DQT_SBOM_GENERATE_JSON:BOOL=FALSE \
-DQT_SBOM_VERIFY:BOOL=FALSE \
%ifnarch ppc64
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=TRUE \
%endif
-DFEATURE_elf_private_full_version=TRUE \
-DFEATURE_enable_new_dtags:BOOL=TRUE \
-DFEATURE_forkfd_pidfd:BOOL=FALSE \
-DFEATURE_journald:BOOL=TRUE \
-DFEATURE_libproxy:BOOL=TRUE \
-DFEATURE_reduce_relocations:BOOL=FALSE \
@@ -805,6 +796,7 @@ sed -i '/zstd CONFIG/d' cmake/FindWrapZSTD.cmake
-DFEATURE_system_xcb_xinput:BOOL=TRUE \
-DFEATURE_xcb_native_painting:BOOL=TRUE \
-DINPUT_openssl:STRING=linked \
-DFEATURE_forkfd_pidfd:BOOL=FALSE \
%if 0%{?with_gles}
-DINPUT_opengl:STRING=es2 \
-DFEATURE_opengles3:BOOL=TRUE
@@ -836,20 +828,12 @@ rm %{buildroot}%{_qt6_mkspecsdir}/modules/qt_lib_openglwidgets_private.pri
# These files are only useful for the Qt continuous integration
rm %{buildroot}%{_qt6_libexecdir}/ensure_pro_file.cmake
rm %{buildroot}%{_qt6_libexecdir}/qt-android-runner.py
rm %{buildroot}%{_qt6_libexecdir}/qt-testrunner.py
rm %{buildroot}%{_qt6_libexecdir}/sanitizer-testrunner.py
# This is only for Apple platforms and has a python2 dep
rm -r %{buildroot}%{_qt6_mkspecsdir}/features/uikit
# Not useful for desktop installs
rm -r %{buildroot}%{_qt6_cmakedir}/Qt6ExamplesAssetDownloaderPrivate
rm -r %{buildroot}%{_qt6_includedir}/QtExamplesAssetDownloader
rm %{buildroot}%{_qt6_descriptionsdir}/ExamplesAssetDownloaderPrivate.json
rm %{buildroot}%{_qt6_libdir}/libQt6ExamplesAssetDownloader.*
rm %{buildroot}%{_qt6_metatypesdir}/qt6examplesassetdownloaderprivate_*_metatypes.json
%ldconfig_scriptlets -n libQt6Concurrent6
%ldconfig_scriptlets -n libQt6Core6
%ldconfig_scriptlets -n libQt6DBus6
@@ -1213,8 +1197,8 @@ rm %{buildroot}%{_qt6_metatypesdir}/qt6examplesassetdownloaderprivate_*_metatype
%{_qt6_libdir}/libQt6ExampleIcons.prl
# There's no mistake, this folder needs to be installed
# These are CMake objects files which are not part of any library
%dir %{_qt6_archdatadir}/objects-*
%{_qt6_archdatadir}/objects-*/ExampleIconsPrivate_resources_1/
%dir %{_qt6_archdatadir}/objects-RelWithDebInfo
%{_qt6_archdatadir}/objects-RelWithDebInfo/ExampleIconsPrivate_resources_1/
%{_qt6_metatypesdir}/qt6exampleiconsprivate_*_metatypes.json
%files -n qt6-kmssupport-devel-static

BIN
qtbase-everywhere-src-6.7.2.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
qtbase-everywhere-src-6.8.2.tar.xz (Stored with Git LFS)

Binary file not shown.