Compare commits
26 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
9219112d74 | ||
|
edeff1b640 | ||
|
8d54bf0fcb | ||
|
8723a0d67a | ||
|
b30ae9f982 | ||
|
01c7f9ab08 | ||
|
c3879d9ba5 | ||
|
2e047ecd6a | ||
|
b6e73de5ff | ||
|
b72517215c | ||
|
0a934e53da | ||
|
509b9e5fb9 | ||
|
4caf8c0fc2 | ||
|
e49be6fa4d | ||
|
25c3a28907 | ||
|
889d9cbd71 | ||
|
01f6a19d1a | ||
|
d218a6e292 | ||
|
c097bae150 | ||
|
b4a0c6ebbe | ||
|
04661b7de7 | ||
|
f1a8d41bb2 | ||
|
73aff94c60 | ||
|
9f91c6fd2e | ||
|
1c75053c8f | ||
|
21748c29f1 |
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,6 +1 @@
|
|||||||
/qtbase-everywhere-src-5.12.1.tar.xz
|
/qtbase-opensource-src-5.6.2.tar.xz
|
||||||
/qtbase-everywhere-src-5.12.3.tar.xz
|
|
||||||
/qtbase-everywhere-src-5.12.4.tar.xz
|
|
||||||
/qtbase-everywhere-src-5.12.5.tar.xz
|
|
||||||
/qtbase-everywhere-src-5.13.2.tar.xz
|
|
||||||
/qtbase-everywhere-src-5.14.2.tar.xz
|
|
||||||
|
@ -1,109 +0,0 @@
|
|||||||
From 276fa8383a7535765be7182883ef4aade17ce013 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
|
||||||
Date: Thu, 2 Apr 2020 12:08:41 -0300
|
|
||||||
Subject: [PATCH 44/49] QLibrary: fix deadlock caused by fix to QTBUG-39642
|
|
||||||
|
|
||||||
Commit ae6f73e8566fa76470937aca737141183929a5ec inserted a mutex around
|
|
||||||
the entire load_sys(). We had reasoed that deadlocks would only occur if
|
|
||||||
the object creation in instance() recursed into its own instance(),
|
|
||||||
which was already a bug. But we had forgotten that dlopen()/
|
|
||||||
LoadLibrary() executes initialization code from the module being loaded,
|
|
||||||
which could cause a recursion back into the same QPluginLoader or
|
|
||||||
QLibrary object. This recursion is benign because the module *is* loaded
|
|
||||||
and dlopen()/LoadLibrary() returns the same handle.
|
|
||||||
|
|
||||||
[ChangeLog][QtCore][QLibrary and QPluginLoader] Fixed a deadlock that
|
|
||||||
would happen if the plugin or library being loaded has load-time
|
|
||||||
initialization code (C++ global variables) that recursed back into the
|
|
||||||
same QLibrary or QPluginLoader object.
|
|
||||||
|
|
||||||
PS: QLibraryPrivate::loadPlugin() updates pluginState outside a mutex
|
|
||||||
lock, so pluginState should be made an atomic variable. Once that is
|
|
||||||
done, we'll only need locking the mutex to update errorString (no
|
|
||||||
locking before loading).
|
|
||||||
|
|
||||||
Fixes: QTBUG-83207
|
|
||||||
Task-number: QTBUG-39642
|
|
||||||
Change-Id: Ibdc95e9af7bd456a94ecfffd160209304e5ab2eb
|
|
||||||
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
|
||||||
Reviewed-by: David Faure <david.faure@kdab.com>
|
|
||||||
---
|
|
||||||
src/corelib/plugin/qlibrary.cpp | 2 --
|
|
||||||
src/corelib/plugin/qlibrary_unix.cpp | 4 ++++
|
|
||||||
src/corelib/plugin/qlibrary_win.cpp | 3 +++
|
|
||||||
3 files changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
|
|
||||||
index ddb053c26f..be9d92b204 100644
|
|
||||||
--- a/src/corelib/plugin/qlibrary.cpp
|
|
||||||
+++ b/src/corelib/plugin/qlibrary.cpp
|
|
||||||
@@ -576,9 +576,7 @@ bool QLibraryPrivate::load()
|
|
||||||
|
|
||||||
Q_TRACE(QLibraryPrivate_load_entry, fileName);
|
|
||||||
|
|
||||||
- mutex.lock();
|
|
||||||
bool ret = load_sys();
|
|
||||||
- mutex.unlock();
|
|
||||||
if (qt_debug_component()) {
|
|
||||||
if (ret) {
|
|
||||||
qDebug() << "loaded library" << fileName;
|
|
||||||
diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp
|
|
||||||
index 017aa97b66..a5c72f81d9 100644
|
|
||||||
--- a/src/corelib/plugin/qlibrary_unix.cpp
|
|
||||||
+++ b/src/corelib/plugin/qlibrary_unix.cpp
|
|
||||||
@@ -123,6 +123,7 @@ QStringList QLibraryPrivate::prefixes_sys()
|
|
||||||
|
|
||||||
bool QLibraryPrivate::load_sys()
|
|
||||||
{
|
|
||||||
+ QMutexLocker locker(&mutex);
|
|
||||||
QString attempt;
|
|
||||||
QFileSystemEntry fsEntry(fileName);
|
|
||||||
|
|
||||||
@@ -213,6 +214,7 @@ bool QLibraryPrivate::load_sys()
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+ locker.unlock();
|
|
||||||
bool retry = true;
|
|
||||||
Handle hnd = nullptr;
|
|
||||||
for (int prefix = 0; retry && !hnd && prefix < prefixes.size(); prefix++) {
|
|
||||||
@@ -273,6 +275,8 @@ bool QLibraryPrivate::load_sys()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
+
|
|
||||||
+ locker.relock();
|
|
||||||
if (!hnd) {
|
|
||||||
errorString = QLibrary::tr("Cannot load library %1: %2").arg(fileName, qdlerror());
|
|
||||||
}
|
|
||||||
diff --git a/src/corelib/plugin/qlibrary_win.cpp b/src/corelib/plugin/qlibrary_win.cpp
|
|
||||||
index 000bf76276..ef58724be8 100644
|
|
||||||
--- a/src/corelib/plugin/qlibrary_win.cpp
|
|
||||||
+++ b/src/corelib/plugin/qlibrary_win.cpp
|
|
||||||
@@ -78,6 +78,7 @@ bool QLibraryPrivate::load_sys()
|
|
||||||
// fileName
|
|
||||||
//
|
|
||||||
// NB If it's a plugin we do not ever try the ".dll" extension
|
|
||||||
+ QMutexLocker locker(&mutex);
|
|
||||||
QStringList attempts;
|
|
||||||
|
|
||||||
if (pluginState != IsAPlugin)
|
|
||||||
@@ -95,6 +96,7 @@ bool QLibraryPrivate::load_sys()
|
|
||||||
attempts.prepend(QDir::rootPath() + fileName);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+ locker.unlock();
|
|
||||||
Handle hnd = nullptr;
|
|
||||||
for (const QString &attempt : qAsConst(attempts)) {
|
|
||||||
#ifndef Q_OS_WINRT
|
|
||||||
@@ -115,6 +117,7 @@ bool QLibraryPrivate::load_sys()
|
|
||||||
#ifndef Q_OS_WINRT
|
|
||||||
SetErrorMode(oldmode);
|
|
||||||
#endif
|
|
||||||
+ locker.relock();
|
|
||||||
if (!hnd) {
|
|
||||||
errorString = QLibrary::tr("Cannot load library %1: %2").arg(
|
|
||||||
QDir::toNativeSeparators(fileName), qt_error_string());
|
|
||||||
--
|
|
||||||
2.25.2
|
|
||||||
|
|
35
macros.qt5
Normal file
35
macros.qt5
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
%_qt5 @@NAME@@
|
||||||
|
%_qt5_epoch @@EPOCH@@
|
||||||
|
%_qt5_version @@VERSION@@
|
||||||
|
%_qt5_evr @@EVR@@
|
||||||
|
%_qt5_prefix %{_libdir}/qt5
|
||||||
|
%_qt5_archdatadir %{_qt5_prefix}
|
||||||
|
%_qt5_bindir %{_qt5_prefix}/bin
|
||||||
|
%_qt5_datadir %{_datadir}/qt5
|
||||||
|
%_qt5_docdir %{_docdir}/qt5
|
||||||
|
%_qt5_examplesdir %{_qt5_prefix}/examples
|
||||||
|
%_qt5_headerdir %{_includedir}/qt5
|
||||||
|
%_qt5_importdir %{_qt5_archdatadir}/imports
|
||||||
|
%_qt5_libdir %{_libdir}
|
||||||
|
%_qt5_libexecdir %{_qt5_archdatadir}/libexec
|
||||||
|
%_qt5_plugindir %{_qt5_archdatadir}/plugins
|
||||||
|
%_qt5_qmake %{_qt5_bindir}/qmake
|
||||||
|
%_qt5_settingsdir %{_sysconfdir}/xdg
|
||||||
|
%_qt5_sysconfdir %{_qt5_settingsdir}
|
||||||
|
%_qt5_translationdir %{_datadir}/qt5/translations
|
||||||
|
|
||||||
|
%_qt5_cflags %{nil}@@QT5_CFLAGS@@
|
||||||
|
%_qt5_cxxflags %{nil}@@QT5_CXXFLAGS@@
|
||||||
|
%_qt5_ldflags %{nil}%{?__global_ldflags} @@QT5_RPM_LD_FLAGS@@
|
||||||
|
%_qt5_optflags %{optflags} @@QT5_RPM_OPT_FLAGS@@
|
||||||
|
|
||||||
|
%_qt5_qmake_flags \\\
|
||||||
|
QMAKE_CFLAGS_DEBUG="${CFLAGS:-%{_qt5_optflags} %{?_qt5_cflags}}" \\\
|
||||||
|
QMAKE_CFLAGS_RELEASE="${CFLAGS:-%{_qt5_optflags} %{?_qt5_cflags}}" \\\
|
||||||
|
QMAKE_CXXFLAGS_DEBUG="${CXXFLAGS:-%{_qt5_optflags} %{?_qt5_cxxflags}}" \\\
|
||||||
|
QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS:-%{_qt5_optflags} %{?_qt5_cxxflags}}" \\\
|
||||||
|
QMAKE_LFLAGS_DEBUG="${LDFLAGS:-%{_qt5_ldflags}}" \\\
|
||||||
|
QMAKE_LFLAGS_RELEASE="${LDFLAGS:-%{_qt5_ldflags}}" \\\
|
||||||
|
QMAKE_STRIP=
|
||||||
|
|
||||||
|
%qmake_qt5 %{_qt5_qmake} %{?_qt5_qmake_flags}
|
@ -1,4 +0,0 @@
|
|||||||
%_qt5 @@NAME@@
|
|
||||||
%_qt5_epoch @@EPOCH@@
|
|
||||||
%_qt5_version @@VERSION@@
|
|
||||||
%_qt5_evr @@EVR@@
|
|
@ -1,29 +0,0 @@
|
|||||||
diff -up qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json.firebird qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json
|
|
||||||
--- qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json.firebird 2019-01-28 11:11:52.000000000 -0600
|
|
||||||
+++ qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json 2019-02-03 13:41:27.392305128 -0600
|
|
||||||
@@ -49,10 +49,11 @@
|
|
||||||
"ibase": {
|
|
||||||
"label": "InterBase",
|
|
||||||
"test": {},
|
|
||||||
- "headers": "ibase.h",
|
|
||||||
+ "headers": "firebird/ibase.h",
|
|
||||||
"sources": [
|
|
||||||
{ "libs": "-lgds32_ms", "condition": "config.win32" },
|
|
||||||
- { "libs": "-lgds", "condition": "!config.win32" }
|
|
||||||
+ { "libs": "-lgds", "condition": "!config.win32" },
|
|
||||||
+ { "libs": "-lfbclient", "condition": "!config.win32" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"mysql": {
|
|
||||||
diff -up qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/ibase/qsql_ibase_p.h.firebird qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
|
|
||||||
--- qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/ibase/qsql_ibase_p.h.firebird 2019-01-28 11:11:52.000000000 -0600
|
|
||||||
+++ qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/ibase/qsql_ibase_p.h 2019-02-03 13:27:30.683142996 -0600
|
|
||||||
@@ -52,7 +52,7 @@
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <QtSql/qsqldriver.h>
|
|
||||||
-#include <ibase.h>
|
|
||||||
+#include <firebird/ibase.h>
|
|
||||||
|
|
||||||
#ifdef QT_PLUGIN
|
|
||||||
#define Q_EXPORT_SQLDRIVER_IBASE
|
|
@ -1,146 +0,0 @@
|
|||||||
From f432c08882ffebe5074ea28de871559a98a4d094 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lars Knoll <lars.knoll@qt.io>
|
|
||||||
Date: Wed, 26 Feb 2020 10:42:10 +0100
|
|
||||||
Subject: Add an expansion limit for entities
|
|
||||||
|
|
||||||
Recursively defined entities can easily exhaust all available
|
|
||||||
memory. Limit entity expansion to a default of 4096 characters to
|
|
||||||
avoid DoS attacks when a user loads untrusted content.
|
|
||||||
|
|
||||||
[ChangeLog][QtCore][QXmlStream] QXmlStreamReader does now
|
|
||||||
limit the expansion of entities to 4096 characters. Documents where
|
|
||||||
a single entity expands to more characters than the limit are not
|
|
||||||
considered well formed. The limit is there to avoid DoS attacks through
|
|
||||||
recursively expanding entities when loading untrusted content. Qt 5.15
|
|
||||||
will add methods that allow changing that limit.
|
|
||||||
|
|
||||||
Fixes: QTBUG-47417
|
|
||||||
Change-Id: I94387815d74fcf34783e136387ee57fac5ded0c9
|
|
||||||
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
|
|
||||||
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
|
||||||
(cherry picked from commit fd4be84d23a0db4186cb42e736a9de3af722c7f7)
|
|
||||||
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
||||||
---
|
|
||||||
src/corelib/serialization/qxmlstream.g | 14 ++++++++++++-
|
|
||||||
src/corelib/serialization/qxmlstream_p.h | 14 ++++++++++++-
|
|
||||||
.../serialization/qxmlstream/tst_qxmlstream.cpp | 23 ++++++++++++++++++++--
|
|
||||||
3 files changed, 47 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/corelib/serialization/qxmlstream.g b/src/corelib/serialization/qxmlstream.g
|
|
||||||
index 10bfcd491c..5726bafb26 100644
|
|
||||||
--- a/src/corelib/serialization/qxmlstream.g
|
|
||||||
+++ b/src/corelib/serialization/qxmlstream.g
|
|
||||||
@@ -277,9 +277,19 @@ public:
|
|
||||||
QHash<QStringView, Entity> entityHash;
|
|
||||||
QHash<QStringView, Entity> parameterEntityHash;
|
|
||||||
QXmlStreamSimpleStack<Entity *>entityReferenceStack;
|
|
||||||
+ int entityExpansionLimit = 4096;
|
|
||||||
+ int entityLength = 0;
|
|
||||||
inline bool referenceEntity(Entity &entity) {
|
|
||||||
if (entity.isCurrentlyReferenced) {
|
|
||||||
- raiseWellFormedError(QXmlStream::tr("Recursive entity detected."));
|
|
||||||
+ raiseWellFormedError(QXmlStream::tr("Self-referencing entity detected."));
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ // entityLength represents the amount of additional characters the
|
|
||||||
+ // entity expands into (can be negative for e.g. &). It's used to
|
|
||||||
+ // avoid DoS attacks through recursive entity expansions
|
|
||||||
+ entityLength += entity.value.size() - entity.name.size() - 2;
|
|
||||||
+ if (entityLength > entityExpansionLimit) {
|
|
||||||
+ raiseWellFormedError(QXmlStream::tr("Entity expands to more characters than the entity expansion limit."));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
entity.isCurrentlyReferenced = true;
|
|
||||||
@@ -830,6 +840,8 @@ entity_done ::= ENTITY_DONE;
|
|
||||||
/.
|
|
||||||
case $rule_number:
|
|
||||||
entityReferenceStack.pop()->isCurrentlyReferenced = false;
|
|
||||||
+ if (entityReferenceStack.isEmpty())
|
|
||||||
+ entityLength = 0;
|
|
||||||
clearSym();
|
|
||||||
break;
|
|
||||||
./
|
|
||||||
diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
|
|
||||||
index 61f501f81b..31053f8e0b 100644
|
|
||||||
--- a/src/corelib/serialization/qxmlstream_p.h
|
|
||||||
+++ b/src/corelib/serialization/qxmlstream_p.h
|
|
||||||
@@ -774,9 +774,19 @@ public:
|
|
||||||
QHash<QStringView, Entity> entityHash;
|
|
||||||
QHash<QStringView, Entity> parameterEntityHash;
|
|
||||||
QXmlStreamSimpleStack<Entity *>entityReferenceStack;
|
|
||||||
+ int entityExpansionLimit = 4096;
|
|
||||||
+ int entityLength = 0;
|
|
||||||
inline bool referenceEntity(Entity &entity) {
|
|
||||||
if (entity.isCurrentlyReferenced) {
|
|
||||||
- raiseWellFormedError(QXmlStream::tr("Recursive entity detected."));
|
|
||||||
+ raiseWellFormedError(QXmlStream::tr("Self-referencing entity detected."));
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ // entityLength represents the amount of additional characters the
|
|
||||||
+ // entity expands into (can be negative for e.g. &). It's used to
|
|
||||||
+ // avoid DoS attacks through recursive entity expansions
|
|
||||||
+ entityLength += entity.value.size() - entity.name.size() - 2;
|
|
||||||
+ if (entityLength > entityExpansionLimit) {
|
|
||||||
+ raiseWellFormedError(QXmlStream::tr("Entity expands to more characters than the entity expansion limit."));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
entity.isCurrentlyReferenced = true;
|
|
||||||
@@ -1308,6 +1318,8 @@ bool QXmlStreamReaderPrivate::parse()
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
entityReferenceStack.pop()->isCurrentlyReferenced = false;
|
|
||||||
+ if (entityReferenceStack.isEmpty())
|
|
||||||
+ entityLength = 0;
|
|
||||||
clearSym();
|
|
||||||
break;
|
|
||||||
|
|
||||||
diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
|
|
||||||
index 8fdf91b090..1f9a0d575d 100644
|
|
||||||
--- a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
|
|
||||||
+++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
|
|
||||||
@@ -393,8 +393,6 @@ public:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
- QXmlStreamReader reader(&inputFile);
|
|
||||||
-
|
|
||||||
/* See testcases.dtd which reads: 'Nonvalidating parsers
|
|
||||||
* must also accept "invalid" testcases, but validating ones must reject them.' */
|
|
||||||
if(type == QLatin1String("invalid") || type == QLatin1String("valid"))
|
|
||||||
@@ -580,6 +578,8 @@ private slots:
|
|
||||||
void roundTrip() const;
|
|
||||||
void roundTrip_data() const;
|
|
||||||
|
|
||||||
+ void entityExpansionLimit() const;
|
|
||||||
+
|
|
||||||
private:
|
|
||||||
static QByteArray readFile(const QString &filename);
|
|
||||||
|
|
||||||
@@ -1756,6 +1756,25 @@ void tst_QXmlStream::roundTrip_data() const
|
|
||||||
"</root>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
+void tst_QXmlStream::entityExpansionLimit() const
|
|
||||||
+{
|
|
||||||
+ QString xml = QStringLiteral("<?xml version=\"1.0\"?>"
|
|
||||||
+ "<!DOCTYPE foo ["
|
|
||||||
+ "<!ENTITY a \"0123456789\" >"
|
|
||||||
+ "<!ENTITY b \"&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;\" >"
|
|
||||||
+ "<!ENTITY c \"&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;\" >"
|
|
||||||
+ "<!ENTITY d \"&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;\" >"
|
|
||||||
+ "]>"
|
|
||||||
+ "<foo>&d;&d;&d;</foo>");
|
|
||||||
+ {
|
|
||||||
+ QXmlStreamReader reader(xml);
|
|
||||||
+ do {
|
|
||||||
+ reader.readNext();
|
|
||||||
+ } while (!reader.atEnd());
|
|
||||||
+ QCOMPARE(reader.error(), QXmlStreamReader::NotWellFormedError);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void tst_QXmlStream::roundTrip() const
|
|
||||||
{
|
|
||||||
QFETCH(QString, in);
|
|
||||||
--
|
|
||||||
cgit v0.2.1
|
|
@ -1,13 +1,12 @@
|
|||||||
diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf
|
diff -up qtbase-opensource-src-5.6.0/mkspecs/common/gcc-base.conf.than qtbase-opensource-src-5.6.0/mkspecs/common/gcc-base.conf
|
||||||
index e7e6ee1..ff2a939 100644
|
--- qtbase-opensource-src-5.6.0/mkspecs/common/gcc-base.conf.than 2016-06-02 17:30:07.249027901 +0200
|
||||||
--- a/mkspecs/common/gcc-base.conf
|
+++ qtbase-opensource-src-5.6.0/mkspecs/common/gcc-base.conf 2016-06-02 17:30:14.681748012 +0200
|
||||||
+++ b/mkspecs/common/gcc-base.conf
|
|
||||||
@@ -32,7 +32,7 @@
|
@@ -32,7 +32,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
QMAKE_CFLAGS_OPTIMIZE = -O2
|
QMAKE_CFLAGS_OPTIMIZE = -O2
|
||||||
-QMAKE_CFLAGS_OPTIMIZE_FULL = -O3
|
-QMAKE_CFLAGS_OPTIMIZE_FULL = -O3
|
||||||
+QMAKE_CFLAGS_OPTIMIZE_FULL = -O2
|
+QMAKE_CFLAGS_OPTIMIZE_FULL = -O2
|
||||||
QMAKE_CFLAGS_OPTIMIZE_DEBUG = -Og
|
|
||||||
QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os
|
|
||||||
|
|
||||||
|
QMAKE_CFLAGS += -pipe
|
||||||
|
QMAKE_CFLAGS_DEPS += -M
|
||||||
|
959
qt5-qtbase.spec
959
qt5-qtbase.spec
File diff suppressed because it is too large
Load Diff
@ -1,9 +0,0 @@
|
|||||||
diff -up qtbase-everywhere-src-5.11.1/mkspecs/features/uikit/devices.py.me qtbase-everywhere-src-5.11.1/mkspecs/features/uikit/devices.py
|
|
||||||
--- qtbase-everywhere-src-5.11.1/mkspecs/features/uikit/devices.py.me 2018-06-23 11:29:21.750066271 +0200
|
|
||||||
+++ qtbase-everywhere-src-5.11.1/mkspecs/features/uikit/devices.py 2018-06-23 11:30:07.457292033 +0200
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-#!/usr/bin/python
|
|
||||||
+#!/usr/bin/python3
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
##
|
|
@ -1,14 +0,0 @@
|
|||||||
diff -up qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in.foo qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in
|
|
||||||
--- qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in.foo 2019-04-30 15:18:24.886346423 -0500
|
|
||||||
+++ qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in 2019-04-30 15:19:48.303873296 -0500
|
|
||||||
@@ -66,8 +66,10 @@ unset(_GL_INCDIRS)
|
|
||||||
# Don\'t check for existence of the "_qt5gui_OPENGL_INCLUDE_DIR" because it is
|
|
||||||
# optional.
|
|
||||||
|
|
||||||
+if (NOT ${_qt5gui_OPENGL_INCLUDE_DIR} STREQUAL "/usr/include")
|
|
||||||
list(APPEND Qt5Gui_INCLUDE_DIRS ${_qt5gui_OPENGL_INCLUDE_DIR})
|
|
||||||
set_property(TARGET Qt5::Gui APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${_qt5gui_OPENGL_INCLUDE_DIR})
|
|
||||||
+endif()
|
|
||||||
|
|
||||||
unset(_qt5gui_OPENGL_INCLUDE_DIR CACHE)
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
diff -up qtbase-everywhere-src-5.14.2/src/corelib/global/qlibraryinfo.cpp.no_relocatable qtbase-everywhere-src-5.14.2/src/corelib/global/qlibraryinfo.cpp
|
|
||||||
--- qtbase-everywhere-src-5.14.2/src/corelib/global/qlibraryinfo.cpp.no_relocatable 2020-03-27 04:49:31.000000000 -0500
|
|
||||||
+++ qtbase-everywhere-src-5.14.2/src/corelib/global/qlibraryinfo.cpp 2020-04-13 15:13:44.075705226 -0500
|
|
||||||
@@ -671,8 +671,11 @@ static QString getPrefix(
|
|
||||||
# if QT_CONFIGURE_CROSSBUILD
|
|
||||||
if (group == QLibraryInfo::DevicePaths)
|
|
||||||
return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH);
|
|
||||||
-# endif
|
|
||||||
+# elif 0 //QT_CONFIG(relocatable)
|
|
||||||
return getExtPrefixFromHostBinDir();
|
|
||||||
+# else
|
|
||||||
+ return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH);
|
|
||||||
+# endif
|
|
||||||
#elif QT_CONFIG(relocatable)
|
|
||||||
return getRelocatablePrefix();
|
|
||||||
#else
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -up qtbase-everywhere-src-5.12.1/src/plugins/platforms/xcb/qxcbscreen.cpp.hidpi_scale_at_192 qtbase-everywhere-src-5.12.1/src/plugins/platforms/xcb/qxcbscreen.cpp
|
|
||||||
--- qtbase-everywhere-src-5.12.1/src/plugins/platforms/xcb/qxcbscreen.cpp.hidpi_scale_at_192 2019-02-03 13:21:27.866906481 -0600
|
|
||||||
+++ qtbase-everywhere-src-5.12.1/src/plugins/platforms/xcb/qxcbscreen.cpp 2019-02-03 13:23:47.554767565 -0600
|
|
||||||
@@ -744,7 +744,7 @@ void QXcbScreen::updateGeometry(const QR
|
|
||||||
// Use 128 as a reference DPI on small screens. This favors "small UI" over "large UI".
|
|
||||||
qreal referenceDpi = physicalSize().width() <= 320 ? 128 : 96;
|
|
||||||
|
|
||||||
- m_pixelDensity = qMax(1, qRound(dpi/referenceDpi));
|
|
||||||
+ m_pixelDensity = qMax(1, (int) (dpi/referenceDpi)); //instead of rounding at 1.5, round at 2.0 (same as GNOME)
|
|
||||||
m_geometry = geometry;
|
|
||||||
m_availableGeometry = geometry & m_virtualDesktop->workArea();
|
|
||||||
QWindowSystemInterface::handleScreenGeometryChange(QPlatformScreen::screen(), m_geometry, m_availableGeometry);
|
|
14
qtbase-opensource-src-5.6.0-moc_WORDSIZE.patch
Normal file
14
qtbase-opensource-src-5.6.0-moc_WORDSIZE.patch
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
diff -up qtbase-opensource-src-5.6.0-beta/src/tools/moc/main.cpp.moc_WORDSIZE qtbase-opensource-src-5.6.0-beta/src/tools/moc/main.cpp
|
||||||
|
--- qtbase-opensource-src-5.6.0-beta/src/tools/moc/main.cpp.moc_WORDSIZE 2015-12-04 18:05:24.000000000 -0600
|
||||||
|
+++ qtbase-opensource-src-5.6.0-beta/src/tools/moc/main.cpp 2015-12-15 20:57:55.554485416 -0600
|
||||||
|
@@ -184,6 +184,10 @@ int runMoc(int argc, char **argv)
|
||||||
|
Moc moc;
|
||||||
|
pp.macros["Q_MOC_RUN"];
|
||||||
|
pp.macros["__cplusplus"];
|
||||||
|
+ Macro macro;
|
||||||
|
+ macro.symbols = Preprocessor::tokenize(QByteArray::number(Q_PROCESSOR_WORDSIZE*8), 1, Preprocessor::TokenizeDefine);
|
||||||
|
+ macro.symbols.removeLast(); // remove the EOF symbol
|
||||||
|
+ pp.macros.insert("__WORDSIZE", macro);
|
||||||
|
|
||||||
|
// Don't stumble over GCC extensions
|
||||||
|
Macro dummyVariadicFunctionMacro;
|
12
qtbase-opensource-src-5.6.2-QTBUG-35459.patch
Normal file
12
qtbase-opensource-src-5.6.2-QTBUG-35459.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -up qtbase-opensource-src-5.6.2/src/xml/sax/qxml_p.h.QTBUG-35459 qtbase-opensource-src-5.6.2/src/xml/sax/qxml_p.h
|
||||||
|
--- qtbase-opensource-src-5.6.2/src/xml/sax/qxml_p.h.QTBUG-35459 2016-09-16 00:49:42.000000000 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/src/xml/sax/qxml_p.h 2016-10-16 08:40:04.441725330 -0500
|
||||||
|
@@ -217,7 +217,7 @@ private:
|
||||||
|
// for the DTD currently being parsed.
|
||||||
|
static const int dtdRecursionLimit = 2;
|
||||||
|
// The maximum amount of characters an entity value may contain, after expansion.
|
||||||
|
- static const int entityCharacterLimit = 1024;
|
||||||
|
+ static const int entityCharacterLimit = 65536;
|
||||||
|
|
||||||
|
const QString &string();
|
||||||
|
void stringClear();
|
13
qtbase-opensource-src-5.6.2-arm.patch
Normal file
13
qtbase-opensource-src-5.6.2-arm.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
diff -up qtbase-opensource-src-5.6.2/configure.arm qtbase-opensource-src-5.6.2/configure
|
||||||
|
--- qtbase-opensource-src-5.6.2/configure.arm 2016-09-16 00:49:42.000000000 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/configure 2016-10-16 08:41:20.583267295 -0500
|
||||||
|
@@ -4373,6 +4373,9 @@ if [ "$QMAKESPEC" != "$XQMAKESPEC" ]; th
|
||||||
|
else
|
||||||
|
# not cross compiling, host == target
|
||||||
|
CFG_HOST_ARCH="$CFG_ARCH"
|
||||||
|
+ if [ "$CFG_ARCH" = "arm" ] ; then
|
||||||
|
+ CFG_CPUFEATURES="neon"
|
||||||
|
+ fi
|
||||||
|
CFG_HOST_CPUFEATURES="$CFG_CPUFEATURES"
|
||||||
|
fi
|
||||||
|
unset OUTFILE
|
325
qtbase-opensource-src-5.6.2-moc_system_defines.patch
Normal file
325
qtbase-opensource-src-5.6.2-moc_system_defines.patch
Normal file
@ -0,0 +1,325 @@
|
|||||||
|
diff -up qtbase-opensource-src-5.6.2/mkspecs/features/moc.prf.moc_system_defines qtbase-opensource-src-5.6.2/mkspecs/features/moc.prf
|
||||||
|
--- qtbase-opensource-src-5.6.2/mkspecs/features/moc.prf.moc_system_defines 2016-09-16 00:49:42.000000000 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/mkspecs/features/moc.prf 2016-10-16 08:42:20.561694271 -0500
|
||||||
|
@@ -24,8 +24,25 @@ win32:count(MOC_INCLUDEPATH, 40, >) {
|
||||||
|
write_file($$absolute_path($$WIN_INCLUDETEMP, $$OUT_PWD), WIN_INCLUDETEMP_CONT)|error("Aborting.")
|
||||||
|
}
|
||||||
|
|
||||||
|
+# QNX's compiler sets "gcc" config, but does not support the -dM option;
|
||||||
|
+# iOS builds are multi-arch, so this feature cannot possibly work.
|
||||||
|
+if(gcc|intel_icl|msvc):!rim_qcc:!ios {
|
||||||
|
+ moc_predefs.CONFIG = no_link
|
||||||
|
+ gcc: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -dM -E -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
|
||||||
|
+ else:intel_icl: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -QdM -P -Fi${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
|
||||||
|
+ else:msvc {
|
||||||
|
+ # make sure that our bin dir is first in path, so qmake is found
|
||||||
|
+ moc_predefs.commands = PATH $$shell_path($$[QT_INSTALL_BINS/src]);%PATH%&
|
||||||
|
+ moc_predefs.commands += $$QMAKE_CXX -Bxqmake $$QMAKE_CXXFLAGS -E ${QMAKE_FILE_IN} 2>NUL >${QMAKE_FILE_OUT}
|
||||||
|
+ } else: error("Oops, I messed up")
|
||||||
|
+ moc_predefs.output = $$MOC_DIR/moc_predefs.h
|
||||||
|
+ moc_predefs.input = MOC_PREDEF_FILE
|
||||||
|
+ silent: moc_predefs.commands = @echo generating $$moc_predefs.output$$escape_expand(\n\t)@$$moc_predefs.commands
|
||||||
|
+ QMAKE_EXTRA_COMPILERS += moc_predefs
|
||||||
|
+ MOC_PREDEF_FILE = $$[QT_HOST_DATA/src]/mkspecs/features/data/dummy.cpp
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
defineReplace(mocCmdBase) {
|
||||||
|
- RET =
|
||||||
|
!isEmpty(WIN_INCLUDETEMP) {
|
||||||
|
incvar = @$$WIN_INCLUDETEMP
|
||||||
|
} else {
|
||||||
|
@@ -34,7 +51,13 @@ defineReplace(mocCmdBase) {
|
||||||
|
incvar += -I$$shell_quote($$inc)
|
||||||
|
incvar += $$QMAKE_FRAMEWORKPATH_FLAGS
|
||||||
|
}
|
||||||
|
- RET += $$QMAKE_MOC $(DEFINES) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$incvar $$QMAKE_MOC_OPTIONS
|
||||||
|
+
|
||||||
|
+ RET = $$QMAKE_MOC $(DEFINES)
|
||||||
|
+
|
||||||
|
+ isEmpty(MOC_PREDEF_FILE): RET += $$join(QMAKE_COMPILER_DEFINES, " -D", -D)
|
||||||
|
+ else: RET += --include $$moc_predefs.output
|
||||||
|
+
|
||||||
|
+ RET += $$incvar $$QMAKE_MOC_OPTIONS
|
||||||
|
return($$RET)
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -46,7 +69,7 @@ moc_header.output = $$MOC_DIR/$${QMAKE_H
|
||||||
|
moc_header.input = HEADERS
|
||||||
|
moc_header.variable_out = SOURCES
|
||||||
|
moc_header.name = MOC ${QMAKE_FILE_IN}
|
||||||
|
-moc_header.depends += $$WIN_INCLUDETEMP
|
||||||
|
+moc_header.depends += $$WIN_INCLUDETEMP $$moc_predefs.output
|
||||||
|
silent:moc_header.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_header.commands
|
||||||
|
QMAKE_EXTRA_COMPILERS += moc_header
|
||||||
|
INCREDIBUILD_XGE += moc_header
|
||||||
|
@@ -58,7 +81,7 @@ moc_source.commands = ${QMAKE_FUNC_mocCm
|
||||||
|
moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC}
|
||||||
|
moc_source.input = SOURCES OBJECTIVE_SOURCES
|
||||||
|
moc_source.name = MOC ${QMAKE_FILE_IN}
|
||||||
|
-moc_source.depends += $$WIN_INCLUDETEMP
|
||||||
|
+moc_source.depends += $$WIN_INCLUDETEMP $$moc_predefs.output
|
||||||
|
silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands
|
||||||
|
QMAKE_EXTRA_COMPILERS += moc_source
|
||||||
|
INCREDIBUILD_XGE += moc_source
|
||||||
|
diff -up qtbase-opensource-src-5.6.2/qmake/main.cpp.moc_system_defines qtbase-opensource-src-5.6.2/qmake/main.cpp
|
||||||
|
--- qtbase-opensource-src-5.6.2/qmake/main.cpp.moc_system_defines 2016-09-16 00:49:42.000000000 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/qmake/main.cpp 2016-10-16 08:42:20.561694271 -0500
|
||||||
|
@@ -1,6 +1,7 @@
|
||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2015 The Qt Company Ltd.
|
||||||
|
+** Copyright (C) 2015 Intel Corporation.
|
||||||
|
** Contact: http://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the qmake application of the Qt Toolkit.
|
||||||
|
@@ -47,6 +48,10 @@
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
+#ifdef Q_OS_WIN
|
||||||
|
+# include <qt_windows.h>
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
@@ -246,6 +251,30 @@ static int doInstall(int argc, char **ar
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int dumpMacros(const wchar_t *cmdline)
|
||||||
|
+{
|
||||||
|
+ // from http://stackoverflow.com/questions/3665537/how-to-find-out-cl-exes-built-in-macros
|
||||||
|
+ int argc;
|
||||||
|
+ wchar_t **argv = CommandLineToArgvW(cmdline, &argc);
|
||||||
|
+ if (!argv)
|
||||||
|
+ return 2;
|
||||||
|
+ for (int i = 0; i < argc; ++i) {
|
||||||
|
+ if (argv[i][0] != L'-' || argv[i][1] != 'D')
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ wchar_t *value = wcschr(argv[i], L'=');
|
||||||
|
+ if (value) {
|
||||||
|
+ *value = 0;
|
||||||
|
+ ++value;
|
||||||
|
+ } else {
|
||||||
|
+ // point to the NUL at the end, so we don't print anything
|
||||||
|
+ value = argv[i] + wcslen(argv[i]);
|
||||||
|
+ }
|
||||||
|
+ wprintf(L"#define %Ls %Ls\n", argv[i] + 2, value);
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#endif // Q_OS_WIN
|
||||||
|
|
||||||
|
/* This is to work around lame implementation on Darwin. It has been noted that the getpwd(3) function
|
||||||
|
@@ -280,6 +309,15 @@ int runQMake(int argc, char **argv)
|
||||||
|
// Workaround for inferior/missing command line tools on Windows: make our own!
|
||||||
|
if (argc >= 2 && !strcmp(argv[1], "-install"))
|
||||||
|
return doInstall(argc - 2, argv + 2);
|
||||||
|
+
|
||||||
|
+ {
|
||||||
|
+ // Support running as Visual C++'s compiler
|
||||||
|
+ const wchar_t *cmdline = _wgetenv(L"MSC_CMD_FLAGS");
|
||||||
|
+ if (!cmdline || !*cmdline)
|
||||||
|
+ cmdline = _wgetenv(L"MSC_IDE_FLAGS");
|
||||||
|
+ if (cmdline && *cmdline)
|
||||||
|
+ return dumpMacros(cmdline);
|
||||||
|
+ }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QMakeVfs vfs;
|
||||||
|
diff -up qtbase-opensource-src-5.6.2/src/tools/moc/main.cpp.moc_system_defines qtbase-opensource-src-5.6.2/src/tools/moc/main.cpp
|
||||||
|
--- qtbase-opensource-src-5.6.2/src/tools/moc/main.cpp.moc_system_defines 2016-10-16 08:42:20.558694249 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/src/tools/moc/main.cpp 2016-10-16 08:42:20.562694278 -0500
|
||||||
|
@@ -263,6 +263,11 @@ int runMoc(int argc, char **argv)
|
||||||
|
prependIncludeOption.setValueName(QStringLiteral("file"));
|
||||||
|
parser.addOption(prependIncludeOption);
|
||||||
|
|
||||||
|
+ QCommandLineOption includeOption(QStringLiteral("include"));
|
||||||
|
+ includeOption.setDescription(QStringLiteral("Parse <file> as an #include before the main source(s)."));
|
||||||
|
+ includeOption.setValueName(QStringLiteral("file"));
|
||||||
|
+ parser.addOption(includeOption);
|
||||||
|
+
|
||||||
|
QCommandLineOption noNotesWarningsCompatOption(QStringLiteral("n"));
|
||||||
|
noNotesWarningsCompatOption.setDescription(QStringLiteral("Do not display notes (-nn) or warnings (-nw). Compatibility option."));
|
||||||
|
noNotesWarningsCompatOption.setValueName(QStringLiteral("which"));
|
||||||
|
@@ -412,7 +417,16 @@ int runMoc(int argc, char **argv)
|
||||||
|
moc.includes = pp.includes;
|
||||||
|
|
||||||
|
// 1. preprocess
|
||||||
|
- moc.symbols = pp.preprocessed(moc.filename, &in);
|
||||||
|
+ foreach (const QString &includeName, parser.values(includeOption)) {
|
||||||
|
+ QByteArray rawName = pp.resolveInclude(QFile::encodeName(includeName), moc.filename);
|
||||||
|
+ QFile f(QFile::decodeName(rawName));
|
||||||
|
+ if (f.open(QIODevice::ReadOnly)) {
|
||||||
|
+ moc.symbols += Symbol(0, MOC_INCLUDE_BEGIN, rawName);
|
||||||
|
+ moc.symbols += pp.preprocessed(rawName, &f);
|
||||||
|
+ moc.symbols += Symbol(0, MOC_INCLUDE_END, rawName);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ moc.symbols += pp.preprocessed(moc.filename, &in);
|
||||||
|
|
||||||
|
if (!pp.preprocessOnly) {
|
||||||
|
// 2. parse
|
||||||
|
diff -up qtbase-opensource-src-5.6.2/src/tools/moc/preprocessor.cpp.moc_system_defines qtbase-opensource-src-5.6.2/src/tools/moc/preprocessor.cpp
|
||||||
|
--- qtbase-opensource-src-5.6.2/src/tools/moc/preprocessor.cpp.moc_system_defines 2016-09-16 00:49:42.000000000 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/src/tools/moc/preprocessor.cpp 2016-10-16 08:42:20.562694278 -0500
|
||||||
|
@@ -1007,6 +1007,37 @@ static void mergeStringLiterals(Symbols
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+QByteArray Preprocessor::resolveInclude(const QByteArray &include, const QByteArray &relativeTo)
|
||||||
|
+{
|
||||||
|
+ // #### stringery
|
||||||
|
+ QFileInfo fi;
|
||||||
|
+ if (!relativeTo.isEmpty())
|
||||||
|
+ fi.setFile(QFileInfo(QString::fromLocal8Bit(relativeTo.constData())).dir(), QString::fromLocal8Bit(include.constData()));
|
||||||
|
+ for (int j = 0; j < Preprocessor::includes.size() && !fi.exists(); ++j) {
|
||||||
|
+ const IncludePath &p = Preprocessor::includes.at(j);
|
||||||
|
+ if (p.isFrameworkPath) {
|
||||||
|
+ const int slashPos = include.indexOf('/');
|
||||||
|
+ if (slashPos == -1)
|
||||||
|
+ continue;
|
||||||
|
+ QByteArray frameworkCandidate = include.left(slashPos);
|
||||||
|
+ frameworkCandidate.append(".framework/Headers/");
|
||||||
|
+ fi.setFile(QString::fromLocal8Bit(QByteArray(p.path + '/' + frameworkCandidate).constData()), QString::fromLocal8Bit(include.mid(slashPos + 1).constData()));
|
||||||
|
+ } else {
|
||||||
|
+ fi.setFile(QString::fromLocal8Bit(p.path.constData()), QString::fromLocal8Bit(include.constData()));
|
||||||
|
+ }
|
||||||
|
+ // try again, maybe there's a file later in the include paths with the same name
|
||||||
|
+ // (186067)
|
||||||
|
+ if (fi.isDir()) {
|
||||||
|
+ fi = QFileInfo();
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!fi.exists() || fi.isDir())
|
||||||
|
+ return QByteArray();
|
||||||
|
+ return fi.canonicalFilePath().toLocal8Bit();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
|
||||||
|
{
|
||||||
|
currentFilenames.push(filename);
|
||||||
|
@@ -1027,33 +1058,9 @@ void Preprocessor::preprocess(const QByt
|
||||||
|
continue;
|
||||||
|
until(PP_NEWLINE);
|
||||||
|
|
||||||
|
- // #### stringery
|
||||||
|
- QFileInfo fi;
|
||||||
|
- if (local)
|
||||||
|
- fi.setFile(QFileInfo(QString::fromLocal8Bit(filename.constData())).dir(), QString::fromLocal8Bit(include.constData()));
|
||||||
|
- for (int j = 0; j < Preprocessor::includes.size() && !fi.exists(); ++j) {
|
||||||
|
- const IncludePath &p = Preprocessor::includes.at(j);
|
||||||
|
- if (p.isFrameworkPath) {
|
||||||
|
- const int slashPos = include.indexOf('/');
|
||||||
|
- if (slashPos == -1)
|
||||||
|
- continue;
|
||||||
|
- QByteArray frameworkCandidate = include.left(slashPos);
|
||||||
|
- frameworkCandidate.append(".framework/Headers/");
|
||||||
|
- fi.setFile(QString::fromLocal8Bit(QByteArray(p.path + '/' + frameworkCandidate).constData()), QString::fromLocal8Bit(include.mid(slashPos + 1).constData()));
|
||||||
|
- } else {
|
||||||
|
- fi.setFile(QString::fromLocal8Bit(p.path.constData()), QString::fromLocal8Bit(include.constData()));
|
||||||
|
- }
|
||||||
|
- // try again, maybe there's a file later in the include paths with the same name
|
||||||
|
- // (186067)
|
||||||
|
- if (fi.isDir()) {
|
||||||
|
- fi = QFileInfo();
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (!fi.exists() || fi.isDir())
|
||||||
|
+ include = resolveInclude(include, local ? filename : QByteArray());
|
||||||
|
+ if (include.isNull())
|
||||||
|
continue;
|
||||||
|
- include = fi.canonicalFilePath().toLocal8Bit();
|
||||||
|
|
||||||
|
if (Preprocessor::preprocessedIncludes.contains(include))
|
||||||
|
continue;
|
||||||
|
@@ -1208,6 +1215,7 @@ Symbols Preprocessor::preprocessed(const
|
||||||
|
input = cleaned(input);
|
||||||
|
|
||||||
|
// phase 2: tokenize for the preprocessor
|
||||||
|
+ index = 0;
|
||||||
|
symbols = tokenize(input);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
diff -up qtbase-opensource-src-5.6.2/src/tools/moc/preprocessor.h.moc_system_defines qtbase-opensource-src-5.6.2/src/tools/moc/preprocessor.h
|
||||||
|
--- qtbase-opensource-src-5.6.2/src/tools/moc/preprocessor.h.moc_system_defines 2016-09-16 00:49:42.000000000 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/src/tools/moc/preprocessor.h 2016-10-16 08:42:20.562694278 -0500
|
||||||
|
@@ -67,6 +67,7 @@ public:
|
||||||
|
QList<QByteArray> frameworks;
|
||||||
|
QSet<QByteArray> preprocessedIncludes;
|
||||||
|
Macros macros;
|
||||||
|
+ QByteArray resolveInclude(const QByteArray &filename, const QByteArray &relativeTo);
|
||||||
|
Symbols preprocessed(const QByteArray &filename, QFile *device);
|
||||||
|
|
||||||
|
void parseDefineArguments(Macro *m);
|
||||||
|
diff -up qtbase-opensource-src-5.6.2/tests/auto/tools/moc/subdir/extradefines.h.moc_system_defines qtbase-opensource-src-5.6.2/tests/auto/tools/moc/subdir/extradefines.h
|
||||||
|
--- qtbase-opensource-src-5.6.2/tests/auto/tools/moc/subdir/extradefines.h.moc_system_defines 2016-10-16 08:42:20.562694278 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/tests/auto/tools/moc/subdir/extradefines.h 2016-10-16 08:42:20.562694278 -0500
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+#define FOO 1
|
||||||
|
diff -up qtbase-opensource-src-5.6.2/tests/auto/tools/moc/tst_moc.cpp.moc_system_defines qtbase-opensource-src-5.6.2/tests/auto/tools/moc/tst_moc.cpp
|
||||||
|
--- qtbase-opensource-src-5.6.2/tests/auto/tools/moc/tst_moc.cpp.moc_system_defines 2016-09-16 00:49:42.000000000 -0500
|
||||||
|
+++ qtbase-opensource-src-5.6.2/tests/auto/tools/moc/tst_moc.cpp 2016-10-16 08:42:20.562694278 -0500
|
||||||
|
@@ -581,6 +581,8 @@ private slots:
|
||||||
|
void frameworkSearchPath();
|
||||||
|
void cstyleEnums();
|
||||||
|
void defineMacroViaCmdline();
|
||||||
|
+ void defineMacroViaForcedInclude();
|
||||||
|
+ void defineMacroViaForcedIncludeRelative();
|
||||||
|
void specifyMetaTagsFromCmdline();
|
||||||
|
void invokable();
|
||||||
|
void singleFunctionKeywordSignalAndSlot();
|
||||||
|
@@ -1248,6 +1250,46 @@ void tst_Moc::defineMacroViaCmdline()
|
||||||
|
args << m_sourceDirectory + QStringLiteral("/macro-on-cmdline.h");
|
||||||
|
|
||||||
|
proc.start(m_moc, args);
|
||||||
|
+ QVERIFY(proc.waitForFinished());
|
||||||
|
+ QCOMPARE(proc.exitCode(), 0);
|
||||||
|
+ QCOMPARE(proc.readAllStandardError(), QByteArray());
|
||||||
|
+ QByteArray mocOut = proc.readAllStandardOutput();
|
||||||
|
+ QVERIFY(!mocOut.isEmpty());
|
||||||
|
+#else
|
||||||
|
+ QSKIP("Only tested on linux/gcc");
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void tst_Moc::defineMacroViaForcedInclude()
|
||||||
|
+{
|
||||||
|
+#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS)
|
||||||
|
+ QProcess proc;
|
||||||
|
+
|
||||||
|
+ QStringList args;
|
||||||
|
+ args << "--include" << m_sourceDirectory + QLatin1String("/subdir/extradefines.h");
|
||||||
|
+ args << m_sourceDirectory + QStringLiteral("/macro-on-cmdline.h");
|
||||||
|
+
|
||||||
|
+ proc.start(m_moc, args);
|
||||||
|
+ QVERIFY(proc.waitForFinished());
|
||||||
|
+ QCOMPARE(proc.exitCode(), 0);
|
||||||
|
+ QCOMPARE(proc.readAllStandardError(), QByteArray());
|
||||||
|
+ QByteArray mocOut = proc.readAllStandardOutput();
|
||||||
|
+ QVERIFY(!mocOut.isEmpty());
|
||||||
|
+#else
|
||||||
|
+ QSKIP("Only tested on linux/gcc");
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void tst_Moc::defineMacroViaForcedIncludeRelative()
|
||||||
|
+{
|
||||||
|
+#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS)
|
||||||
|
+ QProcess proc;
|
||||||
|
+
|
||||||
|
+ QStringList args;
|
||||||
|
+ args << "--include" << QStringLiteral("extradefines.h") << "-I" + m_sourceDirectory + "/subdir";
|
||||||
|
+ args << m_sourceDirectory + QStringLiteral("/macro-on-cmdline.h");
|
||||||
|
+
|
||||||
|
+ proc.start(m_moc, args);
|
||||||
|
QVERIFY(proc.waitForFinished());
|
||||||
|
QCOMPARE(proc.exitCode(), 0);
|
||||||
|
QCOMPARE(proc.readAllStandardError(), QByteArray());
|
@ -1,15 +0,0 @@
|
|||||||
diff -up qtbase-opensource-src-5.7.1/src/tools/moc/main.cpp.moc_WORDSIZE qtbase-opensource-src-5.7.1/src/tools/moc/main.cpp
|
|
||||||
--- qtbase-opensource-src-5.7.1/src/tools/moc/main.cpp.moc_WORDSIZE 2016-12-01 02:17:04.000000000 -0600
|
|
||||||
+++ qtbase-opensource-src-5.7.1/src/tools/moc/main.cpp 2016-12-08 12:37:28.931589338 -0600
|
|
||||||
@@ -179,6 +179,11 @@ int runMoc(int argc, char **argv)
|
|
||||||
Moc moc;
|
|
||||||
pp.macros["Q_MOC_RUN"];
|
|
||||||
pp.macros["__cplusplus"];
|
|
||||||
+ pp.macros["_SYS_SYSMACROS_H_OUTER"];
|
|
||||||
+ Macro macro;
|
|
||||||
+ macro.symbols = Preprocessor::tokenize(QByteArray::number(Q_PROCESSOR_WORDSIZE*8), 1, Preprocessor::TokenizeDefine);
|
|
||||||
+ macro.symbols.removeLast(); // remove the EOF symbol
|
|
||||||
+ pp.macros.insert("__WORDSIZE", macro);
|
|
||||||
|
|
||||||
// Don't stumble over GCC extensions
|
|
||||||
Macro dummyVariadicFunctionMacro;
|
|
@ -1,11 +0,0 @@
|
|||||||
--- qtbase-opensource-src-5.8.0/src/corelib/global/qglobal.h.orig 2017-01-26 10:45:40.905010896 +0100
|
|
||||||
+++ qtbase-opensource-src-5.8.0/src/corelib/global/qglobal.h 2017-01-26 10:46:50.299858887 +0100
|
|
||||||
@@ -55,7 +55,7 @@
|
|
||||||
/*
|
|
||||||
can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
|
|
||||||
*/
|
|
||||||
-#define QT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))
|
|
||||||
+#define QT_VERSION_CHECK(qt_version_check_major, qt_version_check_minor, qt_version_check_patch) ((qt_version_check_major<<16)|(qt_version_check_minor<<8)|(qt_version_check_patch))
|
|
||||||
|
|
||||||
#ifdef QT_BOOTSTRAPPED
|
|
||||||
#include <QtCore/qconfig-bootstrapped.h>
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -up qtbase-opensource-src-5.9.0/src/plugins/sqldrivers/mysql/qsql_mysql.cpp.than qtbase-opensource-src-5.9.0/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
|
|
||||||
diff -up qtbase-opensource-src-5.9.0/src/plugins/sqldrivers/mysql/qsql_mysql_p.h.than qtbase-opensource-src-5.9.0/src/plugins/sqldrivers/mysql/qsql_mysql_p.h
|
|
||||||
--- qtbase-opensource-src-5.9.0/src/plugins/sqldrivers/mysql/qsql_mysql_p.h.than 2017-07-14 13:43:50.831203768 +0200
|
|
||||||
+++ qtbase-opensource-src-5.9.0/src/plugins/sqldrivers/mysql/qsql_mysql_p.h 2017-07-14 13:44:24.364948006 +0200
|
|
||||||
@@ -58,6 +58,7 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <mysql.h>
|
|
||||||
+#include <mysql_version.h>
|
|
||||||
|
|
||||||
#ifdef QT_PLUGIN
|
|
||||||
#define Q_EXPORT_SQLDRIVER_MYSQL
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -up qtbase-everywhere-src-5.10.1/qmake/Makefile.unix.qmake_LFLAGS qtbase-everywhere-src-5.10.1/qmake/Makefile.unix
|
|
||||||
--- qtbase-everywhere-src-5.10.1/qmake/Makefile.unix.qmake_LFLAGS 2018-02-08 12:24:48.000000000 -0600
|
|
||||||
+++ qtbase-everywhere-src-5.10.1/qmake/Makefile.unix 2018-02-15 10:25:07.077763061 -0600
|
|
||||||
@@ -142,7 +142,7 @@ CPPFLAGS = -g $(EXTRA_CPPFLAGS) \
|
|
||||||
-DQT_NO_FOREACH
|
|
||||||
|
|
||||||
CXXFLAGS = $(EXTRA_CXXFLAGS) $(CONFIG_CXXFLAGS) $(CPPFLAGS)
|
|
||||||
-LFLAGS = $(EXTRA_LFLAGS) $(CONFIG_LFLAGS)
|
|
||||||
+LFLAGS = $(EXTRA_LFLAGS) $(CONFIG_LFLAGS) $(QMAKE_LFLAGS_RELEASE)
|
|
||||||
|
|
||||||
first all: $(BUILD_PATH)/bin/qmake$(EXEEXT)
|
|
||||||
qmake: $(BUILD_PATH)/bin/qmake$(EXEEXT)
|
|
@ -1,20 +0,0 @@
|
|||||||
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
|
|
||||||
index b8bfad4f16..676fdfad5e 100644
|
|
||||||
--- a/src/gui/kernel/qguiapplication.cpp
|
|
||||||
+++ b/src/gui/kernel/qguiapplication.cpp
|
|
||||||
@@ -1376,14 +1376,7 @@ void QGuiApplicationPrivate::createPlatformIntegration()
|
|
||||||
if (sessionType == QByteArrayLiteral("x11") && !platformName.contains(QByteArrayLiteral("xcb"))) {
|
|
||||||
platformName = QByteArrayLiteral("xcb");
|
|
||||||
} else if (sessionType == QByteArrayLiteral("wayland") && !platformName.contains(QByteArrayLiteral("wayland"))) {
|
|
||||||
- QByteArray currentDesktop = qgetenv("XDG_CURRENT_DESKTOP").toLower();
|
|
||||||
- QByteArray sessionDesktop = qgetenv("XDG_SESSION_DESKTOP").toLower();
|
|
||||||
- if (currentDesktop.contains("gnome") || sessionDesktop.contains("gnome")) {
|
|
||||||
- qInfo() << "Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome."
|
|
||||||
- << "Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.";
|
|
||||||
- } else {
|
|
||||||
- platformName = QByteArrayLiteral("wayland");
|
|
||||||
- }
|
|
||||||
+ platformName = QByteArrayLiteral("wayland");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef QT_QPA_DEFAULT_PLATFORM_NAME
|
|
@ -1,3 +1,2 @@
|
|||||||
[Rules]
|
[Rules]
|
||||||
*.debug=false
|
*.debug=false
|
||||||
qt.qpa.xcb.xcberror.warning=false
|
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (qtbase-everywhere-src-5.14.2.tar.xz) = 8c83e06d58b56e9f288e83d6c3dd4ad6cc9f1eb1a32c7b44fb912fda34ed7255766fd9fa60cd740ee001df7d6172f25df05f1f95e986c3e793fbcd9bf4f18de9
|
5672bf62a89061a6edb425b7796e4eca qtbase-opensource-src-5.6.2.tar.xz
|
||||||
|
@ -1 +0,0 @@
|
|||||||
qtbase-everywhere-src
|
|
@ -1,16 +0,0 @@
|
|||||||
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
|
|
||||||
index e6a0d97..cf93041 100644
|
|
||||||
--- a/mkspecs/features/qt_module.prf
|
|
||||||
+++ b/mkspecs/features/qt_module.prf
|
|
||||||
@@ -216,9 +216,9 @@ android: CONFIG += qt_android_deps no_linker_version_script
|
|
||||||
QMAKE_LFLAGS += $${QMAKE_LFLAGS_VERSION_SCRIPT}$$verscript
|
|
||||||
|
|
||||||
internal_module {
|
|
||||||
- verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API { *; };"
|
|
||||||
+ verscript_content = "Qt_$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}_PRIVATE_API { *; };"
|
|
||||||
} else {
|
|
||||||
- verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API {" \
|
|
||||||
+ verscript_content = "Qt_$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}_PRIVATE_API {" \
|
|
||||||
" qt_private_api_tag*;"
|
|
||||||
|
|
||||||
private_api_headers = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.QPA_HEADER_FILES
|
|
Loading…
Reference in New Issue
Block a user