public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/musl:master commit in: dev-qt/qtcore/files/, dev-qt/qtcore/
@ 2015-07-04 22:45 Anthony G. Basile
  0 siblings, 0 replies; 6+ messages in thread
From: Anthony G. Basile @ 2015-07-04 22:45 UTC (permalink / raw
  To: gentoo-commits

commit:     87c6dd0ad1334280d0269be108dea4db30c6e8a4
Author:     Wiktor W Brodlo <wiktor <AT> brodlo <DOT> net>
AuthorDate: Sat Jul  4 22:12:28 2015 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Sat Jul  4 22:47:24 2015 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=87c6dd0a

dev-qt/qtcore: Fix socklen_t detection. Bug #551640

 dev-qt/qtcore/Manifest                             |  11 +
 ...isallow-deep-or-widely-nested-entity-refs.patch | 114 ++++++
 .../CVE-2013-4549-02-fully-expand-entities.patch   | 124 ++++++
 ...ExcludeSocketNotifiers-in-glib-event-loop.patch |  81 ++++
 .../qtcore-4.8.5-moc-boost-lexical-cast.patch      |  12 +
 .../qtcore-4.8.5-qeventdispatcher-recursive.patch  |  94 +++++
 .../files/qtcore-4.8.6-QNAM-corruptions-fix.patch  | 431 +++++++++++++++++++++
 .../files/qtcore-4.8.7-fix-socklent-for-musl.patch | 119 ++++++
 dev-qt/qtcore/metadata.xml                         |  16 +
 dev-qt/qtcore/qtcore-4.8.7-r99.ebuild              |  90 +++++
 10 files changed, 1092 insertions(+)

diff --git a/dev-qt/qtcore/Manifest b/dev-qt/qtcore/Manifest
new file mode 100644
index 0000000..4c80db8
--- /dev/null
+++ b/dev-qt/qtcore/Manifest
@@ -0,0 +1,11 @@
+AUX CVE-2013-4549-01-disallow-deep-or-widely-nested-entity-refs.patch 4531 SHA256 fd6e59635ea7bc86fdc36333ecd77609ae5cdc52c3a388c3b0088887d9a21b72 SHA512 b81810d62e8652f91b787285e8208b42d723e89aef248aeca24f02cd84b4a098c82571ece7c8af9c25c0535bde61ee376b6c24992f55fbaef2dd77f54f14ef1a WHIRLPOOL f7e6d005c157314eba3501bb9fdcecdb1f0b317880d659ac42e9b17a79ba98892c6ad9b49651a81d2a8c5c77d9e6ab9b7953422435543b1e38f1eeef0865dbd3
+AUX CVE-2013-4549-02-fully-expand-entities.patch 6117 SHA256 848dbcd78c2ae0a3f6acca07b48067c453f721adfbe4dcdc90ca8267eedbc065 SHA512 1564fc1e299704c7f51015fdf3213e3c85460d2950821f53f94bbf98c80275e845aa8804250081df9db8172ca26fde11070e21ce18b8ee17961689ceb96daac9 WHIRLPOOL ccf1494fd0b243aed5149d6f1ebaadb5bfefff4698a95fae6d006247a9daee493e8e4c567a2bc930efc7b22c27761207afd1c8fe8f104c5a3fed491a669d14e8
+AUX qtcore-4.8.5-honor-ExcludeSocketNotifiers-in-glib-event-loop.patch 3410 SHA256 9dbb9be4dfefc00711058b99fe2425bb43c811a1b36a6f046336e13c666d40ea SHA512 6770959ba01756d6a3fa9e03edd5f6c1df0d8625f4add65f7fef55a93b7b52c555a0ce749984938fb7ab905c2e0875cec0cb5d07f45c1b447fbc9e2d0ec678bb WHIRLPOOL d06e33e4d6545b99d930212f6ad767a6c59cb241cb0b28fe3401853700c26c9fd9a5dc0eb5cfaef62ed8f7874eccf906c7c39c469c6725e9db3836c8982422d8
+AUX qtcore-4.8.5-moc-boost-lexical-cast.patch 584 SHA256 dadd3eab516ee26f1c19f17dbcb7be46e7c9efba49924fa1d53cc0176491736a SHA512 ed2cc3d36ac8576cee42d1586b99913ce060a47e72c82890e7b5fe4fc500e857693f2348f4446ce7dfbd1bbdf6e51b99b57f2fc09d6c15f9075f10c4b5459fa6 WHIRLPOOL d4ee64605ad9dacd371519a9c08582c25ea891480c79795822cfe74e6bafb332d558dca5d024c6f369e3674fde5a89a15a7d79042093295ac9d0a0d516493583
+AUX qtcore-4.8.5-qeventdispatcher-recursive.patch 4017 SHA256 5db36cbb0686b8a503941779c821febc4a0330dc260e51d603f7aa1e4d8860ad SHA512 bd63961bcb695beebe8686142b84bff7702db4d85d737f5c2da927252b931700d03602f80048223cbbb05d85a5ddb9cb818321d756577f84843690b318f0c413 WHIRLPOOL f981bf3c3d1a62b486788433cabb2880b7f361ccdf99e502fb595608195168d72ba14018c93273f2726c60bae61a44cba3244026009823e832109a1f7418e773
+AUX qtcore-4.8.6-QNAM-corruptions-fix.patch 17586 SHA256 5309c0f1ed0fc54799537b6d0a51b9682f52b4b40cc76e6fa71afc7273120e40 SHA512 4367974513b230d0395d0d0ebff5007255c257126309b614c37e8297981b833b397792fe9dede1960e0027a87d3fbc5eb252253a7ed73f4f9383531ea39cc874 WHIRLPOOL 8eded4f95d00f2ce572cf1956745d5a06e07f54a6ed6e67578914c0d2c9be63994cbf9177212d25c3c2678bf7328b2364b5977ebb8e8d7b8e4ad79009be6a7ae
+AUX qtcore-4.8.7-fix-socklent-for-musl.patch 3982 SHA256 2d3065b3a372ae03a58ee76a4a24e676abc36a16f5c564b4b25c537d2520700d SHA512 d578fa49270ae8d18ff4de3a15b6f4c485503c1de61e9732e6e55d0bd3db5a0c2e68d37327e500b71a85efe05b187f435d2e4c62f23481c73a9d593803ca345c WHIRLPOOL e95016f372dc7cfff32609b838774a339320073fde9c90aa92b0ee8003bbf740a545cb500518bdd611553016bc8d9f21ea060b97742478105474561d6f3ae3d4
+DIST qt-everywhere-opensource-src-4.8.7.tar.gz 241075567 SHA256 e2882295097e47fe089f8ac741a95fef47e0a73a3f3cdf21b56990638f626ea0 SHA512 f9f81a2e7205e1fd05c8d923dc73244f29aa33f951fa6b7c5c8193449328b37084796b9b71ad0c317e4e6fd00017c10ea5d67b1b2032551cde00548522218125 WHIRLPOOL ad8f01172f5bdb3a3a69fe7b03862c4c411bc8d95211053ad66ed1d60a3c0577d073d1075a1e0a80b25d9b2721addda55a2967e6ccf5e194cec8d08770ac5fc2
+EBUILD qtcore-4.8.7-r99.ebuild 2987 SHA256 f0499c2b754b3a9d8635f8f27883fb78edc07452a594a03e82491e6611ec0f89 SHA512 78d6b370f0039cd0905926109bee181f24d8c006b08f6d606e40ac89120a8fa0012e8457dea68ab2aa174bae2484e6f69d36a7f75cd171bbb073d881dc0fb189 WHIRLPOOL 4664e9cfe1e3d0e962328f70b6f75c244cbdac1711f57d6142fb8fa3681002c7d45cdd58a10a101ab4ec8428ed30e00d8123d23db46fb0bc6e6e7af172b31067
+MISC ChangeLog 39458 SHA256 538ab612e6a4236bdc8c54ead41013e9900532150871c00704179a997ebb102f SHA512 858615bf43caf12eeca50b45c1b61696291762f43bd96cd8949ba6d263a6c52e6e527289c4abc22d988e2f41420de52a919ab28bb889f6cc7c21c4e2a82a6a68 WHIRLPOOL 7355b16095460360dba36c8cfd0d917c34192013d1f43136d70f3f7547f406eab125815bc4cfc0b4d459eda70dc8fc275afcdaee642b1834b5f4461bca6ba543
+MISC metadata.xml 633 SHA256 b8a9342f8b5306a23b156316bb8f6cbf6efc162d678d41a8e13e46916f12cf7d SHA512 3adcde8bf745bf21b85c8dd7b4b9d420d427053ed7fcbc110057aed87ce3a786e72d942c11d81de87bda04c5e2484ff410641ea147a2748867e969da828e6957 WHIRLPOOL 30fce13f3de4d40391ca081df75d94b6e88e352d0c0b0c10b2e2942462e0df6491b1bd15074dce27bf6cebf7f9d0381ca17cf22cfc982e06bfae4e2d278fc1ef

diff --git a/dev-qt/qtcore/files/CVE-2013-4549-01-disallow-deep-or-widely-nested-entity-refs.patch b/dev-qt/qtcore/files/CVE-2013-4549-01-disallow-deep-or-widely-nested-entity-refs.patch
new file mode 100644
index 0000000..c472d42
--- /dev/null
+++ b/dev-qt/qtcore/files/CVE-2013-4549-01-disallow-deep-or-widely-nested-entity-refs.patch
@@ -0,0 +1,114 @@
+From 512a1ce0698d370c313bb561bbf078935fa0342e Mon Sep 17 00:00:00 2001
+From: Mitch Curtis <mitch.curtis@digia.com>
+Date: Thu, 7 Nov 2013 09:36:29 +0100
+Subject: Disallow deep or widely nested entity references.
+
+Nested references with a depth of 2 or greater will fail. References
+that partially expand to greater than 1024 characters will also fail.
+
+This is a backport of 46a8885ae486e238a39efa5119c2714f328b08e4.
+
+Change-Id: I0c2e1fa13d6ccb5f88641dae2ed3f28bfdeaf609
+Reviewed-by: Richard J. Moore <rich@kde.org>
+Reviewed-by: Lars Knoll <lars.knoll@digia.com>
+
+diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
+index a1777c5..3904632 100644
+--- a/src/xml/sax/qxml.cpp
++++ b/src/xml/sax/qxml.cpp
+@@ -424,6 +424,10 @@ private:
+     int     stringValueLen;
+     QString emptyStr;
+ 
++    // The limit to the amount of times the DTD parsing functions can be called
++    // for the DTD currently being parsed.
++    int dtdRecursionLimit;
++
+     const QString &string();
+     void stringClear();
+     void stringAddC(QChar);
+@@ -492,6 +496,7 @@ private:
+     void unexpectedEof(ParseFunction where, int state);
+     void parseFailed(ParseFunction where, int state);
+     void pushParseState(ParseFunction function, int state);
++    bool isPartiallyExpandedEntityValueTooLarge(QString *errorMessage);
+ 
+     Q_DECLARE_PUBLIC(QXmlSimpleReader)
+     QXmlSimpleReader *q_ptr;
+@@ -2759,6 +2764,7 @@ QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader)
+     useNamespacePrefixes = false;
+     reportWhitespaceCharData = true;
+     reportEntities = false;
++    dtdRecursionLimit = 2;
+ }
+ 
+ QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate()
+@@ -5018,6 +5024,11 @@ bool QXmlSimpleReaderPrivate::parseDoctype()
+                 }
+                 break;
+             case Mup:
++                if (dtdRecursionLimit > 0 && parameterEntities.size() > dtdRecursionLimit) {
++                    reportParseError(QString::fromLatin1(
++                        "DTD parsing exceeded recursion limit of %1.").arg(dtdRecursionLimit));
++                    return false;
++                }
+                 if (!parseMarkupdecl()) {
+                     parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
+                     return false;
+@@ -6627,6 +6638,37 @@ bool QXmlSimpleReaderPrivate::parseChoiceSeq()
+     return false;
+ }
+ 
++bool QXmlSimpleReaderPrivate::isPartiallyExpandedEntityValueTooLarge(QString *errorMessage)
++{
++    const QString value = string();
++    QMap<QString, int> referencedEntityCounts;
++    foreach (QString entityName, entities.keys()) {
++        for (int i = 0; i < value.size() && i != -1; ) {
++            i = value.indexOf(entityName, i);
++            if (i != -1) {
++                // The entityName we're currently trying to find
++                // was matched in this string; increase our count.
++                ++referencedEntityCounts[entityName];
++                i += entityName.size();
++            }
++        }
++    }
++
++    foreach (QString entityName, referencedEntityCounts.keys()) {
++        const int timesReferenced = referencedEntityCounts[entityName];
++        const QString entityValue = entities[entityName];
++        if (entityValue.size() * timesReferenced > 1024) {
++            if (errorMessage) {
++                *errorMessage = QString::fromLatin1("The XML entity \"%1\""
++                    "expands too a string that is too large to process when "
++                    "referencing \"%2\" %3 times.").arg(entityName).arg(entityName).arg(timesReferenced);
++            }
++            return true;
++        }
++    }
++    return false;
++}
++
+ /*
+   Parse a EntityDecl [70].
+ 
+@@ -6721,6 +6763,15 @@ bool QXmlSimpleReaderPrivate::parseEntityDecl()
+         switch (state) {
+             case EValue:
+                 if ( !entityExist(name())) {
++                    QString errorMessage;
++                    if (isPartiallyExpandedEntityValueTooLarge(&errorMessage)) {
++                        // The entity at entityName is entityValue.size() characters
++                        // long in its unexpanded form, and was mentioned timesReferenced times,
++                        // resulting in a string that would be greater than 1024 characters.
++                        reportParseError(errorMessage);
++                        return false;
++                    }
++
+                     entities.insert(name(), string());
+                     if (declHnd) {
+                         if (!declHnd->internalEntityDecl(name(), string())) {
+-- 
+1.8.5.2
+

diff --git a/dev-qt/qtcore/files/CVE-2013-4549-02-fully-expand-entities.patch b/dev-qt/qtcore/files/CVE-2013-4549-02-fully-expand-entities.patch
new file mode 100644
index 0000000..03ef64f
--- /dev/null
+++ b/dev-qt/qtcore/files/CVE-2013-4549-02-fully-expand-entities.patch
@@ -0,0 +1,124 @@
+From cecceb0cdd87482124a73ecf537f3445d68be13e Mon Sep 17 00:00:00 2001
+From: Mitch Curtis <mitch.curtis@digia.com>
+Date: Tue, 12 Nov 2013 13:44:56 +0100
+Subject: Fully expand entities to ensure deep or widely nested ones fail
+ parsing
+
+With 512a1ce0698d370c313bb561bbf078935fa0342e, we failed when parsing
+entities whose partially expanded size was greater than 1024
+characters. That was not enough, so now we fully expand all entities.
+
+This is a backport of f1053d94f59f053ce4acad9320df14f1fbe4faac.
+
+Change-Id: I41dd6f4525c63e82fd320a22d19248169627f7e0
+Reviewed-by: Richard J. Moore <rich@kde.org>
+
+diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
+index 3904632..befa801 100644
+--- a/src/xml/sax/qxml.cpp
++++ b/src/xml/sax/qxml.cpp
+@@ -426,7 +426,9 @@ private:
+ 
+     // The limit to the amount of times the DTD parsing functions can be called
+     // for the DTD currently being parsed.
+-    int dtdRecursionLimit;
++    static const int dtdRecursionLimit = 2;
++    // The maximum amount of characters an entity value may contain, after expansion.
++    static const int entityCharacterLimit = 1024;
+ 
+     const QString &string();
+     void stringClear();
+@@ -496,7 +498,7 @@ private:
+     void unexpectedEof(ParseFunction where, int state);
+     void parseFailed(ParseFunction where, int state);
+     void pushParseState(ParseFunction function, int state);
+-    bool isPartiallyExpandedEntityValueTooLarge(QString *errorMessage);
++    bool isExpandedEntityValueTooLarge(QString *errorMessage);
+ 
+     Q_DECLARE_PUBLIC(QXmlSimpleReader)
+     QXmlSimpleReader *q_ptr;
+@@ -2764,7 +2766,6 @@ QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader)
+     useNamespacePrefixes = false;
+     reportWhitespaceCharData = true;
+     reportEntities = false;
+-    dtdRecursionLimit = 2;
+ }
+ 
+ QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate()
+@@ -6638,30 +6639,43 @@ bool QXmlSimpleReaderPrivate::parseChoiceSeq()
+     return false;
+ }
+ 
+-bool QXmlSimpleReaderPrivate::isPartiallyExpandedEntityValueTooLarge(QString *errorMessage)
++bool QXmlSimpleReaderPrivate::isExpandedEntityValueTooLarge(QString *errorMessage)
+ {
+-    const QString value = string();
+-    QMap<QString, int> referencedEntityCounts;
+-    foreach (QString entityName, entities.keys()) {
+-        for (int i = 0; i < value.size() && i != -1; ) {
+-            i = value.indexOf(entityName, i);
+-            if (i != -1) {
+-                // The entityName we're currently trying to find
+-                // was matched in this string; increase our count.
+-                ++referencedEntityCounts[entityName];
+-                i += entityName.size();
++    QMap<QString, int> literalEntitySizes;
++    // The entity at (QMap<QString,) referenced the entities at (QMap<QString,) (int>) times.
++    QMap<QString, QMap<QString, int> > referencesToOtherEntities;
++    QMap<QString, int> expandedSizes;
++
++    // For every entity, check how many times all entity names were referenced in its value.
++    foreach (QString toSearch, entities.keys()) {
++        // The amount of characters that weren't entity names, but literals, like 'X'.
++        QString leftOvers = entities.value(toSearch);
++        // How many times was entityName referenced by toSearch?
++        foreach (QString entityName, entities.keys()) {
++            for (int i = 0; i < leftOvers.size() && i != -1; ) {
++                i = leftOvers.indexOf(QString::fromLatin1("&%1;").arg(entityName), i);
++                if (i != -1) {
++                    leftOvers.remove(i, entityName.size() + 2);
++                    // The entityName we're currently trying to find was matched in this string; increase our count.
++                    ++referencesToOtherEntities[toSearch][entityName];
++                }
+             }
+         }
++        literalEntitySizes[toSearch] = leftOvers.size();
+     }
+ 
+-    foreach (QString entityName, referencedEntityCounts.keys()) {
+-        const int timesReferenced = referencedEntityCounts[entityName];
+-        const QString entityValue = entities[entityName];
+-        if (entityValue.size() * timesReferenced > 1024) {
++    foreach (QString entity, referencesToOtherEntities.keys()) {
++        expandedSizes[entity] = literalEntitySizes[entity];
++        foreach (QString referenceTo, referencesToOtherEntities.value(entity).keys()) {
++            const int references = referencesToOtherEntities.value(entity).value(referenceTo);
++            // The total size of an entity's value is the expanded size of all of its referenced entities, plus its literal size.
++            expandedSizes[entity] += expandedSizes[referenceTo] * references + literalEntitySizes[referenceTo] * references;
++        }
++
++        if (expandedSizes[entity] > entityCharacterLimit) {
+             if (errorMessage) {
+-                *errorMessage = QString::fromLatin1("The XML entity \"%1\""
+-                    "expands too a string that is too large to process when "
+-                    "referencing \"%2\" %3 times.").arg(entityName).arg(entityName).arg(timesReferenced);
++                *errorMessage = QString::fromLatin1("The XML entity \"%1\" expands too a string that is too large to process (%2 characters > %3).");
++                *errorMessage = (*errorMessage).arg(entity).arg(expandedSizes[entity]).arg(entityCharacterLimit);
+             }
+             return true;
+         }
+@@ -6764,10 +6778,7 @@ bool QXmlSimpleReaderPrivate::parseEntityDecl()
+             case EValue:
+                 if ( !entityExist(name())) {
+                     QString errorMessage;
+-                    if (isPartiallyExpandedEntityValueTooLarge(&errorMessage)) {
+-                        // The entity at entityName is entityValue.size() characters
+-                        // long in its unexpanded form, and was mentioned timesReferenced times,
+-                        // resulting in a string that would be greater than 1024 characters.
++                    if (isExpandedEntityValueTooLarge(&errorMessage)) {
+                         reportParseError(errorMessage);
+                         return false;
+                     }
+-- 
+1.8.5.2
+

diff --git a/dev-qt/qtcore/files/qtcore-4.8.5-honor-ExcludeSocketNotifiers-in-glib-event-loop.patch b/dev-qt/qtcore/files/qtcore-4.8.5-honor-ExcludeSocketNotifiers-in-glib-event-loop.patch
new file mode 100644
index 0000000..0fcc1fa
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-4.8.5-honor-ExcludeSocketNotifiers-in-glib-event-loop.patch
@@ -0,0 +1,81 @@
+From 267feb2de49eed0823ca0c29f1cd5238537c7116 Mon Sep 17 00:00:00 2001
+From: Jan-Marek Glogowski <glogow@fbihome.de>
+Date: Thu, 6 Mar 2014 18:44:43 +0100
+Subject: Honor ExcludeSocketNotifiers in glib event loop
+
+Implements QEventLoop::ExcludeSocketNotifiers in the same way
+QEventLoop::X11ExcludeTimers is already implemented for the glib
+event loop.
+
+This prevents crashes when QClipboard checks for clipboard events
+and
+  qApp->clipboard()->setProperty( "useEventLoopWhenWaiting", true );
+is set.
+
+Task-number: QTBUG-34614
+Task-number: QTBUG-37380
+
+Change-Id: Id4e2a74c6bdf8c3b439a4e3813d24d11368b607d
+---
+ src/corelib/kernel/qeventdispatcher_glib.cpp | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp
+index 0b0e308..ba522fa 100644
+--- a/src/corelib/kernel/qeventdispatcher_glib.cpp
++++ b/src/corelib/kernel/qeventdispatcher_glib.cpp
+@@ -65,6 +65,7 @@ struct GPollFDWithQSocketNotifier
+ struct GSocketNotifierSource
+ {
+     GSource source;
++    QEventLoop::ProcessEventsFlags processEventsFlags;
+     QList<GPollFDWithQSocketNotifier *> pollfds;
+ };
+ 
+@@ -80,6 +81,9 @@ static gboolean socketNotifierSourceCheck(GSource *source)
+     GSocketNotifierSource *src = reinterpret_cast<GSocketNotifierSource *>(source);
+ 
+     bool pending = false;
++    if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers)
++        return pending;
++
+     for (int i = 0; !pending && i < src->pollfds.count(); ++i) {
+         GPollFDWithQSocketNotifier *p = src->pollfds.at(i);
+ 
+@@ -103,6 +107,9 @@ static gboolean socketNotifierSourceDispatch(GSource *source, GSourceFunc, gpoin
+     QEvent event(QEvent::SockAct);
+ 
+     GSocketNotifierSource *src = reinterpret_cast<GSocketNotifierSource *>(source);
++    if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers)
++        return true;
++
+     for (int i = 0; i < src->pollfds.count(); ++i) {
+         GPollFDWithQSocketNotifier *p = src->pollfds.at(i);
+ 
+@@ -331,6 +338,7 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context)
+         reinterpret_cast<GSocketNotifierSource *>(g_source_new(&socketNotifierSourceFuncs,
+                                                                sizeof(GSocketNotifierSource)));
+     (void) new (&socketNotifierSource->pollfds) QList<GPollFDWithQSocketNotifier *>();
++    socketNotifierSource->processEventsFlags = QEventLoop::AllEvents;
+     g_source_set_can_recurse(&socketNotifierSource->source, true);
+     g_source_attach(&socketNotifierSource->source, mainContext);
+ 
+@@ -416,6 +424,7 @@ bool QEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags)
+     // tell postEventSourcePrepare() and timerSource about any new flags
+     QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags;
+     d->timerSource->processEventsFlags = flags;
++    d->socketNotifierSource->processEventsFlags = flags;
+ 
+     if (!(flags & QEventLoop::EventLoopExec)) {
+         // force timers to be sent at normal priority
+@@ -427,6 +436,7 @@ bool QEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags)
+         result = g_main_context_iteration(d->mainContext, canWait);
+ 
+     d->timerSource->processEventsFlags = savedFlags;
++    d->socketNotifierSource->processEventsFlags = savedFlags;
+ 
+     if (canWait)
+         emit awake();
+-- 
+2.0.0
+

diff --git a/dev-qt/qtcore/files/qtcore-4.8.5-moc-boost-lexical-cast.patch b/dev-qt/qtcore/files/qtcore-4.8.5-moc-boost-lexical-cast.patch
new file mode 100644
index 0000000..b464c92
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-4.8.5-moc-boost-lexical-cast.patch
@@ -0,0 +1,12 @@
+Index: qt-everywhere-opensource-src-4.8.9999/src/tools/moc/main.cpp
+===================================================================
+--- qt-everywhere-opensource-src-4.8.9999.orig/src/tools/moc/main.cpp
++++ qt-everywhere-opensource-src-4.8.9999/src/tools/moc/main.cpp
+@@ -190,6 +190,7 @@ int runMoc(int _argc, char **_argv)
+ 
+     // Workaround a bug while parsing the boost/type_traits/has_operator.hpp header. See QTBUG-22829
+     pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"];
++    pp.macros["BOOST_LEXICAL_CAST_INCLUDED"];
+ 
+     QByteArray filename;
+     QByteArray output;

diff --git a/dev-qt/qtcore/files/qtcore-4.8.5-qeventdispatcher-recursive.patch b/dev-qt/qtcore/files/qtcore-4.8.5-qeventdispatcher-recursive.patch
new file mode 100644
index 0000000..6d3bf2f
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-4.8.5-qeventdispatcher-recursive.patch
@@ -0,0 +1,94 @@
+--- src/corelib/kernel/qeventdispatcher_glib.cpp.sav	2014-03-28 15:26:37.000000000 +0100
++++ src/corelib/kernel/qeventdispatcher_glib.cpp	2014-04-24 09:44:09.358659204 +0200
+@@ -255,22 +255,30 @@ struct GPostEventSource
+     GSource source;
+     QAtomicInt serialNumber;
+     int lastSerialNumber;
++    QEventLoop::ProcessEventsFlags processEventsFlags;
+     QEventDispatcherGlibPrivate *d;
+ };
+ 
+ static gboolean postEventSourcePrepare(GSource *s, gint *timeout)
+ {
++    GPostEventSource *source = reinterpret_cast<GPostEventSource *>(s);
+     QThreadData *data = QThreadData::current();
+     if (!data)
+         return false;
+ 
++    QEventLoop::ProcessEventsFlags excludeAllFlags
++        = QEventLoop::ExcludeUserInputEvents
++        | QEventLoop::ExcludeSocketNotifiers
++        | QEventLoop::X11ExcludeTimers;
++    if ((source->processEventsFlags & excludeAllFlags) == excludeAllFlags)
++        return false;
++
+     gint dummy;
+     if (!timeout)
+         timeout = &dummy;
+     const bool canWait = data->canWaitLocked();
+     *timeout = canWait ? -1 : 0;
+ 
+-    GPostEventSource *source = reinterpret_cast<GPostEventSource *>(s);
+     return (!canWait
+             || (source->serialNumber != source->lastSerialNumber));
+ }
+@@ -284,8 +292,14 @@ static gboolean postEventSourceDispatch(
+ {
+     GPostEventSource *source = reinterpret_cast<GPostEventSource *>(s);
+     source->lastSerialNumber = source->serialNumber;
+-    QCoreApplication::sendPostedEvents();
+-    source->d->runTimersOnceWithNormalPriority();
++    QEventLoop::ProcessEventsFlags excludeAllFlags
++        = QEventLoop::ExcludeUserInputEvents
++        | QEventLoop::ExcludeSocketNotifiers
++        | QEventLoop::X11ExcludeTimers;
++    if ((source->processEventsFlags & excludeAllFlags) != excludeAllFlags) {
++        QCoreApplication::sendPostedEvents();
++        source->d->runTimersOnceWithNormalPriority();
++    }
+     return true; // i dunno, george...
+ }
+ 
+@@ -329,6 +343,7 @@ QEventDispatcherGlibPrivate::QEventDispa
+     postEventSource = reinterpret_cast<GPostEventSource *>(g_source_new(&postEventSourceFuncs,
+                                                                         sizeof(GPostEventSource)));
+     postEventSource->serialNumber = 1;
++    postEventSource->processEventsFlags = QEventLoop::AllEvents;
+     postEventSource->d = this;
+     g_source_set_can_recurse(&postEventSource->source, true);
+     g_source_attach(&postEventSource->source, mainContext);
+@@ -423,6 +438,7 @@ bool QEventDispatcherGlib::processEvents
+ 
+     // tell postEventSourcePrepare() and timerSource about any new flags
+     QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags;
++    d->postEventSource->processEventsFlags = flags;
+     d->timerSource->processEventsFlags = flags;
+     d->socketNotifierSource->processEventsFlags = flags;
+ 
+@@ -435,6 +451,7 @@ bool QEventDispatcherGlib::processEvents
+     while (!result && canWait)
+         result = g_main_context_iteration(d->mainContext, canWait);
+ 
++    d->postEventSource->processEventsFlags = savedFlags;
+     d->timerSource->processEventsFlags = savedFlags;
+     d->socketNotifierSource->processEventsFlags = savedFlags;
+ 
+--- src/corelib/kernel/qeventdispatcher_unix.cpp.sav	2013-06-07 07:16:52.000000000 +0200
++++ src/corelib/kernel/qeventdispatcher_unix.cpp	2014-04-24 09:43:06.927589535 +0200
+@@ -905,7 +905,15 @@ bool QEventDispatcherUNIX::processEvents
+ 
+     // we are awake, broadcast it
+     emit awake();
+-    QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData);
++
++    QEventLoop::ProcessEventsFlags excludeAllFlags
++        = QEventLoop::ExcludeUserInputEvents
++        | QEventLoop::ExcludeSocketNotifiers
++        | QEventLoop::X11ExcludeTimers;
++    if ((flags & excludeAllFlags) == excludeAllFlags)
++        return false;
++    if(( flags & excludeAllFlags ) != excludeAllFlags )
++        QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData);
+ 
+     int nevents = 0;
+     const bool canWait = (d->threadData->canWaitLocked()

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
new file mode 100644
index 0000000..1d83caa
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-4.8.6-QNAM-corruptions-fix.patch
@@ -0,0 +1,431 @@
+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.7-fix-socklent-for-musl.patch b/dev-qt/qtcore/files/qtcore-4.8.7-fix-socklent-for-musl.patch
new file mode 100644
index 0000000..81b44c3
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-4.8.7-fix-socklent-for-musl.patch
@@ -0,0 +1,119 @@
+diff -ru a/mkspecs/linux-cxx/qplatformdefs.h b/mkspecs/linux-cxx/qplatformdefs.h
+--- a/mkspecs/linux-cxx/qplatformdefs.h	2015-05-07 14:14:41.000000000 +0000
++++ b/mkspecs/linux-cxx/qplatformdefs.h	2015-07-04 21:44:04.370713742 +0000
+@@ -87,10 +87,10 @@
+ 
+ #undef QT_SOCKLEN_T
+ 
+-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+-#define QT_SOCKLEN_T            socklen_t
+-#else
++#if defined(__GLIBC__) && (__GLIBC__ < 2)
+ #define QT_SOCKLEN_T            int
++#else
++#define QT_SOCKLEN_T            socklen_t
+ #endif
+ 
+ #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+diff -ru a/mkspecs/linux-ecc-64/qplatformdefs.h b/mkspecs/linux-ecc-64/qplatformdefs.h
+--- a/mkspecs/linux-ecc-64/qplatformdefs.h	2015-05-07 14:14:42.000000000 +0000
++++ b/mkspecs/linux-ecc-64/qplatformdefs.h	2015-07-04 21:44:41.610717930 +0000
+@@ -87,10 +87,10 @@
+ 
+ #undef QT_SOCKLEN_T
+ 
+-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+-#define QT_SOCKLEN_T            socklen_t
+-#else
++#if defined(__GLIBC__) && (__GLIBC__ < 2)
+ #define QT_SOCKLEN_T            int
++#else
++#define QT_SOCKLEN_T            socklen_t
+ #endif
+ 
+ #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+diff -ru a/mkspecs/linux-g++/qplatformdefs.h b/mkspecs/linux-g++/qplatformdefs.h
+--- a/mkspecs/linux-g++/qplatformdefs.h	2015-05-07 14:14:41.000000000 +0000
++++ b/mkspecs/linux-g++/qplatformdefs.h	2015-07-04 21:45:09.554721073 +0000
+@@ -86,10 +86,10 @@
+ 
+ #undef QT_SOCKLEN_T
+ 
+-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+-#define QT_SOCKLEN_T            socklen_t
+-#else
++#if defined(__GLIBC__) && (__GLIBC__ < 2)
+ #define QT_SOCKLEN_T            int
++#else
++#define QT_SOCKLEN_T            socklen_t
+ #endif
+ 
+ #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+diff -ru a/mkspecs/linux-kcc/qplatformdefs.h b/mkspecs/linux-kcc/qplatformdefs.h
+--- a/mkspecs/linux-kcc/qplatformdefs.h	2015-05-07 14:14:41.000000000 +0000
++++ b/mkspecs/linux-kcc/qplatformdefs.h	2015-07-04 21:46:42.865731566 +0000
+@@ -90,10 +90,10 @@
+ 
+ #undef QT_SOCKLEN_T
+ 
+-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+-#define QT_SOCKLEN_T            socklen_t
+-#else
++#if defined(__GLIBC__) && (__GLIBC__ < 2)
+ #define QT_SOCKLEN_T            int
++#else
++#define QT_SOCKLEN_T            socklen_t
+ #endif
+ 
+ #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+diff -ru a/mkspecs/linux-llvm/qplatformdefs.h b/mkspecs/linux-llvm/qplatformdefs.h
+--- a/mkspecs/linux-llvm/qplatformdefs.h	2015-05-07 14:14:42.000000000 +0000
++++ b/mkspecs/linux-llvm/qplatformdefs.h	2015-07-04 21:47:02.930733823 +0000
+@@ -87,10 +87,10 @@
+ 
+ #undef QT_SOCKLEN_T
+ 
+-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+-#define QT_SOCKLEN_T            socklen_t
+-#else
++#if defined(__GLIBC__) && (__GLIBC__ < 2)
+ #define QT_SOCKLEN_T            int
++#else
++#define QT_SOCKLEN_T            socklen_t
+ #endif
+ 
+ #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+diff -ru a/mkspecs/linux-lsb-g++/qplatformdefs.h b/mkspecs/linux-lsb-g++/qplatformdefs.h
+--- a/mkspecs/linux-lsb-g++/qplatformdefs.h	2015-05-07 14:14:42.000000000 +0000
++++ b/mkspecs/linux-lsb-g++/qplatformdefs.h	2015-07-04 21:47:25.465736357 +0000
+@@ -94,10 +94,10 @@
+ 
+ #define QT_OPEN_LARGEFILE       0
+ 
+-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+-#define QT_SOCKLEN_T            socklen_t
+-#else
++#if defined(__GLIBC__) && (__GLIBC__ < 2)
+ #define QT_SOCKLEN_T            int
++#else
++#define QT_SOCKLEN_T            socklen_t
+ #endif
+ 
+ #ifndef SIOCGIFBRDADDR
+diff -ru a/mkspecs/linux-pgcc/qplatformdefs.h b/mkspecs/linux-pgcc/qplatformdefs.h
+--- a/mkspecs/linux-pgcc/qplatformdefs.h	2015-05-07 14:14:42.000000000 +0000
++++ b/mkspecs/linux-pgcc/qplatformdefs.h	2015-07-04 21:47:53.505739511 +0000
+@@ -87,10 +87,10 @@
+ 
+ #undef QT_SOCKLEN_T
+ 
+-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+-#define QT_SOCKLEN_T            socklen_t
+-#else
++#if defined(__GLIBC__) && (__GLIBC__ < 2)
+ #define QT_SOCKLEN_T            int
++#else
++#define QT_SOCKLEN_T            socklen_t
+ #endif
+ 
+ #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)

diff --git a/dev-qt/qtcore/metadata.xml b/dev-qt/qtcore/metadata.xml
new file mode 100644
index 0000000..9b12987
--- /dev/null
+++ b/dev-qt/qtcore/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<herd>qt</herd>
+	<use>
+		<flag name="exceptions">Add support for exceptions - like catching them
+			inside the event loop (recommended by upstream)</flag>
+		<flag name="glib">Enable <pkg>dev-libs/glib</pkg> eventloop support</flag>
+		<flag name="qt3support">Enable the Qt3Support libraries for Qt4. Note that
+			this does not mean you can compile pure Qt3 programs with Qt4.</flag>
+	</use>
+	<upstream>
+		<bugs-to>https://bugreports.qt.io/</bugs-to>
+		<doc>http://doc.qt.io/</doc>
+	</upstream>
+</pkgmetadata>

diff --git a/dev-qt/qtcore/qtcore-4.8.7-r99.ebuild b/dev-qt/qtcore/qtcore-4.8.7-r99.ebuild
new file mode 100644
index 0000000..156a67d
--- /dev/null
+++ b/dev-qt/qtcore/qtcore-4.8.7-r99.ebuild
@@ -0,0 +1,90 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-qt/qtcore/qtcore-4.8.7.ebuild,v 1.1 2015/05/26 18:14:28 pesa Exp $
+
+EAPI=5
+inherit qt4-build-multilib
+
+DESCRIPTION="Cross-platform application development framework"
+
+if [[ ${QT4_BUILD_TYPE} == release ]]; then
+	KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~x64-solaris ~x86-solaris"
+fi
+
+IUSE="+glib iconv icu qt3support ssl"
+
+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}] )
+	ssl? ( >=dev-libs/openssl-1.0.1h-r2:0[${MULTILIB_USEDEP}] )
+"
+RDEPEND="${DEPEND}"
+PDEPEND="
+	~dev-qt/qttranslations-${PV}
+	qt3support? ( ~dev-qt/qtgui-${PV}[aqua=,debug=,glib=,qt3support,${MULTILIB_USEDEP}] )
+"
+
+MULTILIB_WRAPPED_HEADERS=(
+	/usr/include/qt4/Qt/qconfig.h
+	/usr/include/qt4/QtCore/qconfig.h
+)
+
+PATCHES=(
+	"${FILESDIR}/${PN}-4.8.5-moc-boost-lexical-cast.patch"
+	"${FILESDIR}/${PN}-4.8.5-honor-ExcludeSocketNotifiers-in-glib-event-loop.patch" # bug 514968
+	"${FILESDIR}/${PN}-4.8.5-qeventdispatcher-recursive.patch" # bug 514968
+	"${FILESDIR}/${PN}-4.8.7-fix-socklent-for-musl.patch"
+)
+
+QT4_TARGET_DIRECTORIES="
+	src/tools/bootstrap
+	src/tools/moc
+	src/tools/rcc
+	src/tools/uic
+	src/corelib
+	src/network
+	src/xml
+	src/plugins/codecs/cn
+	src/plugins/codecs/jp
+	src/plugins/codecs/kr
+	src/plugins/codecs/tw
+	tools/linguist/lconvert
+	tools/linguist/lrelease
+	tools/linguist/lupdate"
+
+QCONFIG_DEFINE="QT_ZLIB"
+
+src_prepare() {
+	qt4-build-multilib_src_prepare
+
+	# bug 172219
+	sed -i -e "s:CXXFLAGS.*=:CXXFLAGS=${CXXFLAGS} :" \
+		-e "s:LFLAGS.*=:LFLAGS=${LDFLAGS} :" \
+		qmake/Makefile.unix || die "sed qmake/Makefile.unix failed"
+
+	# bug 427782
+	sed -i -e '/^CPPFLAGS\s*=/ s/-g //' \
+		qmake/Makefile.unix || die "sed CPPFLAGS in qmake/Makefile.unix failed"
+	sed -i -e 's/setBootstrapVariable QMAKE_CFLAGS_RELEASE/QMakeVar set QMAKE_CFLAGS_RELEASE/' \
+		-e 's/setBootstrapVariable QMAKE_CXXFLAGS_RELEASE/QMakeVar set QMAKE_CXXFLAGS_RELEASE/' \
+		configure || die "sed configure setBootstrapVariable failed"
+}
+
+multilib_src_configure() {
+	local myconf=(
+		-no-accessibility -no-xmlpatterns -no-multimedia -no-audio-backend -no-phonon
+		-no-phonon-backend -no-svg -no-webkit -no-script -no-scripttools -no-declarative
+		-system-zlib -no-gif -no-libtiff -no-libpng -no-libmng -no-libjpeg
+		-no-cups -no-dbus -no-gtkstyle -no-nas-sound -no-opengl -no-openvg
+		-no-sm -no-xshape -no-xvideo -no-xsync -no-xinerama -no-xcursor -no-xfixes
+		-no-xrandr -no-xrender -no-mitshm -no-fontconfig -no-freetype -no-xinput -no-xkb
+		$(qt_use glib)
+		$(qt_use iconv)
+		$(qt_use icu)
+		$(use ssl && echo -openssl-linked || echo -no-openssl)
+		$(qt_use qt3support)
+	)
+	qt4_multilib_src_configure
+}


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] proj/musl:master commit in: dev-qt/qtcore/files/, dev-qt/qtcore/
@ 2016-11-09 19:49 Aric Belsito
  0 siblings, 0 replies; 6+ messages in thread
From: Aric Belsito @ 2016-11-09 19:49 UTC (permalink / raw
  To: gentoo-commits

commit:     db295a28b6cb28f38723d24d7bfc6224aba6bf43
Author:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
AuthorDate: Wed Nov  9 19:36:41 2016 +0000
Commit:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
CommitDate: Wed Nov  9 19:36:41 2016 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=db295a28

dev-qt/qtcore: Sync with upstream

Drop the r99 postfix

 dev-qt/qtcore/Manifest                             |  10 +-
 ...isallow-deep-or-widely-nested-entity-refs.patch | 114 -------------------
 .../CVE-2013-4549-02-fully-expand-entities.patch   | 124 ---------------------
 .../qtcore-4.8.5-moc-boost-lexical-cast.patch      |  12 --
 .../qtcore/files/qtcore-4.8.6-moc-boost-1.60.patch |  16 +++
 dev-qt/qtcore/metadata.xml                         |   6 +
 ...ore-4.8.6-r99.ebuild => qtcore-4.8.6-r2.ebuild} |   4 +-
 ...ore-4.8.7-r99.ebuild => qtcore-4.8.7-r2.ebuild} |  11 +-
 8 files changed, 35 insertions(+), 262 deletions(-)

diff --git a/dev-qt/qtcore/Manifest b/dev-qt/qtcore/Manifest
index 6c91307..00d6d55 100644
--- a/dev-qt/qtcore/Manifest
+++ b/dev-qt/qtcore/Manifest
@@ -1,12 +1,10 @@
-AUX CVE-2013-4549-01-disallow-deep-or-widely-nested-entity-refs.patch 4531 SHA256 fd6e59635ea7bc86fdc36333ecd77609ae5cdc52c3a388c3b0088887d9a21b72 SHA512 b81810d62e8652f91b787285e8208b42d723e89aef248aeca24f02cd84b4a098c82571ece7c8af9c25c0535bde61ee376b6c24992f55fbaef2dd77f54f14ef1a WHIRLPOOL f7e6d005c157314eba3501bb9fdcecdb1f0b317880d659ac42e9b17a79ba98892c6ad9b49651a81d2a8c5c77d9e6ab9b7953422435543b1e38f1eeef0865dbd3
-AUX CVE-2013-4549-02-fully-expand-entities.patch 6117 SHA256 848dbcd78c2ae0a3f6acca07b48067c453f721adfbe4dcdc90ca8267eedbc065 SHA512 1564fc1e299704c7f51015fdf3213e3c85460d2950821f53f94bbf98c80275e845aa8804250081df9db8172ca26fde11070e21ce18b8ee17961689ceb96daac9 WHIRLPOOL ccf1494fd0b243aed5149d6f1ebaadb5bfefff4698a95fae6d006247a9daee493e8e4c567a2bc930efc7b22c27761207afd1c8fe8f104c5a3fed491a669d14e8
 AUX qtcore-4.8.5-honor-ExcludeSocketNotifiers-in-glib-event-loop.patch 3410 SHA256 9dbb9be4dfefc00711058b99fe2425bb43c811a1b36a6f046336e13c666d40ea SHA512 6770959ba01756d6a3fa9e03edd5f6c1df0d8625f4add65f7fef55a93b7b52c555a0ce749984938fb7ab905c2e0875cec0cb5d07f45c1b447fbc9e2d0ec678bb WHIRLPOOL d06e33e4d6545b99d930212f6ad767a6c59cb241cb0b28fe3401853700c26c9fd9a5dc0eb5cfaef62ed8f7874eccf906c7c39c469c6725e9db3836c8982422d8
-AUX qtcore-4.8.5-moc-boost-lexical-cast.patch 584 SHA256 dadd3eab516ee26f1c19f17dbcb7be46e7c9efba49924fa1d53cc0176491736a SHA512 ed2cc3d36ac8576cee42d1586b99913ce060a47e72c82890e7b5fe4fc500e857693f2348f4446ce7dfbd1bbdf6e51b99b57f2fc09d6c15f9075f10c4b5459fa6 WHIRLPOOL d4ee64605ad9dacd371519a9c08582c25ea891480c79795822cfe74e6bafb332d558dca5d024c6f369e3674fde5a89a15a7d79042093295ac9d0a0d516493583
 AUX qtcore-4.8.5-qeventdispatcher-recursive.patch 4017 SHA256 5db36cbb0686b8a503941779c821febc4a0330dc260e51d603f7aa1e4d8860ad SHA512 bd63961bcb695beebe8686142b84bff7702db4d85d737f5c2da927252b931700d03602f80048223cbbb05d85a5ddb9cb818321d756577f84843690b318f0c413 WHIRLPOOL f981bf3c3d1a62b486788433cabb2880b7f361ccdf99e502fb595608195168d72ba14018c93273f2726c60bae61a44cba3244026009823e832109a1f7418e773
 AUX qtcore-4.8.6-QNAM-corruptions-fix.patch 17586 SHA256 5309c0f1ed0fc54799537b6d0a51b9682f52b4b40cc76e6fa71afc7273120e40 SHA512 4367974513b230d0395d0d0ebff5007255c257126309b614c37e8297981b833b397792fe9dede1960e0027a87d3fbc5eb252253a7ed73f4f9383531ea39cc874 WHIRLPOOL 8eded4f95d00f2ce572cf1956745d5a06e07f54a6ed6e67578914c0d2c9be63994cbf9177212d25c3c2678bf7328b2364b5977ebb8e8d7b8e4ad79009be6a7ae
+AUX qtcore-4.8.6-moc-boost-1.60.patch 884 SHA256 cf7417eb14641c0e4f65148f67cab2af74ef2f20cb245ef9e21b8a0b2d8f0c0d SHA512 f7375b444291cd0abf5324aa9150e3eb49e110713826e2aa03d8a149d6727c1ff2fe6f6b2e159f3a9e41c628a6d5f3e6ea161050722f58ca0e9ad269a27c052d WHIRLPOOL 7d86baf0ceeb2259fc319d7908f47d2c64f98e490e9bda3930137db5808c9cd0fb2877ac3731bfaaba7ed19a8c014904054b08545642588650b58504ec52e378
 AUX qtcore-4.8.7-fix-socklent-for-musl.patch 3982 SHA256 2d3065b3a372ae03a58ee76a4a24e676abc36a16f5c564b4b25c537d2520700d SHA512 d578fa49270ae8d18ff4de3a15b6f4c485503c1de61e9732e6e55d0bd3db5a0c2e68d37327e500b71a85efe05b187f435d2e4c62f23481c73a9d593803ca345c WHIRLPOOL e95016f372dc7cfff32609b838774a339320073fde9c90aa92b0ee8003bbf740a545cb500518bdd611553016bc8d9f21ea060b97742478105474561d6f3ae3d4
 DIST qt-everywhere-opensource-src-4.8.6.tar.gz 241623667 SHA256 8b14dd91b52862e09b8e6a963507b74bc2580787d171feda197badfa7034032c SHA512 c2d07c3cf9d687cb9b93e337c89df3f0055bd02bc8aa5ecd55d3ffb238b31a4308aeabc3c51a4f94ac76a1b00796f047513d02e427ed93ae8dd99f836fff7692 WHIRLPOOL 473566814a77237dbdd37a47980c1085f6cf39599c4d6b0120959fe80dadf65c4eaafd5f528dd86cea8815562faa204bedfe3b766c2ca4f2d2c99efc21dbca84
 DIST qt-everywhere-opensource-src-4.8.7.tar.gz 241075567 SHA256 e2882295097e47fe089f8ac741a95fef47e0a73a3f3cdf21b56990638f626ea0 SHA512 f9f81a2e7205e1fd05c8d923dc73244f29aa33f951fa6b7c5c8193449328b37084796b9b71ad0c317e4e6fd00017c10ea5d67b1b2032551cde00548522218125 WHIRLPOOL ad8f01172f5bdb3a3a69fe7b03862c4c411bc8d95211053ad66ed1d60a3c0577d073d1075a1e0a80b25d9b2721addda55a2967e6ccf5e194cec8d08770ac5fc2
-EBUILD qtcore-4.8.6-r99.ebuild 2744 SHA256 48613b2e02747629c85ab8a9de38c9585f47337d6253e3a5990f3a94108da115 SHA512 5b8e29f1a560f63387d2f8943af81fb30f146472fe2f1f0194fd4324868dbc470f0f3a4fe25b65aa93f255b60d567534465241e334e416f02405179a6a93c8db WHIRLPOOL cd8ee617fd94e127393b89ea016c386ba047d5065a9cd4df7741c2dbe92facfadfcabc7ad7a3009352e8b5cd57e7bdf9e6217f9f76469ba91cbc0761461cf755
-EBUILD qtcore-4.8.7-r99.ebuild 2724 SHA256 c82643904ec03862580ba70f58e0553e10b08b8f15365075260af47d17df50a8 SHA512 cd0cefab94789bcbb003d5932635865e9f618fab397fc05d1cea6924c2ceecb8b9a5d2500a629bfddb709ebc6093ea4bd4c49bbc36c60dd41cf085bbdf04fc4f WHIRLPOOL fe7f6e4c2931fc20200459ab8c084e69315e8813789adda60e4f570f5a03780bdbf92d4b33ed44dc1f2acc1a57518171b623d3db3786211a1e1719c94a0a9835
-MISC metadata.xml 724 SHA256 a5817aceda69b91e2bd5be332bcb73697da737da1b77b6e50acc8bc61c06c44d SHA512 97a3fc3efe3d2ec69ad3d9b79606a56a5e4722bef617db7f06b68d17e6ac1cd4da3cd4f8495f5f4b3870c0a5423d99300b1d09a11db232beb1862b0353ad2786 WHIRLPOOL 84217bea2b1d55c1614573abd410b3b703c559447c202d4e8266752683ed3d64757892b2928cadfb1e7aba582e08fb34a3b44dd03e34293ffe1c5ded58c138ce
+EBUILD qtcore-4.8.6-r2.ebuild 2806 SHA256 be80c0b1aaaa62e915d9c5c3472d4670a48aad668261bc6ba3d062ee6c7504df SHA512 b486015c9685475000ded203996295215c30667aff62e5d09e394cb565d96246b3ec8d47d78e5d4178d99257429d0efb81ac08ee50283aeb75da65396e322cff WHIRLPOOL 18de319600a5f0e76d3dfa0b7ed2e6d1c77137344d42deb86d31a33275a252a84136effa69d60d648ed7c7f6e4488e5fc8db19e22a61b00513e38e561c78dc79
+EBUILD qtcore-4.8.7-r2.ebuild 2880 SHA256 8bd194a4c096217136a594e0ba24e7a2e1df13a6f485e6e132860a14aec3655b SHA512 f7434e86c037ba3957ec3472841e12b2ddeba6e21dbb776590ed3ac9eab24074fecd822d1cd7b226bd14d5fd4cfe25020eebc830f04438014a410bb5cebd7795 WHIRLPOOL e27ff515b43a2bb29ec24424948b0e53013e52b29f2910378163721b7bb9c4a342165782ff48194b933a894293853e5df9874d28d30f5711f0923bd85b5b99e2
+MISC metadata.xml 923 SHA256 22b0c054608f0f06da6d5e08acca625e153346ef3c0281dd93a89bc3f9efc7e1 SHA512 c3cc5ea943e59fd44ffded076df311a62dd5fb7ff2ab197f6118604a0e26e30f44377e0b8bb3edcddbda19ea52c0a26cf6451625dd17185c511d5d051e3ad915 WHIRLPOOL 7061ff30ae1b083e1328c0080d08631a3e9ffc1986f729f9e1ae269d7ba243345859a87cdb020a3eaabd40c78c9fcaa159adfc53a3729e87ae82bf49d7530f59

diff --git a/dev-qt/qtcore/files/CVE-2013-4549-01-disallow-deep-or-widely-nested-entity-refs.patch b/dev-qt/qtcore/files/CVE-2013-4549-01-disallow-deep-or-widely-nested-entity-refs.patch
deleted file mode 100644
index c472d42..0000000
--- a/dev-qt/qtcore/files/CVE-2013-4549-01-disallow-deep-or-widely-nested-entity-refs.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 512a1ce0698d370c313bb561bbf078935fa0342e Mon Sep 17 00:00:00 2001
-From: Mitch Curtis <mitch.curtis@digia.com>
-Date: Thu, 7 Nov 2013 09:36:29 +0100
-Subject: Disallow deep or widely nested entity references.
-
-Nested references with a depth of 2 or greater will fail. References
-that partially expand to greater than 1024 characters will also fail.
-
-This is a backport of 46a8885ae486e238a39efa5119c2714f328b08e4.
-
-Change-Id: I0c2e1fa13d6ccb5f88641dae2ed3f28bfdeaf609
-Reviewed-by: Richard J. Moore <rich@kde.org>
-Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-
-diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
-index a1777c5..3904632 100644
---- a/src/xml/sax/qxml.cpp
-+++ b/src/xml/sax/qxml.cpp
-@@ -424,6 +424,10 @@ private:
-     int     stringValueLen;
-     QString emptyStr;
- 
-+    // The limit to the amount of times the DTD parsing functions can be called
-+    // for the DTD currently being parsed.
-+    int dtdRecursionLimit;
-+
-     const QString &string();
-     void stringClear();
-     void stringAddC(QChar);
-@@ -492,6 +496,7 @@ private:
-     void unexpectedEof(ParseFunction where, int state);
-     void parseFailed(ParseFunction where, int state);
-     void pushParseState(ParseFunction function, int state);
-+    bool isPartiallyExpandedEntityValueTooLarge(QString *errorMessage);
- 
-     Q_DECLARE_PUBLIC(QXmlSimpleReader)
-     QXmlSimpleReader *q_ptr;
-@@ -2759,6 +2764,7 @@ QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader)
-     useNamespacePrefixes = false;
-     reportWhitespaceCharData = true;
-     reportEntities = false;
-+    dtdRecursionLimit = 2;
- }
- 
- QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate()
-@@ -5018,6 +5024,11 @@ bool QXmlSimpleReaderPrivate::parseDoctype()
-                 }
-                 break;
-             case Mup:
-+                if (dtdRecursionLimit > 0 && parameterEntities.size() > dtdRecursionLimit) {
-+                    reportParseError(QString::fromLatin1(
-+                        "DTD parsing exceeded recursion limit of %1.").arg(dtdRecursionLimit));
-+                    return false;
-+                }
-                 if (!parseMarkupdecl()) {
-                     parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
-                     return false;
-@@ -6627,6 +6638,37 @@ bool QXmlSimpleReaderPrivate::parseChoiceSeq()
-     return false;
- }
- 
-+bool QXmlSimpleReaderPrivate::isPartiallyExpandedEntityValueTooLarge(QString *errorMessage)
-+{
-+    const QString value = string();
-+    QMap<QString, int> referencedEntityCounts;
-+    foreach (QString entityName, entities.keys()) {
-+        for (int i = 0; i < value.size() && i != -1; ) {
-+            i = value.indexOf(entityName, i);
-+            if (i != -1) {
-+                // The entityName we're currently trying to find
-+                // was matched in this string; increase our count.
-+                ++referencedEntityCounts[entityName];
-+                i += entityName.size();
-+            }
-+        }
-+    }
-+
-+    foreach (QString entityName, referencedEntityCounts.keys()) {
-+        const int timesReferenced = referencedEntityCounts[entityName];
-+        const QString entityValue = entities[entityName];
-+        if (entityValue.size() * timesReferenced > 1024) {
-+            if (errorMessage) {
-+                *errorMessage = QString::fromLatin1("The XML entity \"%1\""
-+                    "expands too a string that is too large to process when "
-+                    "referencing \"%2\" %3 times.").arg(entityName).arg(entityName).arg(timesReferenced);
-+            }
-+            return true;
-+        }
-+    }
-+    return false;
-+}
-+
- /*
-   Parse a EntityDecl [70].
- 
-@@ -6721,6 +6763,15 @@ bool QXmlSimpleReaderPrivate::parseEntityDecl()
-         switch (state) {
-             case EValue:
-                 if ( !entityExist(name())) {
-+                    QString errorMessage;
-+                    if (isPartiallyExpandedEntityValueTooLarge(&errorMessage)) {
-+                        // The entity at entityName is entityValue.size() characters
-+                        // long in its unexpanded form, and was mentioned timesReferenced times,
-+                        // resulting in a string that would be greater than 1024 characters.
-+                        reportParseError(errorMessage);
-+                        return false;
-+                    }
-+
-                     entities.insert(name(), string());
-                     if (declHnd) {
-                         if (!declHnd->internalEntityDecl(name(), string())) {
--- 
-1.8.5.2
-

diff --git a/dev-qt/qtcore/files/CVE-2013-4549-02-fully-expand-entities.patch b/dev-qt/qtcore/files/CVE-2013-4549-02-fully-expand-entities.patch
deleted file mode 100644
index 03ef64f..0000000
--- a/dev-qt/qtcore/files/CVE-2013-4549-02-fully-expand-entities.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From cecceb0cdd87482124a73ecf537f3445d68be13e Mon Sep 17 00:00:00 2001
-From: Mitch Curtis <mitch.curtis@digia.com>
-Date: Tue, 12 Nov 2013 13:44:56 +0100
-Subject: Fully expand entities to ensure deep or widely nested ones fail
- parsing
-
-With 512a1ce0698d370c313bb561bbf078935fa0342e, we failed when parsing
-entities whose partially expanded size was greater than 1024
-characters. That was not enough, so now we fully expand all entities.
-
-This is a backport of f1053d94f59f053ce4acad9320df14f1fbe4faac.
-
-Change-Id: I41dd6f4525c63e82fd320a22d19248169627f7e0
-Reviewed-by: Richard J. Moore <rich@kde.org>
-
-diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
-index 3904632..befa801 100644
---- a/src/xml/sax/qxml.cpp
-+++ b/src/xml/sax/qxml.cpp
-@@ -426,7 +426,9 @@ private:
- 
-     // The limit to the amount of times the DTD parsing functions can be called
-     // for the DTD currently being parsed.
--    int dtdRecursionLimit;
-+    static const int dtdRecursionLimit = 2;
-+    // The maximum amount of characters an entity value may contain, after expansion.
-+    static const int entityCharacterLimit = 1024;
- 
-     const QString &string();
-     void stringClear();
-@@ -496,7 +498,7 @@ private:
-     void unexpectedEof(ParseFunction where, int state);
-     void parseFailed(ParseFunction where, int state);
-     void pushParseState(ParseFunction function, int state);
--    bool isPartiallyExpandedEntityValueTooLarge(QString *errorMessage);
-+    bool isExpandedEntityValueTooLarge(QString *errorMessage);
- 
-     Q_DECLARE_PUBLIC(QXmlSimpleReader)
-     QXmlSimpleReader *q_ptr;
-@@ -2764,7 +2766,6 @@ QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader)
-     useNamespacePrefixes = false;
-     reportWhitespaceCharData = true;
-     reportEntities = false;
--    dtdRecursionLimit = 2;
- }
- 
- QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate()
-@@ -6638,30 +6639,43 @@ bool QXmlSimpleReaderPrivate::parseChoiceSeq()
-     return false;
- }
- 
--bool QXmlSimpleReaderPrivate::isPartiallyExpandedEntityValueTooLarge(QString *errorMessage)
-+bool QXmlSimpleReaderPrivate::isExpandedEntityValueTooLarge(QString *errorMessage)
- {
--    const QString value = string();
--    QMap<QString, int> referencedEntityCounts;
--    foreach (QString entityName, entities.keys()) {
--        for (int i = 0; i < value.size() && i != -1; ) {
--            i = value.indexOf(entityName, i);
--            if (i != -1) {
--                // The entityName we're currently trying to find
--                // was matched in this string; increase our count.
--                ++referencedEntityCounts[entityName];
--                i += entityName.size();
-+    QMap<QString, int> literalEntitySizes;
-+    // The entity at (QMap<QString,) referenced the entities at (QMap<QString,) (int>) times.
-+    QMap<QString, QMap<QString, int> > referencesToOtherEntities;
-+    QMap<QString, int> expandedSizes;
-+
-+    // For every entity, check how many times all entity names were referenced in its value.
-+    foreach (QString toSearch, entities.keys()) {
-+        // The amount of characters that weren't entity names, but literals, like 'X'.
-+        QString leftOvers = entities.value(toSearch);
-+        // How many times was entityName referenced by toSearch?
-+        foreach (QString entityName, entities.keys()) {
-+            for (int i = 0; i < leftOvers.size() && i != -1; ) {
-+                i = leftOvers.indexOf(QString::fromLatin1("&%1;").arg(entityName), i);
-+                if (i != -1) {
-+                    leftOvers.remove(i, entityName.size() + 2);
-+                    // The entityName we're currently trying to find was matched in this string; increase our count.
-+                    ++referencesToOtherEntities[toSearch][entityName];
-+                }
-             }
-         }
-+        literalEntitySizes[toSearch] = leftOvers.size();
-     }
- 
--    foreach (QString entityName, referencedEntityCounts.keys()) {
--        const int timesReferenced = referencedEntityCounts[entityName];
--        const QString entityValue = entities[entityName];
--        if (entityValue.size() * timesReferenced > 1024) {
-+    foreach (QString entity, referencesToOtherEntities.keys()) {
-+        expandedSizes[entity] = literalEntitySizes[entity];
-+        foreach (QString referenceTo, referencesToOtherEntities.value(entity).keys()) {
-+            const int references = referencesToOtherEntities.value(entity).value(referenceTo);
-+            // The total size of an entity's value is the expanded size of all of its referenced entities, plus its literal size.
-+            expandedSizes[entity] += expandedSizes[referenceTo] * references + literalEntitySizes[referenceTo] * references;
-+        }
-+
-+        if (expandedSizes[entity] > entityCharacterLimit) {
-             if (errorMessage) {
--                *errorMessage = QString::fromLatin1("The XML entity \"%1\""
--                    "expands too a string that is too large to process when "
--                    "referencing \"%2\" %3 times.").arg(entityName).arg(entityName).arg(timesReferenced);
-+                *errorMessage = QString::fromLatin1("The XML entity \"%1\" expands too a string that is too large to process (%2 characters > %3).");
-+                *errorMessage = (*errorMessage).arg(entity).arg(expandedSizes[entity]).arg(entityCharacterLimit);
-             }
-             return true;
-         }
-@@ -6764,10 +6778,7 @@ bool QXmlSimpleReaderPrivate::parseEntityDecl()
-             case EValue:
-                 if ( !entityExist(name())) {
-                     QString errorMessage;
--                    if (isPartiallyExpandedEntityValueTooLarge(&errorMessage)) {
--                        // The entity at entityName is entityValue.size() characters
--                        // long in its unexpanded form, and was mentioned timesReferenced times,
--                        // resulting in a string that would be greater than 1024 characters.
-+                    if (isExpandedEntityValueTooLarge(&errorMessage)) {
-                         reportParseError(errorMessage);
-                         return false;
-                     }
--- 
-1.8.5.2
-

diff --git a/dev-qt/qtcore/files/qtcore-4.8.5-moc-boost-lexical-cast.patch b/dev-qt/qtcore/files/qtcore-4.8.5-moc-boost-lexical-cast.patch
deleted file mode 100644
index b464c92..0000000
--- a/dev-qt/qtcore/files/qtcore-4.8.5-moc-boost-lexical-cast.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: qt-everywhere-opensource-src-4.8.9999/src/tools/moc/main.cpp
-===================================================================
---- qt-everywhere-opensource-src-4.8.9999.orig/src/tools/moc/main.cpp
-+++ qt-everywhere-opensource-src-4.8.9999/src/tools/moc/main.cpp
-@@ -190,6 +190,7 @@ int runMoc(int _argc, char **_argv)
- 
-     // Workaround a bug while parsing the boost/type_traits/has_operator.hpp header. See QTBUG-22829
-     pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"];
-+    pp.macros["BOOST_LEXICAL_CAST_INCLUDED"];
- 
-     QByteArray filename;
-     QByteArray output;

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
new file mode 100644
index 0000000..91a5526
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-4.8.6-moc-boost-1.60.patch
@@ -0,0 +1,16 @@
+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/metadata.xml b/dev-qt/qtcore/metadata.xml
index 3856b33..34c0121 100644
--- a/dev-qt/qtcore/metadata.xml
+++ b/dev-qt/qtcore/metadata.xml
@@ -11,9 +11,15 @@
 		<flag name="glib">Enable <pkg>dev-libs/glib</pkg> eventloop support</flag>
 		<flag name="qt3support">Enable the Qt3Support libraries for Qt4. Note that
 			this does not mean you can compile pure Qt3 programs with Qt4.</flag>
+		<flag name="systemd">Enable native journald logging support</flag>
 	</use>
 	<upstream>
 		<bugs-to>https://bugreports.qt.io/</bugs-to>
 		<doc>http://doc.qt.io/</doc>
 	</upstream>
+	<slots>
+		<subslots>
+			Must only be used by packages that are known to use private parts of the Qt API.
+		</subslots>
+	</slots>
 </pkgmetadata>

diff --git a/dev-qt/qtcore/qtcore-4.8.6-r99.ebuild b/dev-qt/qtcore/qtcore-4.8.6-r2.ebuild
similarity index 94%
rename from dev-qt/qtcore/qtcore-4.8.6-r99.ebuild
rename to dev-qt/qtcore/qtcore-4.8.6-r2.ebuild
index 1573266..166f9c7 100644
--- a/dev-qt/qtcore/qtcore-4.8.6-r99.ebuild
+++ b/dev-qt/qtcore/qtcore-4.8.6-r2.ebuild
@@ -7,7 +7,7 @@ EAPI=5
 inherit qt4-build-multilib
 
 DESCRIPTION="Cross-platform application development framework"
-KEYWORDS="amd64 arm ~mips ppc x86"
+KEYWORDS="alpha amd64 arm ~arm64 hppa ia64 ~mips ppc ppc64 sparc x86 ~amd64-fbsd ~x86-fbsd"
 IUSE="+glib iconv icu qt3support ssl"
 
 DEPEND="
@@ -29,10 +29,10 @@ MULTILIB_WRAPPED_HEADERS=(
 )
 
 PATCHES=(
-	"${FILESDIR}/${PN}-4.8.5-moc-boost-lexical-cast.patch"
 	"${FILESDIR}/${PN}-4.8.5-honor-ExcludeSocketNotifiers-in-glib-event-loop.patch" # bug 514968
 	"${FILESDIR}/${PN}-4.8.5-qeventdispatcher-recursive.patch" # bug 514968
 	"${FILESDIR}/${PN}-4.8.6-QNAM-corruptions-fix.patch" # bug 548622
+	"${FILESDIR}/${PN}-4.8.6-moc-boost-1.60.patch" # bug 556104
 	"${FILESDIR}/${PN}-4.8.7-fix-socklent-for-musl.patch"
 )
 

diff --git a/dev-qt/qtcore/qtcore-4.8.7-r99.ebuild b/dev-qt/qtcore/qtcore-4.8.7-r2.ebuild
similarity index 88%
rename from dev-qt/qtcore/qtcore-4.8.7-r99.ebuild
rename to dev-qt/qtcore/qtcore-4.8.7-r2.ebuild
index 52c224c..86d5547 100644
--- a/dev-qt/qtcore/qtcore-4.8.7-r99.ebuild
+++ b/dev-qt/qtcore/qtcore-4.8.7-r2.ebuild
@@ -8,17 +8,20 @@ inherit qt4-build-multilib
 DESCRIPTION="Cross-platform application development framework"
 
 if [[ ${QT4_BUILD_TYPE} == release ]]; then
-	KEYWORDS="~amd64 ~arm ~ppc ~x86"
+	KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~amd64-fbsd ~x86-fbsd"
 fi
 
-IUSE="+glib iconv icu qt3support ssl"
+IUSE="+glib iconv icu libressl qt3support ssl"
 
 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}] )
-	ssl? ( >=dev-libs/openssl-1.0.1h-r2:0[${MULTILIB_USEDEP}] )
+	ssl? (
+		!libressl? ( >=dev-libs/openssl-1.0.1h-r2:0[${MULTILIB_USEDEP}] )
+		libressl? ( dev-libs/libressl:=[${MULTILIB_USEDEP}] )
+	)
 "
 RDEPEND="${DEPEND}"
 PDEPEND="
@@ -32,9 +35,9 @@ MULTILIB_WRAPPED_HEADERS=(
 )
 
 PATCHES=(
-	"${FILESDIR}/${PN}-4.8.5-moc-boost-lexical-cast.patch"
 	"${FILESDIR}/${PN}-4.8.5-honor-ExcludeSocketNotifiers-in-glib-event-loop.patch" # bug 514968
 	"${FILESDIR}/${PN}-4.8.5-qeventdispatcher-recursive.patch" # bug 514968
+	"${FILESDIR}/${PN}-4.8.6-moc-boost-1.60.patch" # bug 556104
 	"${FILESDIR}/${PN}-4.8.7-fix-socklent-for-musl.patch"
 )
 


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] proj/musl:master commit in: dev-qt/qtcore/files/, dev-qt/qtcore/
@ 2017-04-24  3:02 Aric Belsito
  0 siblings, 0 replies; 6+ messages in thread
From: Aric Belsito @ 2017-04-24  3:02 UTC (permalink / raw
  To: gentoo-commits

commit:     d9e34eb40544eba511b2cf9da866edf8cb4c27d5
Author:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
AuthorDate: Mon Apr 24 03:01:42 2017 +0000
Commit:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
CommitDate: Mon Apr 24 03:01:42 2017 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=d9e34eb4

dev-qt/qtcore: version bump to 5.7.1-r3

 dev-qt/qtcore/Manifest                         |   4 +
 dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch    | 152 +++++++++++++++
 dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-1.patch | 252 +++++++++++++++++++++++++
 dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-2.patch | 195 +++++++++++++++++++
 dev-qt/qtcore/qtcore-5.7.1-r3.ebuild           |  49 +++++
 5 files changed, 652 insertions(+)

diff --git a/dev-qt/qtcore/Manifest b/dev-qt/qtcore/Manifest
index 060c8e8..91e7a19 100644
--- a/dev-qt/qtcore/Manifest
+++ b/dev-qt/qtcore/Manifest
@@ -5,6 +5,9 @@ AUX qtcore-4.8.6-moc-boost-1.60.patch 884 SHA256 cf7417eb14641c0e4f65148f67cab2a
 AUX qtcore-4.8.7-fix-socklent-for-musl.patch 3982 SHA256 2d3065b3a372ae03a58ee76a4a24e676abc36a16f5c564b4b25c537d2520700d SHA512 d578fa49270ae8d18ff4de3a15b6f4c485503c1de61e9732e6e55d0bd3db5a0c2e68d37327e500b71a85efe05b187f435d2e4c62f23481c73a9d593803ca345c WHIRLPOOL e95016f372dc7cfff32609b838774a339320073fde9c90aa92b0ee8003bbf740a545cb500518bdd611553016bc8d9f21ea060b97742478105474561d6f3ae3d4
 AUX qtcore-5.5.1-musl-iconv.patch 672 SHA256 fcf5db5f11197079725bbd2ce3ef2b6e53db0ed0b73514a11c831605f7ae0226 SHA512 ee32f08044f0f247e901209ef8e72868bf856cf7b4a490ae05d621eba931b9b37d088dd90700cc83929b5331a7452e5daa046b145076a9e7499180919560e4ed WHIRLPOOL e1d6496703ede9db343df8afdef1276cbbd4eabf9cc5929c26cb267b01fd801bdac8847de8040a57fc3cb9533f8ab308f0176bb5389640ac9b73ad0677c5c107
 AUX qtcore-5.6.2-plugins.patch 3264 SHA256 2e0e863830f457d597e608815e92c25e4e0924a7c13c80649547e8a9be6bb420 SHA512 0d50ba6cd94fc29158931e2e09ec21c48780ecfaa75443efd842cce05cc3030f81a02385714b42d5cede3b0cbf8efc24d3c660ac4438cdd428a24bf8a624bb2d WHIRLPOOL 9ea062360162c636f43d7b490a3ee3931496b05001f9f0c99d588494d344f0a7a9d0e989b5695e468ec754e7bc789b2c2961db221701d8adf984efd691ee2a92
+AUX qtcore-5.7.1-qipm.patch 5915 SHA256 a5fb3bee98d797ac5e34bec02bcc1b5b0834fa1092fa6d1e1ea3d490975ae42f SHA512 807c030c2059cddcd159cb537ba2e4be68d6f612f45e1e7b844fc045f661739aea7bc35743735cee364d692d51774e17edced1aac8d444abaa4e4435117a5b3d WHIRLPOOL e13e1a24b750fe7729b1d86214491358937344b7a39c6c2941d372f5ce9077ecc1c320a0be2e5a9c772e1b01d786e55176cdad252c317bc62215c9c7acfe0d6b
+AUX qtcore-5.7.1-qsfpm-1.patch 8922 SHA256 3376b4564d793e0bf3770a8ebcc474a03e7aa49a8a578c136bbcb1fa6e9e136a SHA512 3854fffa1181cebe4683c54d5e774301a8710bf784dcc18367d04d193a7ce76fc6f634096b6986af41c3f5e4432b702873181a8900fd18e7617ea472d23d6d92 WHIRLPOOL 0ae27f2596e8601a4717bf76d06a2c452f4a0f087355766e7ca9483c8959ddd2c0765a6154ee1dde612347fb69ddc28581121c64cfa6f97a3067b1112bdb86c3
+AUX qtcore-5.7.1-qsfpm-2.patch 7812 SHA256 a2bb1a42df644906cacb084e579166e8229c774e2f678b8b523215d4bbffe1e7 SHA512 38b141aa7d30011d71ed9044c69f79b56698320600a64ed3cc37e8dd9d22bb9ec2f33f8348d074552a5046c2855e948e325d5421384cb4c66c0bbd566500174d WHIRLPOOL 3e65f1413ce3b3800d694b731d74026ac5d5f08f9af20b257c2b7424ec954cb1fa28067496b028c3e66680ae88e59d8ccf8c080b049fa05f31162705db1a0898
 DIST qt-everywhere-opensource-src-4.8.6.tar.gz 241623667 SHA256 8b14dd91b52862e09b8e6a963507b74bc2580787d171feda197badfa7034032c SHA512 c2d07c3cf9d687cb9b93e337c89df3f0055bd02bc8aa5ecd55d3ffb238b31a4308aeabc3c51a4f94ac76a1b00796f047513d02e427ed93ae8dd99f836fff7692 WHIRLPOOL 473566814a77237dbdd37a47980c1085f6cf39599c4d6b0120959fe80dadf65c4eaafd5f528dd86cea8815562faa204bedfe3b766c2ca4f2d2c99efc21dbca84
 DIST qt-everywhere-opensource-src-4.8.7.tar.gz 241075567 SHA256 e2882295097e47fe089f8ac741a95fef47e0a73a3f3cdf21b56990638f626ea0 SHA512 f9f81a2e7205e1fd05c8d923dc73244f29aa33f951fa6b7c5c8193449328b37084796b9b71ad0c317e4e6fd00017c10ea5d67b1b2032551cde00548522218125 WHIRLPOOL ad8f01172f5bdb3a3a69fe7b03862c4c411bc8d95211053ad66ed1d60a3c0577d073d1075a1e0a80b25d9b2721addda55a2967e6ccf5e194cec8d08770ac5fc2
 DIST qtbase-opensource-src-5.6.1-1.tar.xz 46788436 SHA256 329678347ec5ebb404225345300a8deb1e7c991322a4c50584be550c69be7c39 SHA512 e9660bee2e0acd91c3232831e4f1a99ad30b82b8ff26850494efec89a525499b721adfb63f7ede586408489d3ebf727b842cd12eab665c58769001454e7f661d WHIRLPOOL e26cf72d9644dbcb08d1269bdaa633be2e24de813deb62a1c77e448b6578f6761769664fc95c4131c342f077c092a777af8fed62ea35e5fdb0f2576d82b3c499
@@ -15,4 +18,5 @@ EBUILD qtcore-4.8.7-r2.ebuild 2873 SHA256 31208511c2f5a6ca50e242f6c5ecd690dce27b
 EBUILD qtcore-5.6.1.ebuild 794 SHA256 1da435d29fa89f6638503bf2049697b39bbfb6e20e8243c2b84604aa51a6a450 SHA512 d36f7ca356e52cf78bdcb9f9e466a4369a6f9a09dc1daa889efe4df2d0c97c80c3aa6571bad6c002a45f9a1ada7ec0147b81967e661695423e68c75314809d5e WHIRLPOOL 8a0be06d6d1205cfad442278637cd9feaff92169a955b6d5d490f29753bdee28dc2d036b7b9955db16d502324a16956d89287b6d7f8f883cc84fb4231c0f2c3e
 EBUILD qtcore-5.6.2-r1.ebuild 828 SHA256 08ad65af7dfc460978f2df70e221f1c57e27ceaf7b2c44eb9782bd90c5825771 SHA512 0ce08466d7764f84f3d1c65d0f3020e62929d4021a83e7b8db1132a6b16458ee364bb74af1842b9f7b047afdba65c344b00bfa4d8a8c7231b078b278f42fc639 WHIRLPOOL 6fa267b5bf378de902c336b06ae2f28c79642ee8c707040dd3fdfea059e246bce634df6c469fa1dbedbef707d44b7e23900375635183496a3e2735a4fd686fee
 EBUILD qtcore-5.7.1-r2.ebuild 876 SHA256 514dc8ff131a6d30ca5380d167a85ab0d21da5af51c2c1af362b3798e93b39f2 SHA512 b19653912ef0eac500e12d1bc1916d2a2409fde5807355859c4b0fd1c28a1093db4d20d8cdde3923435a1e86a9a2d0a9551ba8465d94ae0cfdb74e32079749dc WHIRLPOOL 924ebad6c5759bc10c5fcfac0beb78322108d7a5e18c1f5c3e05308bc195eaa0c4bd67cddaf6616f0f08015a3f203c49f9ca58cd96faf4ad1ead1dc541b9900a
+EBUILD qtcore-5.7.1-r3.ebuild 945 SHA256 b3b75ec95bcd5baab735dd876db7419a649dcf7fc9ca04bfa4aad96af60d3ad2 SHA512 4d9c85f573551a9debc023f182be716f5083436ecf48fb612cb292d70de7699741f03c87ed18cd7fbbb2ed9b3dc7e9778249343f83424d5d27fbbfb211a4a1c3 WHIRLPOOL 4ec369240197ed2b72455827a808611867667a1dd03dfa1b613ce6104bd5b166238da861a32f3cc95073f319325299b5e56593a1ee69abfd657032162bf4cf22
 MISC metadata.xml 923 SHA256 22b0c054608f0f06da6d5e08acca625e153346ef3c0281dd93a89bc3f9efc7e1 SHA512 c3cc5ea943e59fd44ffded076df311a62dd5fb7ff2ab197f6118604a0e26e30f44377e0b8bb3edcddbda19ea52c0a26cf6451625dd17185c511d5d051e3ad915 WHIRLPOOL 7061ff30ae1b083e1328c0080d08631a3e9ffc1986f729f9e1ae269d7ba243345859a87cdb020a3eaabd40c78c9fcaa159adfc53a3729e87ae82bf49d7530f59

diff --git a/dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch b/dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch
new file mode 100644
index 0000000..abea145
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch
@@ -0,0 +1,152 @@
+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
new file mode 100644
index 0000000..9edbe18
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-1.patch
@@ -0,0 +1,252 @@
+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
new file mode 100644
index 0000000..9736496
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-2.patch
@@ -0,0 +1,195 @@
+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/qtcore-5.7.1-r3.ebuild b/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild
new file mode 100644
index 0000000..8d49771
--- /dev/null
+++ b/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild
@@ -0,0 +1,49 @@
+# 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 ~arm64 ~hppa ~ppc ~ppc64 ~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
+}


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] proj/musl:master commit in: dev-qt/qtcore/files/, dev-qt/qtcore/
@ 2017-11-29  6:33 Aric Belsito
  0 siblings, 0 replies; 6+ messages in thread
From: Aric Belsito @ 2017-11-29  6:33 UTC (permalink / raw
  To: gentoo-commits

commit:     971f92f4f40d8ddde976457ad18eb47cf608b2d4
Author:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
AuthorDate: Wed Nov 29 06:32:35 2017 +0000
Commit:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
CommitDate: Wed Nov 29 06:32:35 2017 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=971f92f4

dev-qt/qtcore: version bump to 5.9.2/5.9.3

 dev-qt/qtcore/Manifest                            |  6 +-
 dev-qt/qtcore/files/qtcore-5.9.3-avx.patch        | 69 ++++++++++++++++++++++
 dev-qt/qtcore/files/qtcore-5.9.3-musl-iconv.patch | 12 ++++
 dev-qt/qtcore/qtcore-4.8.7-r3.ebuild              |  2 +-
 dev-qt/qtcore/qtcore-5.7.1-r3.ebuild              |  2 +-
 dev-qt/qtcore/qtcore-5.9.2.ebuild                 | 68 ++++++++++++++++++++++
 dev-qt/qtcore/qtcore-5.9.3.ebuild                 | 71 +++++++++++++++++++++++
 7 files changed, 226 insertions(+), 4 deletions(-)

diff --git a/dev-qt/qtcore/Manifest b/dev-qt/qtcore/Manifest
index 529c4fa..2967a23 100644
--- a/dev-qt/qtcore/Manifest
+++ b/dev-qt/qtcore/Manifest
@@ -1,2 +1,4 @@
-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 SHA256 edcdf549d94d98aff08e201dcb3ca25bc3628a37b1309e320d5f556b6b66557e SHA512 0506a3a856f76e5ba182e3382a515282b6096f3900fbdc14cd5aec425105ab61922e0ada0361234387335ceb80b3c69e39cd34d75476c2946c4371e7b8c0827f WHIRLPOOL de5ff1380b3fd9cbcca741d212ac516e3f8a31366219605730cf5525a04e4efc9965a9b3cf8e99f50a2912bc7add83f61e7f90a85e176ad2830e4c1422b5d682
+DIST qt-everywhere-opensource-src-4.8.7.tar.gz 241075567 BLAKE2B 6e9b8870692c36e894dc401b65fa38961cf7d033cd712770c273fd45b3221720648087c53787eae7d455c417d64e09f716da48377837fb5f2b52b901d06b1cf3 SHA512 f9f81a2e7205e1fd05c8d923dc73244f29aa33f951fa6b7c5c8193449328b37084796b9b71ad0c317e4e6fd00017c10ea5d67b1b2032551cde00548522218125
+DIST qtbase-opensource-src-5.7.1.tar.xz 44992616 BLAKE2B d845ff8316f6f91089e23b74c025ad8e6160eb7ba75017cba34c2ad2f7b475fc4e36d337b945935bc2850bd140d743b9a5e3d23399b6d3151b85109da9f56ba8 SHA512 0506a3a856f76e5ba182e3382a515282b6096f3900fbdc14cd5aec425105ab61922e0ada0361234387335ceb80b3c69e39cd34d75476c2946c4371e7b8c0827f
+DIST qtbase-opensource-src-5.9.2.tar.xz 45148744 BLAKE2B 311f9fd5bea4b59988d90fad55bbaf46cbb5a77ed705f2f14d6d65ce1cd6e8c950fbcb6b6f06aad4aa3abb58892e9665cdab0a4716ac3a7f9c651dac239f04b6 SHA512 a2f965871645256f3d019f71f3febb875455a29d03fccc7a3371ddfeb193b0af12394e779df05adf69fd10fe7b0d966f3915a24528ec7eb3bc36c2db6af2b6e7
+DIST qtbase-opensource-src-5.9.3.tar.xz 45160080 BLAKE2B 234eb778c90b5867ae53129da010968563d3fa66fe87e3ad50d2d4e968ecbf41812270a66c24fce27b318a7c6b5be90e518ee1b6bb14fb11985f2269a708899c SHA512 256ffb8760e94c0f87790ed35e210d0c9613e14314ff442dd763cc93fbd5caa6c11c95f5d44b12a7687fb93c9f857878132cf6d76e5933f647ca7beb54b18c7c

diff --git a/dev-qt/qtcore/files/qtcore-5.9.3-avx.patch b/dev-qt/qtcore/files/qtcore-5.9.3-avx.patch
new file mode 100644
index 0000000..be18433
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-5.9.3-avx.patch
@@ -0,0 +1,69 @@
+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
new file mode 100644
index 0000000..b738f73
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-5.9.3-musl-iconv.patch
@@ -0,0 +1,12 @@
+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/qtcore-4.8.7-r3.ebuild b/dev-qt/qtcore/qtcore-4.8.7-r3.ebuild
index 46a4ce6..0c956c2 100644
--- a/dev-qt/qtcore/qtcore-4.8.7-r3.ebuild
+++ b/dev-qt/qtcore/qtcore-4.8.7-r3.ebuild
@@ -7,7 +7,7 @@ inherit qt4-build-multilib
 DESCRIPTION="Cross-platform application development framework"
 
 if [[ ${QT4_BUILD_TYPE} == release ]]; then
-	KEYWORDS="amd64 arm ~mips ppc x86"
+	KEYWORDS="alpha amd64 ~arm ~arm64 ~hppa ia64 ~mips ppc ppc64 sparc x86 ~amd64-fbsd ~x86-fbsd"
 fi
 
 IUSE="+glib iconv icu libressl qt3support ssl"

diff --git a/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild b/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild
index c4f32fd..a12aacd 100644
--- a/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild
+++ b/dev-qt/qtcore/qtcore-5.7.1-r3.ebuild
@@ -8,7 +8,7 @@ inherit qt5-build
 DESCRIPTION="Cross-platform application development framework"
 
 if [[ ${QT5_BUILD_TYPE} == release ]]; then
-	KEYWORDS="amd64 arm ~mips ppc x86"
+	KEYWORDS="amd64 arm ~arm64 ~hppa ppc ppc64 x86"
 fi
 
 IUSE="icu systemd"

diff --git a/dev-qt/qtcore/qtcore-5.9.2.ebuild b/dev-qt/qtcore/qtcore-5.9.2.ebuild
new file mode 100644
index 0000000..bd36eff
--- /dev/null
+++ b/dev-qt/qtcore/qtcore-5.9.2.ebuild
@@ -0,0 +1,68 @@
+# 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 ~arm64 ~hppa ~ppc ~ppc64 ~x86"
+fi
+
+IUSE="icu systemd"
+
+DEPEND="
+	dev-libs/double-conversion:=
+	dev-libs/glib:2
+	dev-libs/libpcre2[pcre16,unicode]
+	sys-libs/zlib
+	icu? ( dev-libs/icu:= )
+	!icu? ( virtual/libiconv )
+	systemd? ( sys-apps/systemd:= )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=( "${FILESDIR}/${PN}-5.9.3-musl-iconv.patch" )
+
+QT5_TARGET_SUBDIRS=(
+	src/tools/bootstrap
+	src/tools/moc
+	src/tools/rcc
+	src/tools/qfloat16-tables
+	src/corelib
+	src/tools/qlalr
+	doc
+)
+
+src_configure() {
+	local myconf=(
+		$(qt_use icu)
+		$(qt_use !icu iconv)
+		$(qt_use systemd journald)
+	)
+	qt5-build_src_configure
+}
+
+src_install() {
+	qt5-build_src_install
+
+	local flags=(
+		ALSA CUPS DBUS EGL EGLFS EGL_X11 EVDEV FONTCONFIG FREETYPE
+		HARFBUZZ IMAGEFORMAT_JPEG IMAGEFORMAT_PNG LIBPROXY MITSHM
+		OPENGL OPENSSL OPENVG PULSEAUDIO SHAPE SSL TSLIB XCURSOR
+		XFIXES XKB XRANDR XRENDER XSYNC ZLIB
+	)
+
+	for flag in ${flags[@]}; do
+		cat >> "${D%/}"/${QT5_HEADERDIR}/QtCore/qconfig.h <<- _EOF_ || die
+
+			#if defined(QT_NO_${flag}) && defined(QT_${flag})
+			# undef QT_NO_${flag}
+			#elif !defined(QT_NO_${flag}) && !defined(QT_${flag})
+			# define QT_NO_${flag}
+			#endif
+		_EOF_
+	done
+}

diff --git a/dev-qt/qtcore/qtcore-5.9.3.ebuild b/dev-qt/qtcore/qtcore-5.9.3.ebuild
new file mode 100644
index 0000000..7c0da68
--- /dev/null
+++ b/dev-qt/qtcore/qtcore-5.9.3.ebuild
@@ -0,0 +1,71 @@
+# 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 ~arm64 ~hppa ~ppc ~ppc64 ~x86"
+fi
+
+IUSE="icu systemd"
+
+DEPEND="
+	dev-libs/double-conversion:=
+	dev-libs/glib:2
+	dev-libs/libpcre2[pcre16,unicode]
+	sys-libs/zlib
+	icu? ( dev-libs/icu:= )
+	!icu? ( virtual/libiconv )
+	systemd? ( sys-apps/systemd:= )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+	"${FILESDIR}/${P}-avx.patch"
+	"${FILESDIR}/${PN}-5.9.3-musl-iconv.patch"
+)
+
+QT5_TARGET_SUBDIRS=(
+	src/tools/bootstrap
+	src/tools/moc
+	src/tools/rcc
+	src/tools/qfloat16-tables
+	src/corelib
+	src/tools/qlalr
+	doc
+)
+
+src_configure() {
+	local myconf=(
+		$(qt_use icu)
+		$(qt_use !icu iconv)
+		$(qt_use systemd journald)
+	)
+	qt5-build_src_configure
+}
+
+src_install() {
+	qt5-build_src_install
+
+	local flags=(
+		ALSA CUPS DBUS EGL EGLFS EGL_X11 EVDEV FONTCONFIG FREETYPE
+		HARFBUZZ IMAGEFORMAT_JPEG IMAGEFORMAT_PNG LIBPROXY MITSHM
+		OPENGL OPENSSL OPENVG PULSEAUDIO SHAPE SSL TSLIB XCURSOR
+		XFIXES XKB XRANDR XRENDER XSYNC ZLIB
+	)
+
+	for flag in ${flags[@]}; do
+		cat >> "${D%/}"/${QT5_HEADERDIR}/QtCore/qconfig.h <<- _EOF_ || die
+
+			#if defined(QT_NO_${flag}) && defined(QT_${flag})
+			# undef QT_NO_${flag}
+			#elif !defined(QT_NO_${flag}) && !defined(QT_${flag})
+			# define QT_NO_${flag}
+			#endif
+		_EOF_
+	done
+}


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] proj/musl:master commit in: dev-qt/qtcore/files/, dev-qt/qtcore/
@ 2017-12-10 20:24 Anthony G. Basile
  0 siblings, 0 replies; 6+ messages in thread
From: Anthony G. Basile @ 2017-12-10 20:24 UTC (permalink / raw
  To: gentoo-commits

commit:     52e6d5e76ec6bf7fc83f63497ca22af990bbd0bc
Author:     Bjorn Pagen <bjornpagen <AT> gmail <DOT> com>
AuthorDate: Sun Dec 10 17:23:31 2017 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Sun Dec 10 20:23:35 2017 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=52e6d5e7

dev-qt/qtcore: added use flags "libcxx" and "libcxxabi" to qtcore

Signed-off-by: Anthony G. Basile <blueness <AT> gentoo.org>

 dev-qt/qtcore/Manifest                           |  8 ++++----
 dev-qt/qtcore/files/qtcore-clang-libc++abi.patch | 12 ++++++++++++
 dev-qt/qtcore/qtcore-5.9.3.ebuild                | 12 +++++++++++-
 3 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/dev-qt/qtcore/Manifest b/dev-qt/qtcore/Manifest
index 2967a23..99146f9 100644
--- a/dev-qt/qtcore/Manifest
+++ b/dev-qt/qtcore/Manifest
@@ -1,4 +1,4 @@
-DIST qt-everywhere-opensource-src-4.8.7.tar.gz 241075567 BLAKE2B 6e9b8870692c36e894dc401b65fa38961cf7d033cd712770c273fd45b3221720648087c53787eae7d455c417d64e09f716da48377837fb5f2b52b901d06b1cf3 SHA512 f9f81a2e7205e1fd05c8d923dc73244f29aa33f951fa6b7c5c8193449328b37084796b9b71ad0c317e4e6fd00017c10ea5d67b1b2032551cde00548522218125
-DIST qtbase-opensource-src-5.7.1.tar.xz 44992616 BLAKE2B d845ff8316f6f91089e23b74c025ad8e6160eb7ba75017cba34c2ad2f7b475fc4e36d337b945935bc2850bd140d743b9a5e3d23399b6d3151b85109da9f56ba8 SHA512 0506a3a856f76e5ba182e3382a515282b6096f3900fbdc14cd5aec425105ab61922e0ada0361234387335ceb80b3c69e39cd34d75476c2946c4371e7b8c0827f
-DIST qtbase-opensource-src-5.9.2.tar.xz 45148744 BLAKE2B 311f9fd5bea4b59988d90fad55bbaf46cbb5a77ed705f2f14d6d65ce1cd6e8c950fbcb6b6f06aad4aa3abb58892e9665cdab0a4716ac3a7f9c651dac239f04b6 SHA512 a2f965871645256f3d019f71f3febb875455a29d03fccc7a3371ddfeb193b0af12394e779df05adf69fd10fe7b0d966f3915a24528ec7eb3bc36c2db6af2b6e7
-DIST qtbase-opensource-src-5.9.3.tar.xz 45160080 BLAKE2B 234eb778c90b5867ae53129da010968563d3fa66fe87e3ad50d2d4e968ecbf41812270a66c24fce27b318a7c6b5be90e518ee1b6bb14fb11985f2269a708899c SHA512 256ffb8760e94c0f87790ed35e210d0c9613e14314ff442dd763cc93fbd5caa6c11c95f5d44b12a7687fb93c9f857878132cf6d76e5933f647ca7beb54b18c7c
+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 SHA256 edcdf549d94d98aff08e201dcb3ca25bc3628a37b1309e320d5f556b6b66557e SHA512 0506a3a856f76e5ba182e3382a515282b6096f3900fbdc14cd5aec425105ab61922e0ada0361234387335ceb80b3c69e39cd34d75476c2946c4371e7b8c0827f WHIRLPOOL de5ff1380b3fd9cbcca741d212ac516e3f8a31366219605730cf5525a04e4efc9965a9b3cf8e99f50a2912bc7add83f61e7f90a85e176ad2830e4c1422b5d682
+DIST qtbase-opensource-src-5.9.2.tar.xz 45148744 SHA256 7fe2bb468955f633c71b3ddd3c269e68a2c4137a4e5b8dd12dcdb34cbc6d609b SHA512 a2f965871645256f3d019f71f3febb875455a29d03fccc7a3371ddfeb193b0af12394e779df05adf69fd10fe7b0d966f3915a24528ec7eb3bc36c2db6af2b6e7 WHIRLPOOL aed0b8aac590fad17b4f9067b46097e81d9991307b296428a9592d66a7c11967ee3e9a50b1d05afdeb7503470e658b016ec5af5c71e71059bd4c0d391b845f95
+DIST qtbase-opensource-src-5.9.3.tar.xz 45160080 SHA256 9e7c44005e7691dc7c85165bd4510282c47f0163521f4973eab71dbdb39a9982 SHA512 256ffb8760e94c0f87790ed35e210d0c9613e14314ff442dd763cc93fbd5caa6c11c95f5d44b12a7687fb93c9f857878132cf6d76e5933f647ca7beb54b18c7c WHIRLPOOL 08ee846bcc99fe1af47febc8436c5c6772cb1dbb096fd1cd7126e708efbf53251ddff66f1d6ea2ac9091e75f38ce784d209c3c94130e7c48b9adedd01a59b7ed

diff --git a/dev-qt/qtcore/files/qtcore-clang-libc++abi.patch b/dev-qt/qtcore/files/qtcore-clang-libc++abi.patch
new file mode 100644
index 0000000..832f08b
--- /dev/null
+++ b/dev-qt/qtcore/files/qtcore-clang-libc++abi.patch
@@ -0,0 +1,12 @@
+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/qtcore-5.9.3.ebuild b/dev-qt/qtcore/qtcore-5.9.3.ebuild
index 7c0da68..925398f 100644
--- a/dev-qt/qtcore/qtcore-5.9.3.ebuild
+++ b/dev-qt/qtcore/qtcore-5.9.3.ebuild
@@ -11,7 +11,7 @@ if [[ ${QT5_BUILD_TYPE} == release ]]; then
 	KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~x86"
 fi
 
-IUSE="icu systemd"
+IUSE="icu libcxx libcxxabi systemd"
 
 DEPEND="
 	dev-libs/double-conversion:=
@@ -21,6 +21,11 @@ DEPEND="
 	icu? ( dev-libs/icu:= )
 	!icu? ( virtual/libiconv )
 	systemd? ( sys-apps/systemd:= )
+	libcxx? (
+		sys-devel/clang:=
+		sys-libs/libcxx:=
+		libcxxabi? ( sys-libs/libcxxabi:= )
+	)
 "
 RDEPEND="${DEPEND}"
 
@@ -40,10 +45,15 @@ QT5_TARGET_SUBDIRS=(
 )
 
 src_configure() {
+	if use libcxxabi; then
+		eapply "${FILESDIR}/${PN}-clang-libc++abi.patch"
+	fi
+
 	local myconf=(
 		$(qt_use icu)
 		$(qt_use !icu iconv)
 		$(qt_use systemd journald)
+		$(usex libcxx "-platform linux-clang-libc++")
 	)
 	qt5-build_src_configure
 }


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] proj/musl:master commit in: dev-qt/qtcore/files/, dev-qt/qtcore/
@ 2018-05-14 16:22 Aric Belsito
  0 siblings, 0 replies; 6+ messages in thread
From: Aric Belsito @ 2018-05-14 16:22 UTC (permalink / raw
  To: gentoo-commits

commit:     36ad4ec6dc30a2cd5dd45bcb931233ca6d7f8c8a
Author:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
AuthorDate: Mon May 14 16:21:24 2018 +0000
Commit:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
CommitDate: Mon May 14 16:21:24 2018 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=36ad4ec6

dev-qt/qtcore: remove 5.7.1-r3

 dev-qt/qtcore/Manifest                             |   1 -
 .../files/qtcore-4.8.6-QNAM-corruptions-fix.patch  | 431 ---------------------
 .../qtcore/files/qtcore-4.8.6-moc-boost-1.60.patch |  16 -
 dev-qt/qtcore/files/qtcore-5.5.1-musl-iconv.patch  |  12 -
 dev-qt/qtcore/files/qtcore-5.6.2-plugins.patch     |  81 ----
 dev-qt/qtcore/files/qtcore-5.7.1-qipm.patch        | 152 --------
 dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-1.patch     | 252 ------------
 dev-qt/qtcore/files/qtcore-5.7.1-qsfpm-2.patch     | 195 ----------
 dev-qt/qtcore/files/qtcore-5.9.3-avx.patch         |  69 ----
 dev-qt/qtcore/files/qtcore-5.9.3-musl-iconv.patch  |  12 -
 dev-qt/qtcore/files/qtcore-clang-libc++abi.patch   |  12 -
 dev-qt/qtcore/metadata.xml                         |   2 +-
 ...core-4.8.7-r3.ebuild => qtcore-4.8.7-r4.ebuild} |   4 +-
 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 9eb3023..0dfe1cd 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 1d83caa..0000000
--- 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 91a5526..0000000
--- 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 fe11d1d..0000000
--- 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 d969869..0000000
--- 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 abea145..0000000
--- 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 9edbe18..0000000
--- 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 9736496..0000000
--- 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 be18433..0000000
--- 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 b738f73..0000000
--- 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 832f08b..0000000
--- 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 34c0121..668f6ab 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
similarity index 96%
rename from dev-qt/qtcore/qtcore-4.8.7-r3.ebuild
rename to dev-qt/qtcore/qtcore-4.8.7-r4.ebuild
index c590fe9..b537661 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 b8f760e..0000000
--- 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
-}


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-05-14 16:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-09 19:49 [gentoo-commits] proj/musl:master commit in: dev-qt/qtcore/files/, dev-qt/qtcore/ Aric Belsito
  -- strict thread matches above, loose matches on Subject: below --
2018-05-14 16:22 Aric Belsito
2017-12-10 20:24 Anthony G. Basile
2017-11-29  6:33 Aric Belsito
2017-04-24  3:02 Aric Belsito
2015-07-04 22:45 Anthony G. Basile

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox