diff options
author | Jake Petroules <jake.petroules@qt.io> | 2017-02-23 14:43:06 -0800 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-03-02 03:20:55 +0000 |
commit | 1950532998e35801ef1b635105d433b298a432b9 (patch) | |
tree | d1666134ecc90d20318868869ee3510cb6425cac /src | |
parent | 0de8b1b2202da675804af11da53dc2bac0ed2227 (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.cpp | 53 |
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(); |