aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2017-02-23 14:43:06 -0800
committerJake Petroules <jake.petroules@qt.io>2017-03-02 03:20:55 +0000
commit1950532998e35801ef1b635105d433b298a432b9 (patch)
treed1666134ecc90d20318868869ee3510cb6425cac /src
parent0de8b1b2202da675804af11da53dc2bac0ed2227 (diff)
Fix detection of default QPA plugin with Qt >= 5.8
QT_DEFAULT_QPA_PLUGIN is no longer written to qconfig.pri, so detect the default plugin using QT_QPA_DEFAULT_PLATFORM_NAME from qtgui-config.h. Change-Id: I64e4b5576784eaa338d14be873300274d7e1f8fb Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/lib/qtprofilesetup/qtprofilesetup.cpp53
1 files changed, 41 insertions, 12 deletions
diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp
index aaed319bb..778338e77 100644
--- a/src/lib/qtprofilesetup/qtprofilesetup.cpp
+++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp
@@ -55,6 +55,7 @@
#include <QtCore/qfileinfo.h>
#include <QtCore/qlibrary.h>
#include <QtCore/qregexp.h>
+#include <QtCore/qregularexpression.h>
#include <QtCore/qtextstream.h>
namespace qbs {
@@ -76,19 +77,47 @@ static QString defaultQpaPlugin(const Profile &profile, const QtModuleInfo &modu
{
if (qtEnv.qtMajorVersion < 5)
return QString();
- QFile qConfigPri(qtEnv.mkspecBasePath + QLatin1String("/qconfig.pri"));
- if (!qConfigPri.open(QIODevice::ReadOnly)) {
- throw ErrorInfo(Tr::tr("Setting up Qt profile '%1' failed: Cannot open "
- "file '%2' (%3).")
- .arg(profile.name(), qConfigPri.fileName(), qConfigPri.errorString()));
- }
- const QList<QByteArray> lines = qConfigPri.readAll().split('\n');
- const QByteArray magicString = "QT_DEFAULT_QPA_PLUGIN =";
- foreach (const QByteArray &line, lines) {
- const QByteArray simplifiedLine = line.simplified();
- if (simplifiedLine.startsWith(magicString))
- return QString::fromLatin1(simplifiedLine.mid(magicString.count()).trimmed());
+
+ if (qtEnv.qtMajorVersion == 5 && qtEnv.qtMinorVersion < 8) {
+ QFile qConfigPri(qtEnv.mkspecBasePath + QLatin1String("/qconfig.pri"));
+ if (!qConfigPri.open(QIODevice::ReadOnly)) {
+ throw ErrorInfo(Tr::tr("Setting up Qt profile '%1' failed: Cannot open "
+ "file '%2' (%3).")
+ .arg(profile.name(), qConfigPri.fileName(), qConfigPri.errorString()));
+ }
+ const QList<QByteArray> lines = qConfigPri.readAll().split('\n');
+ const QByteArray magicString = "QT_DEFAULT_QPA_PLUGIN =";
+ foreach (const QByteArray &line, lines) {
+ const QByteArray simplifiedLine = line.simplified();
+ if (simplifiedLine.startsWith(magicString))
+ return QString::fromLatin1(simplifiedLine.mid(magicString.count()).trimmed());
+ }
+ } else {
+ const QString qtGuiConfigHeader = (qtEnv.frameworkBuild
+ ? qtEnv.libraryPath
+ : qtEnv.includePath)
+ + QStringLiteral("/QtGui")
+ + (qtEnv.frameworkBuild ? QStringLiteral(".framework/Headers") : QString())
+ + QStringLiteral("/qtgui-config.h");
+ QFile qtGuiConfigHeaderFile(qtGuiConfigHeader);
+ if (!qtGuiConfigHeaderFile.open(QIODevice::ReadOnly)) {
+ throw ErrorInfo(Tr::tr("Setting up Qt profile '%1' failed: Cannot open "
+ "file '%2' (%3).")
+ .arg(profile.name(), qtGuiConfigHeaderFile.fileName(),
+ qtGuiConfigHeaderFile.errorString()));
+ }
+
+ const QRegularExpression regexp(
+ QStringLiteral("^#define QT_QPA_DEFAULT_PLATFORM_NAME \"(?<name>.+)\""));
+ const QList<QByteArray> lines = qtGuiConfigHeaderFile.readAll().split('\n');
+ for (const QByteArray &line : lines) {
+ const QRegularExpressionMatch match = regexp.match(
+ QString::fromLatin1(line.simplified()));
+ if (match.hasMatch())
+ return QLatin1Char('q') + match.captured(QStringLiteral("name"));
+ }
}
+
if (module.isStaticLibrary)
qDebug("Warning: Could not determine default QPA plugin for static Qt.");
return QString();