diff options
author | Aric Belsito <lluixhi@gmail.com> | 2018-05-14 09:21:24 -0700 |
---|---|---|
committer | Aric Belsito <lluixhi@gmail.com> | 2018-05-14 09:21:24 -0700 |
commit | 36ad4ec6dc30a2cd5dd45bcb931233ca6d7f8c8a (patch) | |
tree | 2f373cd5ed0dd4310d04ca7adfd28fcf54786307 | |
parent | www-client/firefox: make cmsghdr patch conditional (diff) | |
download | musl-36ad4ec6dc30a2cd5dd45bcb931233ca6d7f8c8a.tar.gz musl-36ad4ec6dc30a2cd5dd45bcb931233ca6d7f8c8a.tar.bz2 musl-36ad4ec6dc30a2cd5dd45bcb931233ca6d7f8c8a.zip |
dev-qt/qtcore: remove 5.7.1-r3
-rw-r--r-- | dev-qt/qtcore/Manifest | 1 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-4.8.6-QNAM-corruptions-fix.patch | 431 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-4.8.6-moc-boost-1.60.patch | 16 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-5.5.1-musl-iconv.patch | 12 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-5.6.2-plugins.patch | 81 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch | 152 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-1.patch | 252 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-2.patch | 195 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-5.9.3-avx.patch | 69 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-5.9.3-musl-iconv.patch | 12 | ||||
-rw-r--r-- | dev-qt/qtcore/files/qtcore-clang-libc++abi.patch | 12 | ||||
-rw-r--r-- | dev-qt/qtcore/metadata.xml | 2 | ||||
-rw-r--r-- | dev-qt/qtcore/qtcore-4.8.7-r4.ebuild (renamed from dev-qt/qtcore/qtcore-4.8.7-r3.ebuild) | 4 | ||||
-rw-r--r-- | dev-qt/qtcore/qtcore-5.7.1-r3.ebuild | 49 |
14 files changed, 3 insertions, 1285 deletions
diff --git a/dev-qt/qtcore/Manifest b/dev-qt/qtcore/Manifest index 9eb30238..0dfe1cd5 100644 --- a/dev-qt/qtcore/Manifest +++ b/dev-qt/qtcore/Manifest @@ -1,2 +1 @@ DIST qt-everywhere-opensource-src-4.8.7.tar.gz 241075567 SHA256 e2882295097e47fe089f8ac741a95fef47e0a73a3f3cdf21b56990638f626ea0 SHA512 f9f81a2e7205e1fd05c8d923dc73244f29aa33f951fa6b7c5c8193449328b37084796b9b71ad0c317e4e6fd00017c10ea5d67b1b2032551cde00548522218125 WHIRLPOOL ad8f01172f5bdb3a3a69fe7b03862c4c411bc8d95211053ad66ed1d60a3c0577d073d1075a1e0a80b25d9b2721addda55a2967e6ccf5e194cec8d08770ac5fc2 -DIST qtbase-opensource-src-5.7.1.tar.xz 44992616 BLAKE2B d845ff8316f6f91089e23b74c025ad8e6160eb7ba75017cba34c2ad2f7b475fc4e36d337b945935bc2850bd140d743b9a5e3d23399b6d3151b85109da9f56ba8 SHA512 0506a3a856f76e5ba182e3382a515282b6096f3900fbdc14cd5aec425105ab61922e0ada0361234387335ceb80b3c69e39cd34d75476c2946c4371e7b8c0827f diff --git a/dev-qt/qtcore/files/qtcore-4.8.6-QNAM-corruptions-fix.patch b/dev-qt/qtcore/files/qtcore-4.8.6-QNAM-corruptions-fix.patch deleted file mode 100644 index 1d83caa3..00000000 --- a/dev-qt/qtcore/files/qtcore-4.8.6-QNAM-corruptions-fix.patch +++ /dev/null @@ -1,431 +0,0 @@ -From fa81aa6d027049e855b76f5408586a288f160575 Mon Sep 17 00:00:00 2001 -From: Markus Goetz <markus@woboq.com> -Date: Tue, 28 Apr 2015 11:57:36 +0200 -Subject: QNAM: Fix upload corruptions when server closes connection - -This patch fixes several upload corruptions if the server closes the connection -while/before we send data into it. They happen inside multiple places in the HTTP -layer and are explained in the comments. -Corruptions are: -* The upload byte device has an in-flight signal with pending upload data, if -it gets reset (because server closes the connection) then the re-send of the -request was sometimes taking this stale in-flight pending upload data. -* Because some signals were DirectConnection and some were QueuedConnection, there -was a chance that a direct signal overtakes a queued signal. The state machine -then sent data down the socket which was buffered there (and sent later) although -it did not match the current state of the state machine when it was actually sent. -* A socket was seen as being able to have requests sent even though it was not -encrypted yet. This relates to the previous corruption where data is stored inside -the socket's buffer and then sent later. - -The included auto test produces all fixed corruptions, I detected no regressions -via the other tests. -This code also adds a bit of sanity checking to protect from possible further -problems. - -[ChangeLog][QtNetwork] Fix HTTP(s) upload corruption when server closes connection - -(cherry picked from commit qtbase/cff39fba10ffc10ee4dcfdc66ff6528eb26462d3) -Change-Id: I9793297be6cf3edfb75b65ba03b65f7a133ef194 -Reviewed-by: Richard J. Moore <rich@kde.org> ---- - src/corelib/io/qnoncontiguousbytedevice.cpp | 19 +++ - src/corelib/io/qnoncontiguousbytedevice_p.h | 4 + - .../access/qhttpnetworkconnectionchannel.cpp | 47 +++++- - src/network/access/qhttpthreaddelegate_p.h | 36 ++++- - src/network/access/qnetworkaccesshttpbackend.cpp | 24 ++- - src/network/access/qnetworkaccesshttpbackend_p.h | 5 +- - tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 174 ++++++++++++++++++++- - 7 files changed, 280 insertions(+), 29 deletions(-) - -diff --git a/src/corelib/io/qnoncontiguousbytedevice.cpp b/src/corelib/io/qnoncontiguousbytedevice.cpp -index bf58eee..1a0591e 100644 ---- a/src/corelib/io/qnoncontiguousbytedevice.cpp -+++ b/src/corelib/io/qnoncontiguousbytedevice.cpp -@@ -245,6 +245,12 @@ qint64 QNonContiguousByteDeviceByteArrayImpl::size() - return byteArray->size(); - } - -+qint64 QNonContiguousByteDeviceByteArrayImpl::pos() -+{ -+ return currentPosition; -+} -+ -+ - QNonContiguousByteDeviceRingBufferImpl::QNonContiguousByteDeviceRingBufferImpl(QSharedPointer<QRingBuffer> rb) - : QNonContiguousByteDevice(), currentPosition(0) - { -@@ -296,6 +302,11 @@ qint64 QNonContiguousByteDeviceRingBufferImpl::size() - return ringBuffer->size(); - } - -+qint64 QNonContiguousByteDeviceRingBufferImpl::pos() -+{ -+ return currentPosition; -+} -+ - QNonContiguousByteDeviceIoDeviceImpl::QNonContiguousByteDeviceIoDeviceImpl(QIODevice *d) - : QNonContiguousByteDevice(), - currentReadBuffer(0), currentReadBufferSize(16*1024), -@@ -415,6 +426,14 @@ qint64 QNonContiguousByteDeviceIoDeviceImpl::size() - return device->size() - initialPosition; - } - -+qint64 QNonContiguousByteDeviceIoDeviceImpl::pos() -+{ -+ if (device->isSequential()) -+ return -1; -+ -+ return device->pos(); -+} -+ - QByteDeviceWrappingIoDevice::QByteDeviceWrappingIoDevice(QNonContiguousByteDevice *bd) : QIODevice((QObject*)0) - { - byteDevice = bd; -diff --git a/src/corelib/io/qnoncontiguousbytedevice_p.h b/src/corelib/io/qnoncontiguousbytedevice_p.h -index b6966eb..d1a99a1 100644 ---- a/src/corelib/io/qnoncontiguousbytedevice_p.h -+++ b/src/corelib/io/qnoncontiguousbytedevice_p.h -@@ -69,6 +69,7 @@ public: - virtual const char* readPointer(qint64 maximumLength, qint64 &len) = 0; - virtual bool advanceReadPointer(qint64 amount) = 0; - virtual bool atEnd() = 0; -+ virtual qint64 pos() { return -1; } - virtual bool reset() = 0; - void disableReset(); - bool isResetDisabled() { return resetDisabled; } -@@ -108,6 +109,7 @@ public: - bool atEnd(); - bool reset(); - qint64 size(); -+ qint64 pos(); - protected: - QByteArray* byteArray; - qint64 currentPosition; -@@ -123,6 +125,7 @@ public: - bool atEnd(); - bool reset(); - qint64 size(); -+ qint64 pos(); - protected: - QSharedPointer<QRingBuffer> ringBuffer; - qint64 currentPosition; -@@ -140,6 +143,7 @@ public: - bool atEnd(); - bool reset(); - qint64 size(); -+ qint64 pos(); - protected: - QIODevice* device; - QByteArray* currentReadBuffer; -diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp -index 550e090..db2f712 100644 ---- a/src/network/access/qhttpnetworkconnectionchannel.cpp -+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp -@@ -107,15 +107,19 @@ void QHttpNetworkConnectionChannel::init() - socket->setProxy(QNetworkProxy::NoProxy); - #endif - -+ // We want all signals (except the interactive ones) be connected as QueuedConnection -+ // because else we're falling into cases where we recurse back into the socket code -+ // and mess up the state. Always going to the event loop (and expecting that when reading/writing) -+ // is safer. - QObject::connect(socket, SIGNAL(bytesWritten(qint64)), - this, SLOT(_q_bytesWritten(qint64)), -- Qt::DirectConnection); -+ Qt::QueuedConnection); - QObject::connect(socket, SIGNAL(connected()), - this, SLOT(_q_connected()), -- Qt::DirectConnection); -+ Qt::QueuedConnection); - QObject::connect(socket, SIGNAL(readyRead()), - this, SLOT(_q_readyRead()), -- Qt::DirectConnection); -+ Qt::QueuedConnection); - - // The disconnected() and error() signals may already come - // while calling connectToHost(). -@@ -144,13 +148,13 @@ void QHttpNetworkConnectionChannel::init() - // won't be a sslSocket if encrypt is false - QObject::connect(sslSocket, SIGNAL(encrypted()), - this, SLOT(_q_encrypted()), -- Qt::DirectConnection); -+ Qt::QueuedConnection); - QObject::connect(sslSocket, SIGNAL(sslErrors(QList<QSslError>)), - this, SLOT(_q_sslErrors(QList<QSslError>)), - Qt::DirectConnection); - QObject::connect(sslSocket, SIGNAL(encryptedBytesWritten(qint64)), - this, SLOT(_q_encryptedBytesWritten(qint64)), -- Qt::DirectConnection); -+ Qt::QueuedConnection); - } - #endif - } -@@ -163,7 +167,8 @@ void QHttpNetworkConnectionChannel::close() - else - state = QHttpNetworkConnectionChannel::ClosingState; - -- socket->close(); -+ if (socket) -+ socket->close(); - } - - -@@ -280,6 +285,14 @@ bool QHttpNetworkConnectionChannel::sendRequest() - // nothing to read currently, break the loop - break; - } else { -+ if (written != uploadByteDevice->pos()) { -+ // Sanity check. This was useful in tracking down an upload corruption. -+ qWarning() << "QHttpProtocolHandler: Internal error in sendRequest. Expected to write at position" << written << "but read device is at" << uploadByteDevice->pos(); -+ Q_ASSERT(written == uploadByteDevice->pos()); -+ connection->d_func()->emitReplyError(socket, reply, QNetworkReply::ProtocolFailure); -+ return false; -+ } -+ - qint64 currentWriteSize = socket->write(readPointer, currentReadSize); - if (currentWriteSize == -1 || currentWriteSize != currentReadSize) { - // socket broke down -@@ -639,6 +652,14 @@ bool QHttpNetworkConnectionChannel::ensureConnection() - } - return false; - } -+ -+ // This code path for ConnectedState -+ if (pendingEncrypt) { -+ // Let's only be really connected when we have received the encrypted() signal. Else the state machine seems to mess up -+ // and corrupt the things sent to the server. -+ return false; -+ } -+ - return true; - } - -@@ -980,6 +1001,13 @@ void QHttpNetworkConnectionChannel::_q_readyRead() - void QHttpNetworkConnectionChannel::_q_bytesWritten(qint64 bytes) - { - Q_UNUSED(bytes); -+ -+ if (ssl) { -+ // In the SSL case we want to send data from encryptedBytesWritten signal since that one -+ // is the one going down to the actual network, not only into some SSL buffer. -+ return; -+ } -+ - // bytes have been written to the socket. write even more of them :) - if (isSocketWriting()) - sendRequest(); -@@ -1029,7 +1057,7 @@ void QHttpNetworkConnectionChannel::_q_connected() - - // ### FIXME: if the server closes the connection unexpectedly, we shouldn't send the same broken request again! - //channels[i].reconnectAttempts = 2; -- if (!pendingEncrypt) { -+ if (!pendingEncrypt && !ssl) { // FIXME: Didn't work properly with pendingEncrypt only, we should refactor this into an EncrypingState - state = QHttpNetworkConnectionChannel::IdleState; - if (!reply) - connection->d_func()->dequeueRequest(socket); -@@ -1157,7 +1185,10 @@ void QHttpNetworkConnectionChannel::_q_proxyAuthenticationRequired(const QNetwor - - void QHttpNetworkConnectionChannel::_q_uploadDataReadyRead() - { -- sendRequest(); -+ if (reply && state == QHttpNetworkConnectionChannel::WritingState) { -+ // There might be timing issues, make sure to only send upload data if really in that state -+ sendRequest(); -+ } - } - - #ifndef QT_NO_OPENSSL -diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h -index 7648325..9dd0deb 100644 ---- a/src/network/access/qhttpthreaddelegate_p.h -+++ b/src/network/access/qhttpthreaddelegate_p.h -@@ -190,6 +190,7 @@ protected: - QByteArray m_dataArray; - bool m_atEnd; - qint64 m_size; -+ qint64 m_pos; // to match calls of haveDataSlot with the expected position - public: - QNonContiguousByteDeviceThreadForwardImpl(bool aE, qint64 s) - : QNonContiguousByteDevice(), -@@ -197,7 +198,8 @@ public: - m_amount(0), - m_data(0), - m_atEnd(aE), -- m_size(s) -+ m_size(s), -+ m_pos(0) - { - } - -@@ -205,6 +207,11 @@ public: - { - } - -+ qint64 pos() -+ { -+ return m_pos; -+ } -+ - const char* readPointer(qint64 maximumLength, qint64 &len) - { - if (m_amount > 0) { -@@ -232,11 +239,10 @@ public: - - m_amount -= a; - m_data += a; -+ m_pos += a; - -- // To main thread to inform about our state -- emit processedData(a); -- -- // FIXME possible optimization, already ask user thread for some data -+ // To main thread to inform about our state. The m_pos will be sent as a sanity check. -+ emit processedData(m_pos, a); - - return true; - } -@@ -253,10 +259,21 @@ public: - { - m_amount = 0; - m_data = 0; -+ m_dataArray.clear(); -+ -+ if (wantDataPending) { -+ // had requested the user thread to send some data (only 1 in-flight at any moment) -+ wantDataPending = false; -+ } - - // Communicate as BlockingQueuedConnection - bool b = false; - emit resetData(&b); -+ if (b) { -+ // the reset succeeded, we're at pos 0 again -+ m_pos = 0; -+ // the HTTP code will anyway abort the request if !b. -+ } - return b; - } - -@@ -267,8 +284,13 @@ public: - - public slots: - // From user thread: -- void haveDataSlot(QByteArray dataArray, bool dataAtEnd, qint64 dataSize) -+ void haveDataSlot(qint64 pos, QByteArray dataArray, bool dataAtEnd, qint64 dataSize) - { -+ if (pos != m_pos) { -+ // Sometimes when re-sending a request in the qhttpnetwork* layer there is a pending haveData from the -+ // user thread on the way to us. We need to ignore it since it is the data for the wrong(later) chunk. -+ return; -+ } - wantDataPending = false; - - m_dataArray = dataArray; -@@ -288,7 +310,7 @@ signals: - - // to main thread: - void wantData(qint64); -- void processedData(qint64); -+ void processedData(qint64 pos, qint64 amount); - void resetData(bool *b); - }; - -diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp -index cc67258..fe2f627 100644 ---- a/src/network/access/qnetworkaccesshttpbackend.cpp -+++ b/src/network/access/qnetworkaccesshttpbackend.cpp -@@ -193,6 +193,7 @@ QNetworkAccessHttpBackendFactory::create(QNetworkAccessManager::Operation op, - QNetworkAccessHttpBackend::QNetworkAccessHttpBackend() - : QNetworkAccessBackend() - , statusCode(0) -+ , uploadByteDevicePosition(false) - , pendingDownloadDataEmissions(new QAtomicInt()) - , pendingDownloadProgressEmissions(new QAtomicInt()) - , loadingFromCache(false) -@@ -610,9 +611,9 @@ void QNetworkAccessHttpBackend::postRequest() - forwardUploadDevice->setParent(delegate); // needed to make sure it is moved on moveToThread() - delegate->httpRequest.setUploadByteDevice(forwardUploadDevice); - -- // From main thread to user thread: -- QObject::connect(this, SIGNAL(haveUploadData(QByteArray, bool, qint64)), -- forwardUploadDevice, SLOT(haveDataSlot(QByteArray, bool, qint64)), Qt::QueuedConnection); -+ // From user thread to http thread: -+ QObject::connect(this, SIGNAL(haveUploadData(qint64,QByteArray,bool,qint64)), -+ forwardUploadDevice, SLOT(haveDataSlot(qint64,QByteArray,bool,qint64)), Qt::QueuedConnection); - QObject::connect(uploadByteDevice.data(), SIGNAL(readyRead()), - forwardUploadDevice, SIGNAL(readyRead()), - Qt::QueuedConnection); -@@ -620,8 +621,8 @@ void QNetworkAccessHttpBackend::postRequest() - // From http thread to user thread: - QObject::connect(forwardUploadDevice, SIGNAL(wantData(qint64)), - this, SLOT(wantUploadDataSlot(qint64))); -- QObject::connect(forwardUploadDevice, SIGNAL(processedData(qint64)), -- this, SLOT(sentUploadDataSlot(qint64))); -+ QObject::connect(forwardUploadDevice,SIGNAL(processedData(qint64, qint64)), -+ this, SLOT(sentUploadDataSlot(qint64,qint64))); - connect(forwardUploadDevice, SIGNAL(resetData(bool*)), - this, SLOT(resetUploadDataSlot(bool*)), - Qt::BlockingQueuedConnection); // this is the only one with BlockingQueued! -@@ -915,12 +916,21 @@ void QNetworkAccessHttpBackend::replySslConfigurationChanged(const QSslConfigura - void QNetworkAccessHttpBackend::resetUploadDataSlot(bool *r) - { - *r = uploadByteDevice->reset(); -+ if (*r) { -+ // reset our own position which is used for the inter-thread communication -+ uploadByteDevicePosition = 0; -+ } - } - - // Coming from QNonContiguousByteDeviceThreadForwardImpl in HTTP thread --void QNetworkAccessHttpBackend::sentUploadDataSlot(qint64 amount) -+void QNetworkAccessHttpBackend::sentUploadDataSlot(qint64 pos, qint64 amount) - { -+ if (uploadByteDevicePosition + amount != pos) { -+ // Sanity check, should not happen. -+ error(QNetworkReply::UnknownNetworkError, ""); -+ } - uploadByteDevice->advanceReadPointer(amount); -+ uploadByteDevicePosition += amount; - } - - // Coming from QNonContiguousByteDeviceThreadForwardImpl in HTTP thread -@@ -933,7 +943,7 @@ void QNetworkAccessHttpBackend::wantUploadDataSlot(qint64 maxSize) - QByteArray dataArray(data, currentUploadDataLength); - - // Communicate back to HTTP thread -- emit haveUploadData(dataArray, uploadByteDevice->atEnd(), uploadByteDevice->size()); -+ emit haveUploadData(uploadByteDevicePosition, dataArray, uploadByteDevice->atEnd(), uploadByteDevice->size()); - } - - /* -diff --git a/src/network/access/qnetworkaccesshttpbackend_p.h b/src/network/access/qnetworkaccesshttpbackend_p.h -index 13519c6..b4ed67c 100644 ---- a/src/network/access/qnetworkaccesshttpbackend_p.h -+++ b/src/network/access/qnetworkaccesshttpbackend_p.h -@@ -112,7 +112,7 @@ signals: - - void startHttpRequestSynchronously(); - -- void haveUploadData(QByteArray dataArray, bool dataAtEnd, qint64 dataSize); -+ void haveUploadData(const qint64 pos, QByteArray dataArray, bool dataAtEnd, qint64 dataSize); - private slots: - // From HTTP thread: - void replyDownloadData(QByteArray); -@@ -129,13 +129,14 @@ private slots: - // From QNonContiguousByteDeviceThreadForwardImpl in HTTP thread: - void resetUploadDataSlot(bool *r); - void wantUploadDataSlot(qint64); -- void sentUploadDataSlot(qint64); -+ void sentUploadDataSlot(qint64, qint64); - - bool sendCacheContents(const QNetworkCacheMetaData &metaData); - - private: - QHttpNetworkRequest httpRequest; // There is also a copy in the HTTP thread - int statusCode; -+ qint64 uploadByteDevicePosition; - QString reasonPhrase; - // Will be increased by HTTP thread: - QSharedPointer<QAtomicInt> pendingDownloadDataEmissions; - diff --git a/dev-qt/qtcore/files/qtcore-4.8.6-moc-boost-1.60.patch b/dev-qt/qtcore/files/qtcore-4.8.6-moc-boost-1.60.patch deleted file mode 100644 index 91a5526a..00000000 --- a/dev-qt/qtcore/files/qtcore-4.8.6-moc-boost-1.60.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp.QTBUG-22829 qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp ---- qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp.QTBUG-22829 2015-05-07 09:14:44.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp 2016-03-16 13:20:43.145899869 -0500 -@@ -188,8 +188,11 @@ int runMoc(int _argc, char **_argv) - pp.macros["Q_MOC_RUN"]; - pp.macros["__cplusplus"]; - -- // Workaround a bug while parsing the boost/type_traits/has_operator.hpp header. See QTBUG-22829 -+ // Workaround a bug while parsing some boost headers. See QTBUG-22829 - pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"]; -+ pp.macros["BOOST_LEXICAL_CAST_INCLUDED"]; -+ pp.macros["BOOST_NEXT_PRIOR_HPP_INCLUDED"]; -+ pp.macros["BOOST_TYPE_TRAITS_HPP"]; - - QByteArray filename; - QByteArray output; diff --git a/dev-qt/qtcore/files/qtcore-5.5.1-musl-iconv.patch b/dev-qt/qtcore/files/qtcore-5.5.1-musl-iconv.patch deleted file mode 100644 index fe11d1d6..00000000 --- a/dev-qt/qtcore/files/qtcore-5.5.1-musl-iconv.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naurw qtbase-opensource-src-5.5.1.orig/src/corelib/codecs/qiconvcodec.cpp qtbase-opensource-src-5.5.1/src/corelib/codecs/qiconvcodec.cpp ---- qtbase-opensource-src-5.5.1.orig/src/corelib/codecs/qiconvcodec.cpp 2016-01-25 14:23:16.960351969 -0800 -+++ qtbase-opensource-src-5.5.1/src/corelib/codecs/qiconvcodec.cpp 2016-01-25 14:24:52.743350254 -0800 -@@ -56,7 +56,7 @@ - #elif defined(Q_OS_AIX) - # define NO_BOM - # define UTF16 "UCS-2" --#elif defined(Q_OS_FREEBSD) || defined(Q_OS_MAC) -+#elif defined(Q_OS_FREEBSD) || defined(Q_OS_MAC) || (defined(Q_OS_LINUX) && !defined(__GLIBC__)) - # define NO_BOM - # if Q_BYTE_ORDER == Q_BIG_ENDIAN - # define UTF16 "UTF-16BE" diff --git a/dev-qt/qtcore/files/qtcore-5.6.2-plugins.patch b/dev-qt/qtcore/files/qtcore-5.6.2-plugins.patch deleted file mode 100644 index d969869c..00000000 --- a/dev-qt/qtcore/files/qtcore-5.6.2-plugins.patch +++ /dev/null @@ -1,81 +0,0 @@ -From ca4d93d85ee446c5e30ec8e7814651e45cbf1218 Mon Sep 17 00:00:00 2001 -From: Thiago Macieira <thiago.macieira@intel.com> -Date: Thu, 12 Nov 2015 10:14:51 -0800 -Subject: Stop unloading plugins in QPluginLoader and QFactoryLoader - -QPluginLoader hasn't unloaded in its destructor since Qt 5.0, but we -missed the equivalent code in QFactoryLoader (which bypasses -QPluginLoader). Besides, QPluginLoader::unload() was still doing -unloading, which it won't anymore. - -Not unloading plugins is Qt's policy, as decided during the 5.0 -development process and reaffirmed now in 5.6. This is due to static -data in plugins leaking out and remaining in use past the unloading of -the plugin, causing crashes. - -This does not affect QLibrary and QLibrary::unload(). Those are meant -for non-Qt loadable modules, so unloading them may be safe. - -Task-number: QTBUG-49061 -Discussed-on: http://lists.qt-project.org/pipermail/development/2015-November/023681.html -Change-Id: I461e9fc7199748faa187ffff1416070f138df8db -(cherry picked from commit 494376f980e96339b6f1eff7c41336ca4d853065) -Discussed-again-on: http://lists.qt-project.org/pipermail/development/2016-October/027476.html -Reviewed-by: Lars Knoll <lars.knoll@qt.io> ---- - src/corelib/plugin/qfactoryloader.cpp | 6 ++++-- - src/corelib/plugin/qpluginloader.cpp | 5 +++-- - 2 files changed, 7 insertions(+), 4 deletions(-) - -diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp -index dcf1b1a..b6558f5 100644 ---- a/src/corelib/plugin/qfactoryloader.cpp -+++ b/src/corelib/plugin/qfactoryloader.cpp -@@ -208,10 +208,12 @@ void QFactoryLoader::update() - ++keyUsageCount; - } - } -- if (keyUsageCount || keys.isEmpty()) -+ if (keyUsageCount || keys.isEmpty()) { -+ library->setLoadHints(QLibrary::PreventUnloadHint); // once loaded, don't unload - d->libraryList += library; -- else -+ } else { - library->release(); -+ } - } - } - #else -diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp -index 37f2368..0ea8280 100644 ---- a/src/corelib/plugin/qpluginloader.cpp -+++ b/src/corelib/plugin/qpluginloader.cpp -@@ -148,6 +148,7 @@ QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent) - : QObject(parent), d(0), did_load(false) - { - setFileName(fileName); -+ setLoadHints(QLibrary::PreventUnloadHint); - } - - /*! -@@ -342,7 +343,7 @@ static QString locatePlugin(const QString& fileName) - void QPluginLoader::setFileName(const QString &fileName) - { - #if defined(QT_SHARED) -- QLibrary::LoadHints lh; -+ QLibrary::LoadHints lh = QLibrary::PreventUnloadHint; - if (d) { - lh = d->loadHints(); - d->release(); -@@ -391,7 +392,7 @@ Q_GLOBAL_STATIC(StaticPluginList, staticPluginList) - \brief Give the load() function some hints on how it should behave. - - You can give hints on how the symbols in the plugin are -- resolved. By default, none of the hints are set. -+ resolved. By default since Qt 5.7, QLibrary::PreventUnloadHint is set. - - See the documentation of QLibrary::loadHints for a complete - description of how this property works. --- -cgit v1.0-4-g1e03 - diff --git a/dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch b/dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch deleted file mode 100644 index abea1458..00000000 --- a/dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch +++ /dev/null @@ -1,152 +0,0 @@ -From baad82d242a4d8c1af6c87faaa7f25584183fd53 Mon Sep 17 00:00:00 2001 -From: Stephen Kelly <steveire@gmail.com> -Date: Tue, 20 Dec 2016 00:44:12 +0000 -Subject: [PATCH] QIPM: Persist model indexes after emitting layoutChange, not - before - -Callers can persist a QModelIndex which was not persisted before in a -slot connected to the signal, and such a persisted index must be updated -in the course of the layoutChange. - -Store the indexes to persist after emitting the signal. - -Task-number: QTBUG-32981 -Change-Id: Ibee4c0d84817d72603a03fe5b22fdeefeac0695e -Reviewed-by: David Faure <david.faure@kdab.com> ---- - src/corelib/itemmodels/qidentityproxymodel.cpp | 18 ++--- - .../tst_qidentityproxymodel.cpp | 76 ++++++++++++++++++++++ - 2 files changed, 85 insertions(+), 9 deletions(-) - -diff --git a/src/corelib/itemmodels/qidentityproxymodel.cpp b/src/corelib/itemmodels/qidentityproxymodel.cpp -index e537793..7c30679 100644 ---- a/src/corelib/itemmodels/qidentityproxymodel.cpp -+++ b/src/corelib/itemmodels/qidentityproxymodel.cpp -@@ -496,15 +496,6 @@ void QIdentityProxyModelPrivate::_q_sourceLayoutAboutToBeChanged(const QList<QPe - { - Q_Q(QIdentityProxyModel); - -- const auto proxyPersistentIndexes = q->persistentIndexList(); -- for (const QPersistentModelIndex &proxyPersistentIndex : proxyPersistentIndexes) { -- proxyIndexes << proxyPersistentIndex; -- Q_ASSERT(proxyPersistentIndex.isValid()); -- const QPersistentModelIndex srcPersistentIndex = q->mapToSource(proxyPersistentIndex); -- Q_ASSERT(srcPersistentIndex.isValid()); -- layoutChangePersistentIndexes << srcPersistentIndex; -- } -- - QList<QPersistentModelIndex> parents; - parents.reserve(sourceParents.size()); - for (const QPersistentModelIndex &parent : sourceParents) { -@@ -518,6 +509,15 @@ void QIdentityProxyModelPrivate::_q_sourceLayoutAboutToBeChanged(const QList<QPe - } - - q->layoutAboutToBeChanged(parents, hint); -+ -+ const auto proxyPersistentIndexes = q->persistentIndexList(); -+ for (const QPersistentModelIndex &proxyPersistentIndex : proxyPersistentIndexes) { -+ proxyIndexes << proxyPersistentIndex; -+ Q_ASSERT(proxyPersistentIndex.isValid()); -+ const QPersistentModelIndex srcPersistentIndex = q->mapToSource(proxyPersistentIndex); -+ Q_ASSERT(srcPersistentIndex.isValid()); -+ layoutChangePersistentIndexes << srcPersistentIndex; -+ } - } - - void QIdentityProxyModelPrivate::_q_sourceLayoutChanged(const QList<QPersistentModelIndex> &sourceParents, QAbstractItemModel::LayoutChangeHint hint) -diff --git a/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp b/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp -index e946f31..564b854 100644 ---- a/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp -+++ b/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp -@@ -68,6 +68,8 @@ private slots: - - void itemData(); - -+ void persistIndexOnLayoutChange(); -+ - protected: - void verifyIdentity(QAbstractItemModel *model, const QModelIndex &parent = QModelIndex()); - -@@ -377,5 +379,79 @@ void tst_QIdentityProxyModel::itemData() - QCOMPARE(proxy.itemData(topIndex).value(Qt::DisplayRole).toString(), QStringLiteral("Monday_appended")); - } - -+void dump(QAbstractItemModel* model, QString const& indent = " - ", QModelIndex const& parent = {}) -+{ -+ for (auto row = 0; row < model->rowCount(parent); ++row) -+ { -+ auto idx = model->index(row, 0, parent); -+ qDebug() << (indent + idx.data().toString()); -+ dump(model, indent + "- ", idx); -+ } -+} -+ -+void tst_QIdentityProxyModel::persistIndexOnLayoutChange() -+{ -+ DynamicTreeModel model; -+ -+ QList<int> ancestors; -+ for (auto i = 0; i < 3; ++i) -+ { -+ Q_UNUSED(i); -+ ModelInsertCommand insertCommand(&model); -+ insertCommand.setAncestorRowNumbers(ancestors); -+ insertCommand.setStartRow(0); -+ insertCommand.setEndRow(0); -+ insertCommand.doCommand(); -+ ancestors.push_back(0); -+ } -+ ModelInsertCommand insertCommand(&model); -+ insertCommand.setAncestorRowNumbers(ancestors); -+ insertCommand.setStartRow(0); -+ insertCommand.setEndRow(1); -+ insertCommand.doCommand(); -+ -+ // dump(&model); -+ // " - 1" -+ // " - - 2" -+ // " - - - 3" -+ // " - - - - 4" -+ // " - - - - 5" -+ -+ QIdentityProxyModel proxy; -+ proxy.setSourceModel(&model); -+ -+ QPersistentModelIndex persistentIndex; -+ -+ QPersistentModelIndex sourcePersistentIndex = model.match(model.index(0, 0), Qt::DisplayRole, "5", 1, Qt::MatchRecursive).first(); -+ -+ QCOMPARE(sourcePersistentIndex.data().toString(), QStringLiteral("5")); -+ -+ bool gotLayoutAboutToBeChanged = false; -+ bool gotLayoutChanged = false; -+ -+ QObject::connect(&proxy, &QAbstractItemModel::layoutAboutToBeChanged, &proxy, [&proxy, &persistentIndex, &gotLayoutAboutToBeChanged] -+ { -+ gotLayoutAboutToBeChanged = true; -+ persistentIndex = proxy.match(proxy.index(0, 0), Qt::DisplayRole, "5", 1, Qt::MatchRecursive).first(); -+ }); -+ -+ QObject::connect(&proxy, &QAbstractItemModel::layoutChanged, &proxy, [&proxy, &persistentIndex, &sourcePersistentIndex, &gotLayoutChanged] -+ { -+ gotLayoutChanged = true; -+ QCOMPARE(QModelIndex(persistentIndex), proxy.mapFromSource(sourcePersistentIndex)); -+ }); -+ -+ ModelChangeChildrenLayoutsCommand layoutChangeCommand(&model, 0); -+ -+ layoutChangeCommand.setAncestorRowNumbers(QList<int>{0, 0, 0}); -+ layoutChangeCommand.setSecondAncestorRowNumbers(QList<int>{0, 0}); -+ -+ layoutChangeCommand.doCommand(); -+ -+ QVERIFY(gotLayoutAboutToBeChanged); -+ QVERIFY(gotLayoutChanged); -+ QVERIFY(persistentIndex.isValid()); -+} -+ - QTEST_MAIN(tst_QIdentityProxyModel) - #include "tst_qidentityproxymodel.moc" --- -2.7.4 - diff --git a/dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-1.patch b/dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-1.patch deleted file mode 100644 index 9edbe186..00000000 --- a/dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-1.patch +++ /dev/null @@ -1,252 +0,0 @@ -From 3bd0fd8f97e7a33a874929a383a42e6c710bfff3 Mon Sep 17 00:00:00 2001 -From: Stephen Kelly <steveire@gmail.com> -Date: Sat, 17 Dec 2016 06:20:06 +0000 -Subject: [PATCH] QSFPM: Fix handling of source model layout change - -In sourceLayoutAboutToBeChanged the source model update is ignored if -the affected parents are filtered out anyway. The same logic is -attempted in the sourceLayoutChanged slot, but there the early-return -logic is applied too late - the mapping is cleared before performing the -early-return. Because pointers into the mapping are used in the -internalPointer of QModelIndexes in this class, persistent indexes used -later will segfault when attempting to dereference it. - -Additionally, if a parent becomes invalid as a result of the -layoutChange, it would be filtered out by the condition in the loop, -resulting in a different result in the comparison of emptiness of the -parents container. - -Fix that by persisting the parent's container, and performing the test -for early-return before clearing the mapping. - -Task-number: QTBUG-47711 -Task-number: QTBUG-32981 -Change-Id: If45e8a1c97d39454160f52041bc9ae7e337dce97 -Reviewed-by: David Faure <david.faure@kdab.com> ---- - src/corelib/itemmodels/qsortfilterproxymodel.cpp | 31 ++--- - .../tst_qsortfilterproxymodel.cpp | 126 +++++++++++++++++++++ - 2 files changed, 137 insertions(+), 20 deletions(-) - -diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp -index b0ddfa8..3331521 100644 ---- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp -+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp -@@ -171,6 +171,7 @@ public: - QRowsRemoval itemsBeingRemoved; - - QModelIndexPairList saved_persistent_indexes; -+ QList<QPersistentModelIndex> saved_layoutChange_parents; - - QHash<QModelIndex, Mapping *>::const_iterator create_mapping( - const QModelIndex &source_parent) const; -@@ -1331,23 +1332,23 @@ void QSortFilterProxyModelPrivate::_q_sourceLayoutAboutToBeChanged(const QList<Q - Q_UNUSED(hint); // We can't forward Hint because we might filter additional rows or columns - saved_persistent_indexes.clear(); - -- QList<QPersistentModelIndex> parents; -+ saved_layoutChange_parents.clear(); - for (const QPersistentModelIndex &parent : sourceParents) { - if (!parent.isValid()) { -- parents << QPersistentModelIndex(); -+ saved_layoutChange_parents << QPersistentModelIndex(); - continue; - } - const QModelIndex mappedParent = q->mapFromSource(parent); - // Might be filtered out. - if (mappedParent.isValid()) -- parents << mappedParent; -+ saved_layoutChange_parents << mappedParent; - } - - // All parents filtered out. -- if (!sourceParents.isEmpty() && parents.isEmpty()) -+ if (!sourceParents.isEmpty() && saved_layoutChange_parents.isEmpty()) - return; - -- emit q->layoutAboutToBeChanged(parents); -+ emit q->layoutAboutToBeChanged(saved_layoutChange_parents); - if (persistent.indexes.isEmpty()) - return; - -@@ -1359,6 +1360,9 @@ void QSortFilterProxyModelPrivate::_q_sourceLayoutChanged(const QList<QPersisten - Q_Q(QSortFilterProxyModel); - Q_UNUSED(hint); // We can't forward Hint because we might filter additional rows or columns - -+ if (!sourceParents.isEmpty() && saved_layoutChange_parents.isEmpty()) -+ return; -+ - // Optimize: We only actually have to clear the mapping related to the contents of - // sourceParents, not everything. - qDeleteAll(source_index_mapping); -@@ -1373,21 +1377,8 @@ void QSortFilterProxyModelPrivate::_q_sourceLayoutChanged(const QList<QPersisten - source_index_mapping.clear(); - } - -- QList<QPersistentModelIndex> parents; -- for (const QPersistentModelIndex &parent : sourceParents) { -- if (!parent.isValid()) { -- parents << QPersistentModelIndex(); -- continue; -- } -- const QModelIndex mappedParent = q->mapFromSource(parent); -- if (mappedParent.isValid()) -- parents << mappedParent; -- } -- -- if (!sourceParents.isEmpty() && parents.isEmpty()) -- return; -- -- emit q->layoutChanged(parents); -+ emit q->layoutChanged(saved_layoutChange_parents); -+ saved_layoutChange_parents.clear(); - } - - void QSortFilterProxyModelPrivate::_q_sourceRowsAboutToBeInserted( -diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp -index 38e3c68..6b98d9f 100644 ---- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp -+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp -@@ -145,6 +145,8 @@ private slots: - void canDropMimeData(); - void filterHint(); - -+ void sourceLayoutChangeLeavesValidPersistentIndexes(); -+ - protected: - void buildHierarchy(const QStringList &data, QAbstractItemModel *model); - void checkHierarchy(const QStringList &data, const QAbstractItemModel *model); -@@ -4181,5 +4183,129 @@ void tst_QSortFilterProxyModel::filterHint() - QAbstractItemModel::NoLayoutChangeHint); - } - -+/** -+ -+ Creates a model where each item has one child, to a set depth, -+ and the last item has no children. For a model created with -+ setDepth(4): -+ -+ - 1 -+ - - 2 -+ - - - 3 -+ - - - - 4 -+*/ -+class StepTreeModel : public QAbstractItemModel -+{ -+ Q_OBJECT -+public: -+ StepTreeModel(QObject * parent = 0) -+ : QAbstractItemModel(parent), m_depth(0) {} -+ -+ int columnCount(const QModelIndex& = QModelIndex()) const override { return 1; } -+ -+ int rowCount(const QModelIndex& parent = QModelIndex()) const override -+ { -+ quintptr parentId = (parent.isValid()) ? parent.internalId() : 0; -+ return (parentId < m_depth) ? 1 : 0; -+ } -+ -+ QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const override -+ { -+ if (role != Qt::DisplayRole) -+ return QVariant(); -+ -+ return QString::number(index.internalId()); -+ } -+ -+ QModelIndex index(int, int, const QModelIndex& parent = QModelIndex()) const override -+ { -+ quintptr parentId = (parent.isValid()) ? parent.internalId() : 0; -+ if (parentId >= m_depth) -+ return QModelIndex(); -+ -+ return createIndex(0, 0, parentId + 1); -+ } -+ -+ QModelIndex parent(const QModelIndex& index) const override -+ { -+ if (index.internalId() == 0) -+ return QModelIndex(); -+ -+ return createIndex(0, 0, index.internalId() - 1); -+ } -+ -+ void setDepth(quintptr depth) -+ { -+ int parentIdWithLayoutChange = (m_depth < depth) ? m_depth : depth; -+ -+ QList<QPersistentModelIndex> parentsOfLayoutChange; -+ parentsOfLayoutChange.push_back(createIndex(0, 0, parentIdWithLayoutChange)); -+ -+ layoutAboutToBeChanged(parentsOfLayoutChange); -+ -+ auto existing = persistentIndexList(); -+ -+ QList<QModelIndex> updated; -+ -+ for (auto idx : existing) { -+ if (indexDepth(idx) <= depth) -+ updated.push_back(idx); -+ else -+ updated.push_back({}); -+ } -+ -+ m_depth = depth; -+ -+ changePersistentIndexList(existing, updated); -+ -+ layoutChanged(parentsOfLayoutChange); -+ } -+ -+private: -+ static quintptr indexDepth(QModelIndex const& index) -+ { -+ return (index.isValid()) ? 1 + indexDepth(index.parent()) : 0; -+ } -+ -+private: -+ quintptr m_depth; -+}; -+ -+void tst_QSortFilterProxyModel::sourceLayoutChangeLeavesValidPersistentIndexes() -+{ -+ StepTreeModel model; -+ Q_SET_OBJECT_NAME(model); -+ model.setDepth(4); -+ -+ QSortFilterProxyModel proxy1; -+ proxy1.setSourceModel(&model); -+ Q_SET_OBJECT_NAME(proxy1); -+ -+ proxy1.setFilterRegExp("1|2"); -+ -+ // The current state of things: -+ // model proxy -+ // - 1 - 1 -+ // - - 2 - - 2 -+ // - - - 3 -+ // - - - - 4 -+ -+ // The setDepth call below removes '4' with a layoutChanged call. -+ // Because the proxy filters that out anyway, the proxy doesn't need -+ // to emit any signals or update persistent indexes. -+ -+ QPersistentModelIndex persistentIndex = proxy1.index(0, 0, proxy1.index(0, 0)); -+ -+ model.setDepth(3); -+ -+ // Calling parent() causes the internalPointer to be used. -+ // Before fixing QTBUG-47711, that could be a dangling pointer. -+ // The use of qDebug here makes sufficient use of the heap to -+ // cause corruption at runtime with normal use on linux (before -+ // the fix). valgrind confirms the fix. -+ qDebug() << persistentIndex.parent(); -+ QVERIFY(persistentIndex.parent().isValid()); -+} -+ - QTEST_MAIN(tst_QSortFilterProxyModel) - #include "tst_qsortfilterproxymodel.moc" --- -2.7.4 - - diff --git a/dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-2.patch b/dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-2.patch deleted file mode 100644 index 97364963..00000000 --- a/dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-2.patch +++ /dev/null @@ -1,195 +0,0 @@ -From 0874861bcc70313c343aba5e5566ed30b69eed1c Mon Sep 17 00:00:00 2001 -From: Stephen Kelly <steveire@gmail.com> -Date: Mon, 19 Dec 2016 21:13:57 +0000 -Subject: [PATCH] QSFPM: Remove data manipulation from move handlers - -Similar to the fix in the parent commit, incorrect updating of the -internal data structures during layout changes can lead to dangling -pointers being dereferenced later. Moves are treated as layoutChanges -by this proxy by forwarding to the appropriate method. However, data is -incorrectly cleared prior to that forwarding. Remove that, and let the -layoutChange handling take appropriate action. - -Change-Id: Iee951e37152328a4e6a5fb8e5385c32a2fe4c0bd -Reviewed-by: David Faure <david.faure@kdab.com> ---- - src/corelib/itemmodels/qsortfilterproxymodel.cpp | 67 ++++------------------ - .../tst_qsortfilterproxymodel.cpp | 46 +++++++++++++++ - 2 files changed, 58 insertions(+), 55 deletions(-) - -diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp -index 3331521..226a240 100644 ---- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp -+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp -@@ -1418,49 +1418,27 @@ void QSortFilterProxyModelPrivate::_q_sourceRowsRemoved( - void QSortFilterProxyModelPrivate::_q_sourceRowsAboutToBeMoved( - const QModelIndex &sourceParent, int /* sourceStart */, int /* sourceEnd */, const QModelIndex &destParent, int /* dest */) - { -- Q_Q(QSortFilterProxyModel); - // Because rows which are contiguous in the source model might not be contiguous - // in the proxy due to sorting, the best thing we can do here is be specific about what - // parents are having their children changed. - // Optimize: Emit move signals if the proxy is not sorted. Will need to account for rows - // being filtered out though. - -- saved_persistent_indexes.clear(); -- - QList<QPersistentModelIndex> parents; -- parents << q->mapFromSource(sourceParent); -+ parents << sourceParent; - if (sourceParent != destParent) -- parents << q->mapFromSource(destParent); -- emit q->layoutAboutToBeChanged(parents); -- if (persistent.indexes.isEmpty()) -- return; -- saved_persistent_indexes = store_persistent_indexes(); -+ parents << destParent; -+ _q_sourceLayoutAboutToBeChanged(parents, QAbstractItemModel::NoLayoutChangeHint); - } - - void QSortFilterProxyModelPrivate::_q_sourceRowsMoved( - const QModelIndex &sourceParent, int /* sourceStart */, int /* sourceEnd */, const QModelIndex &destParent, int /* dest */) - { -- Q_Q(QSortFilterProxyModel); -- -- // Optimize: We only need to clear and update the persistent indexes which are children of -- // sourceParent or destParent -- qDeleteAll(source_index_mapping); -- source_index_mapping.clear(); -- -- update_persistent_indexes(saved_persistent_indexes); -- saved_persistent_indexes.clear(); -- -- if (dynamic_sortfilter && update_source_sort_column()) { -- //update_source_sort_column might have created wrong mapping so we have to clear it again -- qDeleteAll(source_index_mapping); -- source_index_mapping.clear(); -- } -- - QList<QPersistentModelIndex> parents; -- parents << q->mapFromSource(sourceParent); -+ parents << sourceParent; - if (sourceParent != destParent) -- parents << q->mapFromSource(destParent); -- emit q->layoutChanged(parents); -+ parents << destParent; -+ _q_sourceLayoutChanged(parents, QAbstractItemModel::NoLayoutChangeHint); - } - - void QSortFilterProxyModelPrivate::_q_sourceColumnsAboutToBeInserted( -@@ -1522,42 +1500,21 @@ void QSortFilterProxyModelPrivate::_q_sourceColumnsRemoved( - void QSortFilterProxyModelPrivate::_q_sourceColumnsAboutToBeMoved( - const QModelIndex &sourceParent, int /* sourceStart */, int /* sourceEnd */, const QModelIndex &destParent, int /* dest */) - { -- Q_Q(QSortFilterProxyModel); -- -- saved_persistent_indexes.clear(); -- - QList<QPersistentModelIndex> parents; -- parents << q->mapFromSource(sourceParent); -+ parents << sourceParent; - if (sourceParent != destParent) -- parents << q->mapFromSource(destParent); -- emit q->layoutAboutToBeChanged(parents); -- -- if (persistent.indexes.isEmpty()) -- return; -- saved_persistent_indexes = store_persistent_indexes(); -+ parents << destParent; -+ _q_sourceLayoutAboutToBeChanged(parents, QAbstractItemModel::NoLayoutChangeHint); - } - - void QSortFilterProxyModelPrivate::_q_sourceColumnsMoved( - const QModelIndex &sourceParent, int /* sourceStart */, int /* sourceEnd */, const QModelIndex &destParent, int /* dest */) - { -- Q_Q(QSortFilterProxyModel); -- -- qDeleteAll(source_index_mapping); -- source_index_mapping.clear(); -- -- update_persistent_indexes(saved_persistent_indexes); -- saved_persistent_indexes.clear(); -- -- if (dynamic_sortfilter && update_source_sort_column()) { -- qDeleteAll(source_index_mapping); -- source_index_mapping.clear(); -- } -- - QList<QPersistentModelIndex> parents; -- parents << q->mapFromSource(sourceParent); -+ parents << sourceParent; - if (sourceParent != destParent) -- parents << q->mapFromSource(destParent); -- emit q->layoutChanged(parents); -+ parents << destParent; -+ _q_sourceLayoutChanged(parents, QAbstractItemModel::NoLayoutChangeHint); - } - - /*! -diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp -index 6b98d9f..7b6c470 100644 ---- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp -+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp -@@ -146,6 +146,7 @@ private slots: - void filterHint(); - - void sourceLayoutChangeLeavesValidPersistentIndexes(); -+ void rowMoveLeavesValidPersistentIndexes(); - - protected: - void buildHierarchy(const QStringList &data, QAbstractItemModel *model); -@@ -4307,5 +4308,50 @@ void tst_QSortFilterProxyModel::sourceLayoutChangeLeavesValidPersistentIndexes() - QVERIFY(persistentIndex.parent().isValid()); - } - -+void tst_QSortFilterProxyModel::rowMoveLeavesValidPersistentIndexes() -+{ -+ DynamicTreeModel model; -+ Q_SET_OBJECT_NAME(model); -+ -+ QList<int> ancestors; -+ for (auto i = 0; i < 5; ++i) -+ { -+ Q_UNUSED(i); -+ ModelInsertCommand insertCommand(&model); -+ insertCommand.setAncestorRowNumbers(ancestors); -+ insertCommand.setStartRow(0); -+ insertCommand.setEndRow(0); -+ insertCommand.doCommand(); -+ ancestors.push_back(0); -+ } -+ -+ QSortFilterProxyModel proxy1; -+ proxy1.setSourceModel(&model); -+ Q_SET_OBJECT_NAME(proxy1); -+ -+ proxy1.setFilterRegExp("1|2"); -+ -+ auto item5 = model.match(model.index(0, 0), Qt::DisplayRole, "5", 1, Qt::MatchRecursive).first(); -+ auto item3 = model.match(model.index(0, 0), Qt::DisplayRole, "3", 1, Qt::MatchRecursive).first(); -+ -+ Q_ASSERT(item5.isValid()); -+ Q_ASSERT(item3.isValid()); -+ -+ QPersistentModelIndex persistentIndex = proxy1.match(proxy1.index(0, 0), Qt::DisplayRole, "2", 1, Qt::MatchRecursive).first(); -+ -+ ModelMoveCommand moveCommand(&model, 0); -+ moveCommand.setAncestorRowNumbers(QList<int>{0, 0, 0, 0}); -+ moveCommand.setStartRow(0); -+ moveCommand.setEndRow(0); -+ moveCommand.setDestRow(0); -+ moveCommand.setDestAncestors(QList<int>{0, 0, 0}); -+ moveCommand.doCommand(); -+ -+ // Calling parent() causes the internalPointer to be used. -+ // Before fixing QTBUG-47711 (moveRows case), that could be -+ // a dangling pointer. -+ QVERIFY(persistentIndex.parent().isValid()); -+} -+ - QTEST_MAIN(tst_QSortFilterProxyModel) - #include "tst_qsortfilterproxymodel.moc" --- -2.7.4 - - diff --git a/dev-qt/qtcore/files/qtcore-5.9.3-avx.patch b/dev-qt/qtcore/files/qtcore-5.9.3-avx.patch deleted file mode 100644 index be18433b..00000000 --- a/dev-qt/qtcore/files/qtcore-5.9.3-avx.patch +++ /dev/null @@ -1,69 +0,0 @@ -From d813c66bfcfac1837814ec4d174d0389172f0d4c Mon Sep 17 00:00:00 2001 -From: Thiago Macieira <thiago.macieira@intel.com> -Date: Tue, 25 Apr 2017 12:02:09 -0300 -Subject: Fix the build when AVX2 is enabled but __F16C__ isn't defined - -If -mavx2 is used, __AVX2__ is defined, which enables the F16C code -after commit 280e321e52fd4e86545f3f0d4bd4e047786a897e, but that was -wrong since we aren't allowed to use the F16C intrinsics with either -Clang or GCC (we can only do that with GCC 4.9 and Clang 4.8, and only -with an __attribute__ decoration). - -With ICC and MSVC, we are allowed to use the intrinsics, but the -#include was missing. - -[ChangeLog][QtCore] Fixed a compilation issue with qfloat16 if AVX2 -support is enabled in the compiler. Since all processors that support -AVX2 also support F16C, for GCC and Clang it is recommended to either -add -mf16c to your build or to use the corresponding -march= switch. - -Task-number: QTBUG-64529 -Change-Id: I84e363d735b443cb9beefffd14b8ac1fd4baa978 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - src/corelib/global/qfloat16.h | 15 ++++++++++++--- - 1 file changed, 12 insertions(+), 3 deletions(-) - -diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h -index 89a62a93db..a0aa9496b4 100644 ---- a/src/corelib/global/qfloat16.h -+++ b/src/corelib/global/qfloat16.h -@@ -44,7 +44,16 @@ - #include <QtCore/qmetatype.h> - #include <string.h> - --#if defined __F16C__ -+#if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__AVX2__) && !defined(__F16C__) -+// All processors that support AVX2 do support F16C too. That doesn't mean -+// we're allowed to use the intrinsics directly, so we'll do it only for -+// the Intel and Microsoft's compilers. -+# if defined(Q_CC_INTEL) || defined(Q_CC_MSVC) -+# define __F16C__ 1 -+# endif -+#endif -+ -+#if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__F16C__) - #include <immintrin.h> - #endif - -@@ -116,7 +125,7 @@ QT_WARNING_DISABLE_CLANG("-Wc99-extensions") - QT_WARNING_DISABLE_GCC("-Wold-style-cast") - inline qfloat16::qfloat16(float f) Q_DECL_NOTHROW - { --#if defined(QT_COMPILER_SUPPORTS_F16C) && (defined(__F16C__) || defined(__AVX2__)) -+#if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__F16C__) - __m128 packsingle = _mm_set_ss(f); - __m128i packhalf = _mm_cvtps_ph(packsingle, 0); - b16 = _mm_extract_epi16(packhalf, 0); -@@ -134,7 +143,7 @@ QT_WARNING_POP - - inline qfloat16::operator float() const Q_DECL_NOTHROW - { --#if defined(QT_COMPILER_SUPPORTS_F16C) && (defined(__F16C__) || defined(__AVX2__)) -+#if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__F16C__) - __m128i packhalf = _mm_cvtsi32_si128(b16); - __m128 packsingle = _mm_cvtph_ps(packhalf); - return _mm_cvtss_f32(packsingle); --- -cgit v1.1-6-g87c4 - diff --git a/dev-qt/qtcore/files/qtcore-5.9.3-musl-iconv.patch b/dev-qt/qtcore/files/qtcore-5.9.3-musl-iconv.patch deleted file mode 100644 index b738f739..00000000 --- a/dev-qt/qtcore/files/qtcore-5.9.3-musl-iconv.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur qtbase-opensource-src-5.9.3.orig/src/corelib/codecs/qiconvcodec.cpp qtbase-opensource-src-5.9.3/src/corelib/codecs/qiconvcodec.cpp ---- qtbase-opensource-src-5.9.3.orig/src/corelib/codecs/qiconvcodec.cpp 2017-11-15 21:15:28.000000000 -0800 -+++ qtbase-opensource-src-5.9.3/src/corelib/codecs/qiconvcodec.cpp 2017-11-28 22:24:13.734884247 -0800 -@@ -63,7 +63,7 @@ - #elif defined(Q_OS_AIX) - # define NO_BOM - # define UTF16 "UCS-2" --#elif defined(Q_OS_FREEBSD) -+#elif defined(Q_OS_FREEBSD) || (defined(Q_OS_LINUX) && !defined(__GLIBC__)) - # define NO_BOM - # if Q_BYTE_ORDER == Q_BIG_ENDIAN - # define UTF16 "UTF-16BE" diff --git a/dev-qt/qtcore/files/qtcore-clang-libc++abi.patch b/dev-qt/qtcore/files/qtcore-clang-libc++abi.patch deleted file mode 100644 index 832f08b6..00000000 --- a/dev-qt/qtcore/files/qtcore-clang-libc++abi.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/mkspecs/linux-clang-libc++/qmake.conf.orig b/mkspecs/linux-clang-libc++/qmake.conf -index c5b0b57..97256f0 100644 ---- a/mkspecs/linux-clang-libc++/qmake.conf.orig -+++ b/mkspecs/linux-clang-libc++/qmake.conf -@@ -5,6 +5,6 @@ - include(../linux-clang/qmake.conf) - - QMAKE_CXXFLAGS += -stdlib=libc++ --QMAKE_LFLAGS += -stdlib=libc++ -+QMAKE_LFLAGS += -stdlib=libc++ -lc++abi - - load(qt_config) diff --git a/dev-qt/qtcore/metadata.xml b/dev-qt/qtcore/metadata.xml index 34c01218..668f6ab4 100644 --- a/dev-qt/qtcore/metadata.xml +++ b/dev-qt/qtcore/metadata.xml @@ -15,7 +15,7 @@ </use> <upstream> <bugs-to>https://bugreports.qt.io/</bugs-to> - <doc>http://doc.qt.io/</doc> + <doc>https://doc.qt.io/</doc> </upstream> <slots> <subslots> diff --git a/dev-qt/qtcore/qtcore-4.8.7-r3.ebuild b/dev-qt/qtcore/qtcore-4.8.7-r4.ebuild index c590fe94..b537661b 100644 --- a/dev-qt/qtcore/qtcore-4.8.7-r3.ebuild +++ b/dev-qt/qtcore/qtcore-4.8.7-r4.ebuild @@ -7,7 +7,7 @@ inherit qt4-build-multilib DESCRIPTION="Cross-platform application development framework" if [[ ${QT4_BUILD_TYPE} == release ]]; then - KEYWORDS="amd64 ~arm ia64 ~mips ppc sparc x86" + KEYWORDS="amd64 arm ia64 ~mips ppc sparc x86" fi IUSE="+glib iconv icu libressl qt3support ssl" @@ -16,7 +16,7 @@ DEPEND=" >=sys-libs/zlib-1.2.8-r1[${MULTILIB_USEDEP}] glib? ( dev-libs/glib:2[${MULTILIB_USEDEP}] ) iconv? ( >=virtual/libiconv-0-r2[${MULTILIB_USEDEP}] ) - icu? ( dev-libs/icu:=[${MULTILIB_USEDEP}] ) + icu? ( <dev-libs/icu-59:=[${MULTILIB_USEDEP}] ) ssl? ( !libressl? ( >=dev-libs/openssl-1.0.1h-r2:0[${MULTILIB_USEDEP}] ) libressl? ( dev-libs/libressl:=[${MULTILIB_USEDEP}] ) diff --git a/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild b/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild deleted file mode 100644 index b8f760e6..00000000 --- a/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 1999-2017 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -EAPI=6 -QT5_MODULE="qtbase" -inherit qt5-build - -DESCRIPTION="Cross-platform application development framework" - -if [[ ${QT5_BUILD_TYPE} == release ]]; then - KEYWORDS="amd64 arm ppc x86" -fi - -IUSE="icu systemd" - -DEPEND=" - dev-libs/double-conversion:= - dev-libs/glib:2 - >=dev-libs/libpcre-8.38[pcre16,unicode] - >=sys-libs/zlib-1.2.5 - virtual/libiconv - icu? ( dev-libs/icu:= ) - systemd? ( sys-apps/systemd:= ) -" -RDEPEND="${DEPEND}" - -PATCHES=( - "${FILESDIR}"/${PN}-5.6.2-plugins.patch - "${FILESDIR}"/${P}-qipm.patch - "${FILESDIR}"/${P}-qsfpm-{1,2}.patch - "${FILESDIR}/${PN}-5.5.1-musl-iconv.patch" -) - -QT5_TARGET_SUBDIRS=( - src/tools/bootstrap - src/tools/moc - src/tools/rcc - src/corelib - src/tools/qlalr - doc -) - -src_configure() { - local myconf=( - $(qt_use icu) - $(qt_use systemd journald) - ) - qt5-build_src_configure -} |