* [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