Qt6, bump to (disabled) 6.10.2 (#13862)

This commit is contained in:
Schrijvers Luc
2026-03-26 13:24:00 +01:00
committed by GitHub
parent 21ff5b5e48
commit a55f1dda4f
47 changed files with 716 additions and 956 deletions

View File

@@ -1,19 +0,0 @@
diff --git a/src/corelib/io/qdataurl.cpp b/src/corelib/io/qdataurl.cpp
index 65b934b3f67..c5ecca8fb82 100644
--- a/src/corelib/io/qdataurl.cpp
+++ b/src/corelib/io/qdataurl.cpp
@@ -47,10 +47,10 @@ Q_CORE_EXPORT bool qDecodeDataUrl(const QUrl &uri, QString &mimeType, QByteArray
QLatin1StringView textPlain;
constexpr auto charset = "charset"_L1;
if (QLatin1StringView{data}.startsWith(charset, Qt::CaseInsensitive)) {
- qsizetype i = charset.size();
- while (data.at(i) == ' ')
- ++i;
- if (data.at(i) == '=')
+ QByteArrayView copy = data.sliced(charset.size());
+ while (copy.startsWith(' '))
+ copy.slice(1);
+ if (copy.startsWith('='))
textPlain = "text/plain;"_L1;
}

View File

@@ -1,120 +0,0 @@
diff --git a/src/network/access/qabstractprotocolhandler_p.h b/src/network/access/qabstractprotocolhandler_p.h
index da5eaeeb74c4..42925a169d34 100644
--- a/src/network/access/qabstractprotocolhandler_p.h
+++ b/src/network/access/qabstractprotocolhandler_p.h
@@ -17,6 +17,8 @@
#include <QtNetwork/private/qtnetworkglobal_p.h>
+#include <QtCore/qtpreprocessorsupport.h>
+
QT_REQUIRE_CONFIG(http);
QT_BEGIN_NAMESPACE
@@ -34,6 +36,13 @@ public:
virtual void _q_receiveReply() = 0;
virtual void _q_readyRead() = 0;
virtual bool sendRequest() = 0;
+ // Called when the reply is being destroyed and removing itself from any other internals
+ virtual bool tryRemoveReply(QHttpNetworkReply *reply)
+ {
+ Q_UNUSED(reply);
+ // base implementation is a noop
+ return false;
+ }
void setReply(QHttpNetworkReply *reply);
protected:
diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
index 87dc504ee126..a99921f52881 100644
--- a/src/network/access/qhttp2protocolhandler.cpp
+++ b/src/network/access/qhttp2protocolhandler.cpp
@@ -151,15 +151,6 @@ void QHttp2ProtocolHandler::handleConnectionClosure()
h2Connection->handleConnectionClosure();
}
-void QHttp2ProtocolHandler::_q_replyDestroyed(QObject *reply)
-{
- QPointer<QHttp2Stream> stream = streamIDs.take(reply);
- requestReplyPairs.remove(stream);
- QObject::disconnect(stream, nullptr, this, nullptr);
- if (stream && stream->isActive())
- stream->sendRST_STREAM(CANCEL);
-}
-
void QHttp2ProtocolHandler::_q_uploadDataDestroyed(QObject *uploadData)
{
QPointer<QHttp2Stream> stream = streamIDs.take(uploadData);
@@ -262,6 +253,25 @@ bool QHttp2ProtocolHandler::sendRequest()
return true;
}
+/*!
+ \internal
+ This gets called during destruction of \a reply, so do not call any functions
+ on \a reply. We check if there is a stream associated with the reply and,
+ if there is, we remove the request-reply pair associated with this stream,
+ delete the stream and return \c{true}. Otherwise nothing happens and we
+ return \c{false}.
+*/
+bool QHttp2ProtocolHandler::tryRemoveReply(QHttpNetworkReply *reply)
+{
+ QHttp2Stream *stream = streamIDs.take(reply);
+ if (stream) {
+ requestReplyPairs.remove(stream);
+ stream->deleteLater();
+ return true;
+ }
+ return false;
+}
+
bool QHttp2ProtocolHandler::sendHEADERS(QHttp2Stream *stream, QHttpNetworkRequest &request)
{
using namespace HPack;
@@ -623,8 +633,6 @@ void QHttp2ProtocolHandler::connectStream(const HttpMessagePair &message, QHttp2
auto *replyPrivate = reply->d_func();
replyPrivate->connection = m_connection;
replyPrivate->connectionChannel = m_channel;
- connect(reply, &QObject::destroyed, this, &QHttp2ProtocolHandler::_q_replyDestroyed,
- Qt::UniqueConnection);
reply->setHttp2WasUsed(true);
QPointer<QHttp2Stream> &oldStream = streamIDs[reply];
diff --git a/src/network/access/qhttp2protocolhandler_p.h b/src/network/access/qhttp2protocolhandler_p.h
index ecbc6823dcfd..aca8a0b6f66b 100644
--- a/src/network/access/qhttp2protocolhandler_p.h
+++ b/src/network/access/qhttp2protocolhandler_p.h
@@ -61,7 +61,6 @@ public:
Q_INVOKABLE void handleConnectionClosure();
private slots:
- void _q_replyDestroyed(QObject *reply);
void _q_uploadDataDestroyed(QObject *uploadData);
private:
@@ -70,6 +69,7 @@ private:
void _q_readyRead() override;
Q_INVOKABLE void _q_receiveReply() override;
Q_INVOKABLE bool sendRequest() override;
+ bool tryRemoveReply(QHttpNetworkReply *reply) override;
bool sendSETTINGS_ACK();
bool sendHEADERS(QHttp2Stream *stream, QHttpNetworkRequest &request);
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index cf7aad1930de..4f105af084a8 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -1002,6 +1002,13 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply)
QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection);
return;
}
+ // Check if the h2 protocol handler already started processing it
+ if ((connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2Direct
+ || channels[i].switchedToHttp2)
+ && channels[i].protocolHandler) {
+ if (channels[i].protocolHandler->tryRemoveReply(reply))
+ return;
+ }
}
// remove from the high priority queue
if (!highPriorityQueue.isEmpty()) {

View File

@@ -1,36 +0,0 @@
diff --git a/src/gui/painting/qcolortransfergeneric_p.h b/src/gui/painting/qcolortransfergeneric_p.h
index 6caebceb1a4c..c2ebd937a445 100644
--- a/src/gui/painting/qcolortransfergeneric_p.h
+++ b/src/gui/painting/qcolortransfergeneric_p.h
@@ -65,6 +65,7 @@ private:
// HLG from linear [0-12] -> [0-1]
static float hlgFromLinear(float x)
{
+ x = std::clamp(x, 0.f, 12.f);
if (x > 1.f)
return m_hlg_a * std::log(x - m_hlg_b) + m_hlg_c;
return std::sqrt(x * 0.25f);
@@ -73,6 +74,7 @@ private:
// HLG to linear [0-1] -> [0-12]
static float hlgToLinear(float x)
{
+ x = std::clamp(x, 0.f, 1.f);
if (x < 0.5f)
return (x * x) * 4.f;
return std::exp((x - m_hlg_c) / m_hlg_a) + m_hlg_b;
@@ -86,6 +88,7 @@ private:
// PQ to linear [0-1] -> [0-64]
static float pqToLinear(float e)
{
+ e = std::clamp(e, 0.f, 1.f);
// m2-th root of E'
const float eRoot = std::pow(e, 1.f / m_pq_m2);
// rational transform
@@ -99,6 +102,7 @@ private:
// PQ from linear [0-64] -> [0-1]
static float pqFromLinear(float fd)
{
+ fd = std::clamp(fd, 0.f, 64.f);
// scale Fd to Y
const float y = fd * (1.f / m_pq_f);
// yRoot = Y^m1 -- "root" because m1 is <1

View File

@@ -1,263 +0,0 @@
diff --git a/src/plugins/tls/schannel/qtls_schannel.cpp b/src/plugins/tls/schannel/qtls_schannel.cpp
index 617e070025e6..7e6a372347e0 100644
--- a/src/plugins/tls/schannel/qtls_schannel.cpp
+++ b/src/plugins/tls/schannel/qtls_schannel.cpp
@@ -7,6 +7,7 @@
#include "qtlskey_schannel_p.h"
#include "qx509_schannel_p.h"
#include "qtls_schannel_p.h"
+#include "../shared/qasn1element_p.h"
#include <QtNetwork/private/qsslcertificate_p.h>
#include <QtNetwork/private/qsslcipher_p.h>
@@ -126,8 +127,9 @@ using namespace Qt::StringLiterals;
Q_LOGGING_CATEGORY(lcTlsBackendSchannel, "qt.tlsbackend.schannel");
// Defined in qsslsocket_qt.cpp.
-QByteArray _q_makePkcs12(const QList<QSslCertificate> &certs, const QSslKey &key,
+extern QByteArray _q_makePkcs12(const QList<QSslCertificate> &certs, const QSslKey &key,
const QString &passPhrase);
+extern QAsn1Element _q_PKCS12_key(const QSslKey &key);
namespace {
bool supportsTls13();
@@ -1008,7 +1010,6 @@ TlsCryptographSchannel::~TlsCryptographSchannel()
closeCertificateStores();
deallocateContext();
freeCredentialsHandle();
- CertFreeCertificateContext(localCertContext);
}
void TlsCryptographSchannel::init(QSslSocket *qObj, QSslSocketPrivate *dObj)
@@ -1103,12 +1104,6 @@ bool TlsCryptographSchannel::acquireCredentialsHandle()
return false;
}
- const CERT_CHAIN_CONTEXT *chainContext = nullptr;
- auto freeCertChain = qScopeGuard([&chainContext]() {
- if (chainContext)
- CertFreeCertificateChain(chainContext);
- });
-
DWORD certsCount = 0;
// Set up our certificate stores before trying to use one...
initializeCertificateStores();
@@ -1119,36 +1114,11 @@ bool TlsCryptographSchannel::acquireCredentialsHandle()
if (!configuration.localCertificateChain().isEmpty() && !localCertificateStore)
return true; // 'true' because "tst_QSslSocket::setEmptyKey" expects us to not disconnect
+ PCCERT_CONTEXT localCertificate = nullptr;
if (localCertificateStore != nullptr) {
- CERT_CHAIN_FIND_BY_ISSUER_PARA findParam;
- ZeroMemory(&findParam, sizeof(findParam));
- findParam.cbSize = sizeof(findParam);
- findParam.pszUsageIdentifier = isClient ? szOID_PKIX_KP_CLIENT_AUTH : szOID_PKIX_KP_SERVER_AUTH;
-
- // There should only be one chain in our store, so.. we grab that one.
- chainContext = CertFindChainInStore(localCertificateStore.get(),
- X509_ASN_ENCODING,
- 0,
- CERT_CHAIN_FIND_BY_ISSUER,
- &findParam,
- nullptr);
- if (!chainContext) {
- const QString message = isClient
- ? QSslSocket::tr("The certificate provided cannot be used for a client.")
- : QSslSocket::tr("The certificate provided cannot be used for a server.");
- setErrorAndEmit(d, QAbstractSocket::SocketError::SslInvalidUserDataError, message);
- return false;
- }
- Q_ASSERT(chainContext->cChain == 1);
- Q_ASSERT(chainContext->rgpChain[0]);
- Q_ASSERT(chainContext->rgpChain[0]->cbSize >= 1);
- Q_ASSERT(chainContext->rgpChain[0]->rgpElement[0]);
- Q_ASSERT(!localCertContext);
- localCertContext = CertDuplicateCertificateContext(chainContext->rgpChain[0]
- ->rgpElement[0]
- ->pCertContext);
certsCount = 1;
- Q_ASSERT(localCertContext);
+ localCertificate = static_cast<PCCERT_CONTEXT>(configuration.localCertificate().handle());
+ Q_ASSERT(localCertificate);
}
const QList<QSslCipher> ciphers = configuration.ciphers();
@@ -1172,7 +1142,7 @@ bool TlsCryptographSchannel::acquireCredentialsHandle()
SCH_CREDENTIALS_VERSION,
0,
certsCount,
- &localCertContext,
+ &localCertificate,
nullptr,
0,
nullptr,
@@ -1729,9 +1699,6 @@ void TlsCryptographSchannel::reset()
connectionInfo = {};
streamSizes = {};
- CertFreeCertificateContext(localCertContext);
- localCertContext = nullptr;
-
contextAttributes = 0;
intermediateBuffer.clear();
schannelState = SchannelState::InitializeHandshake;
@@ -2282,6 +2249,70 @@ bool TlsCryptographSchannel::checkSslErrors()
return true;
}
+static void attachPrivateKeyToCertificate(const QSslCertificate &certificate,
+ const QSslKey &privateKey)
+{
+ QAsn1Element elem = _q_PKCS12_key(privateKey);
+ QByteArray buffer;
+ QDataStream stream(&buffer, QDataStream::WriteOnly);
+ elem.write(stream);
+ NCRYPT_PROV_HANDLE provider = 0;
+ SECURITY_STATUS status = NCryptOpenStorageProvider(&provider, MS_KEY_STORAGE_PROVIDER, 0);
+ if (status != SEC_E_OK) {
+ qCWarning(lcTlsBackendSchannel())
+ << "Failed to open ncrypt storage provider:" << schannelErrorToString(status);
+ return;
+ }
+ const auto freeProvider = qScopeGuard([provider]() { NCryptFreeObject(provider); });
+
+ const QString certName = certificate.subjectInfo(QSslCertificate::CommonName).front();
+ QSpan<const QChar> nameSpan(certName);
+ NCryptBuffer nbuffer{ ULONG(nameSpan.size_bytes() + sizeof(char16_t)),
+ NCRYPTBUFFER_PKCS_KEY_NAME,
+ const_reinterpret_cast<void *>(nameSpan.data()) };
+ NCryptBufferDesc bufferDesc{ NCRYPTBUFFER_VERSION, 1, &nbuffer };
+ NCRYPT_KEY_HANDLE ncryptKey = 0;
+ status = NCryptImportKey(provider, 0, NCRYPT_PKCS8_PRIVATE_KEY_BLOB, &bufferDesc, &ncryptKey,
+ PBYTE(buffer.data()), buffer.size(), 0);
+ if (status != SEC_E_OK) {
+ qCWarning(lcTlsBackendSchannel())
+ << "Failed to import private key:" << schannelErrorToString(status);
+ return;
+ }
+ const auto freeKey = qScopeGuard([ncryptKey]() { NCryptFreeObject(ncryptKey); });
+
+ CERT_CONTEXT *context = PCERT_CONTEXT(certificate.handle());
+ Q_ASSERT(context);
+
+ CRYPT_DATA_BLOB keyBlob = { sizeof(ncryptKey), PBYTE(&ncryptKey) };
+ BOOL ok =
+ CertSetCertificateContextProperty(context, CERT_NCRYPT_KEY_HANDLE_PROP_ID, 0, &keyBlob);
+ if (!ok) {
+ auto error = GetLastError();
+ if (lcTlsBackendSchannel().isWarningEnabled())
+ qErrnoWarning(int(error), "Failed to set ncrypt handle property.");
+ return;
+ }
+
+ CRYPT_KEY_PROV_INFO provInfo{
+ const_reinterpret_cast<LPWSTR>(certName.constData()),
+ const_cast<LPWSTR>(MS_KEY_STORAGE_PROVIDER),
+ 0,
+ CERT_SET_KEY_PROV_HANDLE_PROP_ID | CERT_SET_KEY_CONTEXT_PROP_ID,
+ 0,
+ nullptr,
+ 0,
+ };
+ ok = CertSetCertificateContextProperty(context, CERT_KEY_PROV_INFO_PROP_ID,
+ CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG, &provInfo);
+ if (!ok) {
+ auto error = GetLastError();
+ if (lcTlsBackendSchannel().isWarningEnabled())
+ qErrnoWarning(int(error), "Failed to set key provider info property.");
+ return;
+ }
+}
+
void TlsCryptographSchannel::initializeCertificateStores()
{
//// helper function which turns a chain into a certificate store
@@ -2298,7 +2329,10 @@ void TlsCryptographSchannel::initializeCertificateStores()
CRYPT_DATA_BLOB pfxBlob;
pfxBlob.cbData = DWORD(pkcs12.length());
pfxBlob.pbData = reinterpret_cast<unsigned char *>(pkcs12.data());
- return QHCertStorePointer(PFXImportCertStore(&pfxBlob, passphrase, 0));
+ // ALWAYS_CNG to import using "Cryptography API: Next Generation (CNG)"
+ // NO_PERSIST_KEY to request not persisting anything imported to disk
+ constexpr DWORD flags = PKCS12_ALWAYS_CNG_KSP | PKCS12_NO_PERSIST_KEY;
+ return QHCertStorePointer(PFXImportCertStore(&pfxBlob, passphrase, flags));
};
if (!configuration.localCertificateChain().isEmpty()) {
@@ -2308,10 +2342,34 @@ void TlsCryptographSchannel::initializeCertificateStores()
return;
}
if (localCertificateStore == nullptr) {
- localCertificateStore = createStoreFromCertificateChain(configuration.localCertificateChain(),
- configuration.privateKey());
- if (localCertificateStore == nullptr)
+ localCertificateStore =
+ createStoreFromCertificateChain(configuration.localCertificateChain(), {});
+ if (localCertificateStore) {
+ const CERT_CONTEXT *certificateContext = CertFindCertificateInStore(
+ localCertificateStore.get(), X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0,
+ CERT_FIND_ANY, nullptr, nullptr);
+ if (certificateContext) {
+ auto *backend = QTlsBackend::backend<X509CertificateSchannel>(
+ configuration.localCertificate());
+ backend->certificateContext.reset(
+ CertDuplicateCertificateContext(certificateContext));
+
+ DWORD keySpec = 0;
+ BOOL mustFree = FALSE;
+ NCRYPT_KEY_HANDLE testKey = 0;
+ BOOL ok = CryptAcquireCertificatePrivateKey(
+ certificateContext, CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG, nullptr,
+ &testKey, &keySpec, &mustFree);
+ if (mustFree)
+ NCryptFreeObject(testKey);
+ if (!ok) {
+ attachPrivateKeyToCertificate(configuration.localCertificate(),
+ configuration.privateKey());
+ }
+ }
+ } else {
qCWarning(lcTlsBackendSchannel, "Failed to load certificate chain!");
+ }
}
}
diff --git a/src/plugins/tls/schannel/qtls_schannel_p.h b/src/plugins/tls/schannel/qtls_schannel_p.h
index 64c3b21d45e8..5d5297954b2d 100644
--- a/src/plugins/tls/schannel/qtls_schannel_p.h
+++ b/src/plugins/tls/schannel/qtls_schannel_p.h
@@ -114,8 +114,6 @@ private:
QHCertStorePointer peerCertificateStore = nullptr;
QHCertStorePointer caCertificateStore = nullptr;
- const CERT_CONTEXT *localCertContext = nullptr;
-
ULONG contextAttributes = 0;
qint64 missingData = 0;
diff --git a/src/plugins/tls/schannel/qx509_schannel_p.h b/src/plugins/tls/schannel/qx509_schannel_p.h
index 4625c95..eeb37aa 100644
--- a/src/plugins/tls/schannel/qx509_schannel_p.h
+++ b/src/plugins/tls/schannel/qx509_schannel_p.h
@@ -40,7 +40,7 @@ public:
static bool importPkcs12(QIODevice *device, QSslKey *key, QSslCertificate *cert,
QList<QSslCertificate> *caCertificates,
const QByteArray &passPhrase);
-private:
+
const CERT_CONTEXT *certificateContext = nullptr;
Q_DISABLE_COPY_MOVE(X509CertificateSchannel);
diff --git a/src/plugins/tls/shared/qsslsocket_qt.cpp b/src/plugins/tls/shared/qsslsocket_qt.cpp
index f55b3e3ded7a..7e108dceca45 100644
--- a/src/plugins/tls/shared/qsslsocket_qt.cpp
+++ b/src/plugins/tls/shared/qsslsocket_qt.cpp
@@ -134,7 +134,7 @@ static QByteArray _q_PKCS12_certBag(const QSslCertificate &cert)
return ba;
}
-static QAsn1Element _q_PKCS12_key(const QSslKey &key)
+QAsn1Element _q_PKCS12_key(const QSslKey &key)
{
Q_ASSERT(key.algorithm() == QSsl::Rsa || key.algorithm() == QSsl::Dsa);

View File

@@ -1,4 +1,4 @@
From 6d0fb38ba72dd1324c2857364bb2834feb974dd6 Mon Sep 17 00:00:00 2001
From edb1d2579e54a45439326442622d43a742df4a71 Mon Sep 17 00:00:00 2001
From: Luc Schrijvers <begasus@gmail.com>
Date: Sat, 26 Apr 2025 10:50:40 +0200
Subject: Build fix
@@ -18,31 +18,18 @@ index bdf8875..637427e 100644
QStringList result;
if (styleHint == QFont::Monospace || styleHint == QFont::Courier) {
diff --git a/src/platform/qhaikuplatformfontdatabase.h b/src/platform/qhaikuplatformfontdatabase.h
index 6397903..d16396a 100644
index 6397903..0ddfd52 100644
--- a/src/platform/qhaikuplatformfontdatabase.h
+++ b/src/platform/qhaikuplatformfontdatabase.h
@@ -58,15 +58,15 @@ public:
class QHaikuPlatformFontDatabase: public QFreeTypeFontDatabase
{
public:
- QString fontDir() const override;
- void populateFontDatabase() override;
- QFont defaultFont() const override;
+ QString fontDir() const;
+ void populateFontDatabase();
+ QFont defaultFont() const;
@@ -64,7 +64,7 @@ public:
QStringList fallbacksForFamily(const QString &family,
QFont::Style style,
QFont::StyleHint styleHint,
- QChar::Script script) const override;
- QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override;
- void releaseHandle(void *handle) override;
+ QFontDatabasePrivate::ExtendedScript script) const;
+ QFontEngine *fontEngine(const QFontDef &fontDef, void *handle);
+ void releaseHandle(void *handle);
+ QFontDatabasePrivate::ExtendedScript script) const override;
QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override;
void releaseHandle(void *handle) override;
private:
QHash<QChar::Script, QStringList> m_fallbacks;
};
diff --git a/src/style/helper/qstylehelper.cpp b/src/style/helper/qstylehelper.cpp
index ea65227..0df07ef 100644
--- a/src/style/helper/qstylehelper.cpp
@@ -66,5 +53,5 @@ index ea65227..0df07ef 100644
QPointF dp = calcRadialPos(option, qreal(0.70));
buttonColor = buttonColor.lighter(104);
--
2.48.1
2.52.0

View File

@@ -1,4 +1,4 @@
From 66b9a0b4d6b61c4059baf32debbec09bea29fee6 Mon Sep 17 00:00:00 2001
From 88175dce0d2b55a3dd15612bd4a2f483fdd47183 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 10:16:14 +1000
Subject: Make sure libs are searched in the develop/ dir by CMake
@@ -19,20 +19,20 @@ index 24ed125..52f637e 100644
CMAKE_DLL_DIR = $$CMAKE_LIB_DIR
CMAKE_DLL_DIR_IS_ABSOLUTE = $$CMAKE_LIB_DIR_IS_ABSOLUTE
--
2.48.1
2.52.0
From f4ed9213f570c269bb5a08e1af420465829f9adc Mon Sep 17 00:00:00 2001
From 9e5e7b403370d0eb4a62435f4159834f6ddfffaa Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 10:16:34 +1000
Subject: Fix QStandartPaths for Haiku
diff --git a/src/corelib/io/qstandardpaths_haiku.cpp b/src/corelib/io/qstandardpaths_haiku.cpp
index 93eba13..2862472 100644
index f473ebe..2560722 100644
--- a/src/corelib/io/qstandardpaths_haiku.cpp
+++ b/src/corelib/io/qstandardpaths_haiku.cpp
@@ -111,15 +111,16 @@ QString QStandardPaths::writableLocation(StandardLocation type)
@@ -112,15 +112,16 @@ QString QStandardPaths::writableLocation(StandardLocation type)
return haikuStandardPath(B_USER_NONPACKAGED_BIN_DIRECTORY);
case TempLocation:
return haikuStandardPath(B_SYSTEM_TEMP_DIRECTORY);
@@ -53,7 +53,7 @@ index 93eba13..2862472 100644
case ConfigLocation:
case AppConfigLocation:
case StateLocation:
@@ -128,7 +129,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
@@ -129,7 +130,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
case GenericConfigLocation:
return haikuStandardPath(B_USER_SETTINGS_DIRECTORY);
default:
@@ -62,7 +62,7 @@ index 93eba13..2862472 100644
}
}
@@ -149,7 +150,7 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
@@ -150,7 +151,7 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
case PublicShareLocation:
case TemplatesLocation:
case HomeLocation:
@@ -71,7 +71,7 @@ index 93eba13..2862472 100644
break;
case FontsLocation:
paths += haikuStandardPaths(B_FIND_PATH_FONTS_DIRECTORY);
@@ -173,7 +174,7 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
@@ -174,7 +175,7 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
break;
case ConfigLocation: // fall through
case AppConfigLocation:
@@ -81,20 +81,20 @@ index 93eba13..2862472 100644
case GenericConfigLocation:
paths += haikuStandardPath(B_SYSTEM_SETTINGS_DIRECTORY);
--
2.48.1
2.52.0
From 7356bedf2ee4c9dc7e4794c35e00a26f60f43912 Mon Sep 17 00:00:00 2001
From 5d3665a9f6bad82cf4a4df2648f973e049b76c9c Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 10:16:55 +1000
Subject: QSslSocketPrivate::unixRootCertDirectories(): add ssl path for Haiku.
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index 395394d..91483c2 100644
index 46859a2..7be4dd0 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -2968,6 +2968,7 @@ QList<QByteArray> QSslSocketPrivate::unixRootCertDirectories()
@@ -2972,6 +2972,7 @@ QList<QByteArray> QSslSocketPrivate::unixRootCertDirectories()
ba("/usr/local/ssl/certs/"), // Solaris
ba("/etc/openssl/certs/"), // BlackBerry
ba("/opt/openssl/certs/"), // HP-UX
@@ -103,10 +103,10 @@ index 395394d..91483c2 100644
};
QList<QByteArray> result = QList<QByteArray>::fromReadOnlyData(dirs);
--
2.48.1
2.52.0
From 54d6f6828a9e058d174d166c4e2744f3d973b3b3 Mon Sep 17 00:00:00 2001
From daf05ae386ca890cfc46343aa00a63e2a9754324 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 10:45:27 +1000
Subject: Fix build for Haiku platform
@@ -126,10 +126,10 @@ index 13bf7f1..aaa22ee 100644
# or gold under Linux) will not print any library search path. Need to use another
# invocation with different options (which in turn doesn't print include search
--
2.48.1
2.52.0
From c364cc1ebbd882eefa83a4093c2b8a4f172ef23a Mon Sep 17 00:00:00 2001
From a698082881961b56dc98fce39df6dff054644440 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 10:45:56 +1000
Subject: Fix endian detection
@@ -153,20 +153,20 @@ index 0baac93..1d48cbc 100644
# endif
# endif
--
2.48.1
2.52.0
From 8903e42c098d0c75ffb0a5cc658bafd3bc89a683 Mon Sep 17 00:00:00 2001
From 716f1acc4c9d5841ffd57e0c310448035d1b8a0b Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:11:52 +1000
Subject: Disable LibResolv for Haiku
diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp
index 3b0e2d3..b824440 100644
index 1883f41..1e10854 100644
--- a/src/network/kernel/qhostinfo_unix.cpp
+++ b/src/network/kernel/qhostinfo_unix.cpp
@@ -50,6 +50,8 @@ static void maybeRefreshResolver()
@@ -51,6 +51,8 @@ static void maybeRefreshResolver()
// res_init() is not thread-safe; executing it leads to state corruption.
// Whether it reloads resolv.conf on its own is unknown.
return;
@@ -176,20 +176,20 @@ index 3b0e2d3..b824440 100644
#if QT_CONFIG(libresolv)
--
2.48.1
2.52.0
From f30a4dd62fe9d052363484ad0a4361fb9f3a4286 Mon Sep 17 00:00:00 2001
From f2ceafe45c54353e73029d0273276245e07a508b Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:15:38 +1000
Subject: Don't use ifaddrs for Haiku
diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp
index 39ff8db..3a9a992 100644
index 5313e17..03bb881 100644
--- a/src/network/kernel/qnetworkinterface_unix.cpp
+++ b/src/network/kernel/qnetworkinterface_unix.cpp
@@ -21,7 +21,7 @@
@@ -22,7 +22,7 @@
# include <ifaddrs.h>
#endif
@@ -199,20 +199,20 @@ index 39ff8db..3a9a992 100644
# ifndef SIOCGIFBRDADDR
# define SIOCGIFBRDADDR 0x8919
--
2.48.1
2.52.0
From c46fe83b709542a86098f9d46eca52646c76b42a Mon Sep 17 00:00:00 2001
From dae3b6f4a2766ef63bf0bb6af314855dddacdef7 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:15:58 +1000
Subject: Disable sharedmemory feature for bootstrap
diff --git a/src/tools/bootstrap/CMakeLists.txt b/src/tools/bootstrap/CMakeLists.txt
index 6a68425..2a6b2c5 100644
index 4ed8169..bbfc3d6 100644
--- a/src/tools/bootstrap/CMakeLists.txt
+++ b/src/tools/bootstrap/CMakeLists.txt
@@ -86,6 +86,7 @@ qt_internal_extend_target(Bootstrap
@@ -79,6 +79,7 @@ qt_internal_extend_target(Bootstrap
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_TO_ASCII
QT_NO_FOREACH
@@ -221,20 +221,20 @@ index 6a68425..2a6b2c5 100644
..
../../3rdparty/tinycbor/src
--
2.48.1
2.52.0
From 5ca98cc13d6f160cef292d7dacfd7e9ee1dc626a Mon Sep 17 00:00:00 2001
From 855e44989cade9cea1ca0d8d79470a0ae683a61a Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:16:20 +1000
Subject: Fix build for x86_gcc2
diff --git a/src/3rdparty/forkfd/forkfd.c b/src/3rdparty/forkfd/forkfd.c
index edef3c5..c9df584 100644
index 465258e..4cb6b0c 100644
--- a/src/3rdparty/forkfd/forkfd.c
+++ b/src/3rdparty/forkfd/forkfd.c
@@ -675,7 +675,7 @@ static int forkfd_fork_fallback(int flags, pid_t *ppid)
@@ -680,7 +680,7 @@ static int forkfd_fork_fallback(int flags, pid_t *ppid)
/* parent process */
info->deathPipe = death_pipe[1];
fd = death_pipe[0];
@@ -244,20 +244,20 @@ index edef3c5..c9df584 100644
/* release the child */
#ifdef HAVE_EVENTFD
--
2.48.1
2.52.0
From 395488f1655a98934a4d892bafa1c829ca32d159 Mon Sep 17 00:00:00 2001
From 688cd526d534a89ec27fa2520c86bd0e6c40a72a Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:17:49 +1000
Subject: Implement QFilesystemWatcher for Haiku
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt
index 8e72caa..5411bb5 100644
index d3b6af0..0e101c4 100644
--- a/src/corelib/CMakeLists.txt
+++ b/src/corelib/CMakeLists.txt
@@ -1019,6 +1019,11 @@ qt_internal_extend_target(Core CONDITION MACOS AND QT_FEATURE_filesystemwatcher
@@ -1044,6 +1044,11 @@ qt_internal_extend_target(Core CONDITION MACOS AND QT_FEATURE_filesystemwatcher
io/qfilesystemwatcher_fsevents.mm io/qfilesystemwatcher_fsevents_p.h
)
@@ -270,10 +270,10 @@ index 8e72caa..5411bb5 100644
SOURCES
io/qfilesystemwatcher_inotify.cpp io/qfilesystemwatcher_inotify_p.h
diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp
index 064be4c..d4c03c3 100644
index cd72f21..ba27bae 100644
--- a/src/corelib/io/qfilesystemwatcher.cpp
+++ b/src/corelib/io/qfilesystemwatcher.cpp
@@ -17,6 +17,8 @@
@@ -18,6 +18,8 @@
#include "qfilesystemwatcher_polling_p.h"
#if defined(Q_OS_WIN)
# include "qfilesystemwatcher_win_p.h"
@@ -282,7 +282,7 @@ index 064be4c..d4c03c3 100644
#elif defined(USE_INOTIFY)
# include "qfilesystemwatcher_inotify_p.h"
#elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) || defined(Q_OS_OPENBSD) || defined(QT_PLATFORM_UIKIT)
@@ -38,6 +40,8 @@ QFileSystemWatcherEngine *QFileSystemWatcherPrivate::createNativeEngine(QObject
@@ -39,6 +41,8 @@ QFileSystemWatcherEngine *QFileSystemWatcherPrivate::createNativeEngine(QObject
{
#if defined(Q_OS_WIN)
return new QWindowsFileSystemWatcherEngine(parent);
@@ -642,20 +642,20 @@ index 0000000..0ae4bdf
+#endif // QFILESYSTEMWATCHER_HAIKU_P_H
+
--
2.48.1
2.52.0
From 62d3a237004e87bebc6e8a3a8ec03d6712e016ce Mon Sep 17 00:00:00 2001
From 12111f1bfdfe725d7b11838f702a1e1ea462faf6 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:18:17 +1000
Subject: Don't use AF_INET6 for new sockets
diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp
index b6df412..e7e2f17 100644
index 6d49943..8b12671 100644
--- a/src/network/socket/qnativesocketengine_unix.cpp
+++ b/src/network/socket/qnativesocketengine_unix.cpp
@@ -194,8 +194,12 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc
@@ -199,8 +199,12 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc
}
int protocol = 0;
#endif // QT_NO_SCTP
@@ -669,20 +669,20 @@ index b6df412..e7e2f17 100644
int socket = qt_safe_socket(domain, type, protocol, O_NONBLOCK);
--
2.48.1
2.52.0
From 104fc849a93301a74907b4de51dad9ca3e093496 Mon Sep 17 00:00:00 2001
From 1846d25a3247697f59962ed3898a4f9ab2abf743 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:18:41 +1000
Subject: Disable Haswell CPU feature for plugins
diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp
index d05a5fa..d582d13 100644
index f03eba3..0a21b64 100644
--- a/src/corelib/plugin/qlibrary_unix.cpp
+++ b/src/corelib/plugin/qlibrary_unix.cpp
@@ -152,7 +152,7 @@ bool QLibraryPrivate::load_sys()
@@ -163,7 +163,7 @@ bool QLibraryPrivate::load_sys()
prefixes.append(QString());
}
@@ -692,20 +692,20 @@ index d05a5fa..d582d13 100644
auto transform = [](QStringList &list, void (*f)(QString *)) {
QStringList tmp;
--
2.48.1
2.52.0
From 280d9a068232cb7bd8ecb0f728dd13e5604aef43 Mon Sep 17 00:00:00 2001
From 7ad1d1030480b80a3a88b28e22a37f366caa8e48 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:19:25 +1000
Subject: Haiku build setup
diff --git a/cmake/QtBuildHelpers.cmake b/cmake/QtBuildHelpers.cmake
index 3f9f4c9..4fe36fa 100644
index da3c954..59bf687 100644
--- a/cmake/QtBuildHelpers.cmake
+++ b/cmake/QtBuildHelpers.cmake
@@ -42,7 +42,7 @@ endmacro()
@@ -43,7 +43,7 @@ endmacro()
macro(qt_internal_setup_position_independent_code)
## Position independent code:
@@ -715,7 +715,7 @@ index 3f9f4c9..4fe36fa 100644
# Does the linker support position independent code?
include(CheckPIESupported)
diff --git a/cmake/QtMkspecHelpers.cmake b/cmake/QtMkspecHelpers.cmake
index a961296..7444a72 100644
index a7f239f..55d2212 100644
--- a/cmake/QtMkspecHelpers.cmake
+++ b/cmake/QtMkspecHelpers.cmake
@@ -50,6 +50,12 @@ macro(qt_internal_setup_platform_definitions_and_mkspec)
@@ -745,20 +745,20 @@ index da6c871..bd085e2 100644
set(rpath_rel_base "NO_KNOWN_RPATH_REL_BASE")
endif()
--
2.48.1
2.52.0
From 70379a7eb7dc6c6055d8c0ddabd00efc650cdc51 Mon Sep 17 00:00:00 2001
From 3f7d48fb3de511d4622cfcb93d1105ebd6cbe3db Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:21:18 +1000
Subject: Haiku: link against libnetwork
diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt
index 80892ed..f77f703 100644
index 1112f10..1bc87a5 100644
--- a/src/network/CMakeLists.txt
+++ b/src/network/CMakeLists.txt
@@ -223,6 +223,11 @@ qt_internal_extend_target(Network CONDITION WIN32
@@ -225,6 +225,11 @@ qt_internal_extend_target(Network CONDITION WIN32
NOMINMAX
)
@@ -771,10 +771,10 @@ index 80892ed..f77f703 100644
LIBRARIES
${FWCoreServices}
--
2.48.1
2.52.0
From f364c1690698a4a37d616ef25f24457ed5a385c9 Mon Sep 17 00:00:00 2001
From 06aaf29220a31133e7c3e09617baefead04b03b7 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:28:46 +1000
Subject: Fix elf parser for Haiku
@@ -858,20 +858,20 @@ index 78c9be0..6cc9db8 100644
return d;
}
--
2.48.1
2.52.0
From 7fbc2292de7efb65ec5168c81671fb720088ec11 Mon Sep 17 00:00:00 2001
From efa55591c8647c6c15110ce6168e0bd53cd1cf95 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:29:03 +1000
Subject: Don't use nl_langinfo
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 24d3134..d58bde5 100644
index 310b011..9dff974 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -575,7 +575,7 @@ void QCoreApplicationPrivate::initLocale()
@@ -572,7 +572,7 @@ void QCoreApplicationPrivate::initLocale()
// QLocal8Bit hard-codes this, and we need to be consistent.
# if defined(Q_OS_INTEGRITY)
setlocale(LC_CTYPE, "UTF-8");
@@ -881,20 +881,20 @@ index 24d3134..d58bde5 100644
// FIXME: Shouldn't we still setlocale("UTF-8")?
# elif defined(Q_OS_ANDROID) && __ANDROID_API__ < __ANDROID_API_O__
--
2.48.1
2.52.0
From d5dffda79119bcac68c1078fcdf40da9b7998696 Mon Sep 17 00:00:00 2001
From d2cbc972b0ec0638ac6271deac7e1334f31fdc6c Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 20 Oct 2023 12:30:12 +1000
Subject: Workaround for shm_open
diff --git a/src/corelib/ipc/qsharedmemory_posix.cpp b/src/corelib/ipc/qsharedmemory_posix.cpp
index 582c662..0854906 100644
index fa215c3..7a0978c 100644
--- a/src/corelib/ipc/qsharedmemory_posix.cpp
+++ b/src/corelib/ipc/qsharedmemory_posix.cpp
@@ -68,6 +68,10 @@ bool QSharedMemoryPosix::create(QSharedMemoryPrivate *self, qsizetype size)
@@ -69,6 +69,10 @@ bool QSharedMemoryPosix::create(QSharedMemoryPrivate *self, qsizetype size)
int fd;
QT_EINTR_LOOP(fd, ::shm_open(shmName.constData(), O_RDWR | O_CREAT | O_EXCL | O_CLOEXEC, 0600));
@@ -906,20 +906,20 @@ index 582c662..0854906 100644
const int errorNumber = errno;
const auto function = "QSharedMemory::attach (shm_open)"_L1;
--
2.48.1
2.52.0
From dae8e1455ccb328a536add810efe343fd1833e47 Mon Sep 17 00:00:00 2001
From 18a32823a5ada939947ac346fafe2d5036a0cc74 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sun, 14 Apr 2024 12:20:21 +1000
Subject: Disable DisconnectControllingTerminal
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 6109e9d..879aac1 100644
index a6131f1..453c3d3 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -869,6 +869,7 @@ static const char *applyProcessParameters(const QProcess::UnixProcessParameters
@@ -879,6 +879,7 @@ static const char *applyProcessParameters(const QProcess::UnixProcessParameters
return "setsid";
}
@@ -927,83 +927,162 @@ index 6109e9d..879aac1 100644
// Disconnect from the controlling TTY. This probably won't fail. Must be
// done after the session settings from above.
if (params.flags.testFlag(QProcess::UnixProcessFlag::DisconnectControllingTerminal)) {
@@ -883,6 +884,7 @@ static const char *applyProcessParameters(const QProcess::UnixProcessParameters
}
@@ -895,6 +896,7 @@ static const char *applyProcessParameters(const QProcess::UnixProcessParameters
}
#endif
}
+#endif
// Disable core dumps near the end. This isn't expected to fail.
if (params.flags.testFlag(QProcess::UnixProcessFlag::DisableCoreDumps)) {
--
2.48.1
2.52.0
From 547b99e7842d9f1913ab0d4e786be30d2918841d Mon Sep 17 00:00:00 2001
From a1d49197d96886d334e2ca2e90661620f027653a Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 4 Oct 2024 18:22:17 +1000
Subject: Use ICU backend for QTimeZone
diff --git a/src/corelib/time/qtimezone.cpp b/src/corelib/time/qtimezone.cpp
index 906a42f..d4fdc49 100644
index 7b43aab..0061b1e 100644
--- a/src/corelib/time/qtimezone.cpp
+++ b/src/corelib/time/qtimezone.cpp
@@ -26,6 +26,8 @@ static QTimeZonePrivate *newBackendTimeZone()
return new QChronoTimeZonePrivate();
#elif defined(Q_OS_DARWIN)
@@ -29,6 +29,8 @@ static QTimeZonePrivate *newBackendTimeZone()
return new QMacTimeZonePrivate();
+#elif defined(Q_OS_HAIKU)
+ return new QUtcTimeZonePrivate();
#elif defined(Q_OS_ANDROID)
return new QAndroidTimeZonePrivate();
#elif defined(Q_OS_UNIX)
+#elif defined(Q_OS_HAIKU)
+ return new QUtcTimeZonePrivate();
#elif defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS)
return new QTzTimeZonePrivate();
#elif QT_CONFIG(icu)
--
2.48.1
2.52.0
From 66100dafa96f8bf920eecd4a42cc8d17809f03ed Mon Sep 17 00:00:00 2001
From 6e298692ca3c675e8d82463a956f493223c4812d Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 5 Oct 2024 19:48:13 +1000
Subject: Use ICU backend for ianaId
diff --git a/src/corelib/time/qtimezone.cpp b/src/corelib/time/qtimezone.cpp
index d4fdc49..c059f47 100644
index 0061b1e..542f54c 100644
--- a/src/corelib/time/qtimezone.cpp
+++ b/src/corelib/time/qtimezone.cpp
@@ -49,6 +49,8 @@ static QTimeZonePrivate *newBackendTimeZone(const QByteArray &ianaId)
return new QChronoTimeZonePrivate(ianaId);
#elif defined(Q_OS_DARWIN)
@@ -52,6 +52,8 @@ static QTimeZonePrivate *newBackendTimeZone(const QByteArray &ianaId)
return new QMacTimeZonePrivate(ianaId);
+#elif defined(Q_OS_HAIKU)
+ return new QUtcTimeZonePrivate(ianaId);
#elif defined(Q_OS_ANDROID)
return new QAndroidTimeZonePrivate(ianaId);
#elif defined(Q_OS_UNIX)
+#elif defined(Q_OS_HAIKU)
+ return new QUtcTimeZonePrivate(ianaId);
#elif defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS)
return new QTzTimeZonePrivate(ianaId);
#elif QT_CONFIG(icu)
--
2.48.1
2.52.0
From 221e0f18dd59c97a3b4dcb1d3f51b5763349a477 Mon Sep 17 00:00:00 2001
From 9bc4852fcda4347443fc0b913ebb67b51bb8dc72 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 5 Oct 2024 19:48:35 +1000
Subject: Disable tz backend for Haiku
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt
index 5411bb5..51936d2 100644
index 0e101c4..c88104b 100644
--- a/src/corelib/CMakeLists.txt
+++ b/src/corelib/CMakeLists.txt
@@ -964,7 +964,7 @@ qt_internal_extend_target(Core
@@ -989,7 +989,7 @@ qt_internal_extend_target(Core
qt_internal_extend_target(Core
CONDITION
QT_FEATURE_timezone AND UNIX
QT_FEATURE_timezone AND UNIX AND NOT VXWORKS
- AND NOT ANDROID AND NOT APPLE AND NOT QT_FEATURE_timezone_tzdb
+ AND NOT ANDROID AND NOT APPLE AND NOT HAIKU AND NOT QT_FEATURE_timezone_tzdb
SOURCES
time/qtimezoneprivate_tz.cpp
)
--
2.48.1
2.52.0
From f16637446b1a03474831299397f7ba089a35dd17 Mon Sep 17 00:00:00 2001
From: Luc Schrijvers <begasus@gmail.com>
Date: Sun, 29 Jun 2025 09:30:39 +0200
Subject: Build fix*
diff --git a/src/testlib/qtestcrashhandler_unix.cpp b/src/testlib/qtestcrashhandler_unix.cpp
index d66a542..81ccaaf 100644
--- a/src/testlib/qtestcrashhandler_unix.cpp
+++ b/src/testlib/qtestcrashhandler_unix.cpp
@@ -40,7 +40,9 @@
# elif __has_include(<ucontext.h>)
# include <ucontext.h>
# else
+# if !defined(Q_OS_HAIKU)
using ucontext_t = void;
+#endif
# endif
#if defined(Q_OS_MACOS)
--
2.52.0
From 28f1adfc1c5ecb5a1c2ff124d5a1903b899fc290 Mon Sep 17 00:00:00 2001
From: Luc Schrijvers <begasus@gmail.com>
Date: Thu, 9 Oct 2025 10:52:56 +0200
Subject: Include Qt warning
diff --git a/src/corelib/io/qfilesystemwatcher_haiku_p.h b/src/corelib/io/qfilesystemwatcher_haiku_p.h
index 0ae4bdf..0339487 100644
--- a/src/corelib/io/qfilesystemwatcher_haiku_p.h
+++ b/src/corelib/io/qfilesystemwatcher_haiku_p.h
@@ -20,6 +20,17 @@
#ifndef QFILESYSTEMWATCHER_HAIKU_P_H
#define QFILESYSTEMWATCHER_HAIKU_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <QtCore/qfileinfo.h>
#include <QtCore/qmutex.h>
#include <QtCore/qdatetime.h>
--
2.52.0
From 338171278a762ad5a5abde6ce3a75535ce03fdd6 Mon Sep 17 00:00:00 2001
From: Luc Schrijvers <begasus@gmail.com>
Date: Fri, 13 Feb 2026 16:08:03 +0100
Subject: Fix error for static_assert
diff --git a/src/corelib/global/qtypes.h b/src/corelib/global/qtypes.h
index a7e6505..a40f266 100644
--- a/src/corelib/global/qtypes.h
+++ b/src/corelib/global/qtypes.h
@@ -178,7 +178,7 @@ static_assert(std::is_signed_v<qint128>,
#ifndef __cplusplus
// In C++ mode, we define below using QIntegerForSize template
-static_assert(sizeof(ptrdiff_t) == sizeof(size_t), "Weird ptrdiff_t and size_t definitions");
+_Static_assert(sizeof(ptrdiff_t) == sizeof(size_t), "Weird ptrdiff_t and size_t definitions");
typedef ptrdiff_t qptrdiff;
typedef ptrdiff_t qsizetype;
typedef ptrdiff_t qintptr;
--
2.52.0