diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-07-09 16:00:59 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-07-11 15:18:17 +0200 |
commit | 64b51ff6cc1dfc4e6af50d85b8cdef510d724f25 (patch) | |
tree | 986c4b2dcade3c47dd8bb99713addabd2f265cc9 /src/lib/qtprofilesetup/qtprofilesetup.cpp | |
parent | d51dddb4aefa72b2c3a662bb112c41c024a2288c (diff) |
libqtprofilesetup: Gather information about Qt plugins.
And create modules for them. These also handle the creation
of the "import" source file when building against a static Qt.
Change-Id: I883a1dd96c5e38c9d4bb5c13af807b1bf388f8b1
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/qtprofilesetup/qtprofilesetup.cpp')
-rw-r--r-- | src/lib/qtprofilesetup/qtprofilesetup.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp index 75b15b025..9c6bae4d3 100644 --- a/src/lib/qtprofilesetup/qtprofilesetup.cpp +++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp @@ -83,6 +83,29 @@ static QString pathToJSLiteral(const QString &path) return toJSLiteral(QDir::fromNativeSeparators(path)); } +static QString defaultQpaPlugin(const Profile &profile, const QtModuleInfo &module, + const QtEnvironment &qtEnv) +{ + 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 (module.isStaticLibrary) + qDebug("Warning: Could not determine default QPA plugin for static Qt."); + return QString(); +} + static void replaceSpecialValues(const QString &filePath, const Profile &profile, const QtModuleInfo &module, const QtEnvironment &qtEnvironment) { @@ -141,6 +164,10 @@ static void replaceSpecialValues(const QString &filePath, const Profile &profile + baIndent + "}"; } content.replace("@defines@", compilerDefines); + if (module.qbsName == QLatin1String("gui")) { + content.replace("@defaultQpaPlugin@", + utf8JSLiteral(defaultQpaPlugin(profile, module, qtEnvironment))); + } if (!module.modulePrefix.isEmpty()) { if (!propertiesString.isEmpty()) propertiesString += "\n "; @@ -151,6 +178,8 @@ static void replaceSpecialValues(const QString &filePath, const Profile &profile propertiesString += "\n "; propertiesString += "isStaticLibrary: true"; } + if (module.isPlugin) + content.replace("@className@", utf8JSLiteral(module.pluginData.className)); content.replace("@special_properties@", propertiesString); moduleFile.resize(0); moduleFile.write(content); @@ -171,6 +200,7 @@ static void createModules(Profile &profile, Settings *settings, "the existing profile of the same name (%2).").arg(profile.name(), removeError)); } copyTemplateFile(QLatin1String("QtModule.qbs"), qbsQtModuleBaseDir, profile.name()); + copyTemplateFile(QLatin1String("QtPlugin.qbs"), qbsQtModuleBaseDir, profile.name()); foreach (const QtModuleInfo &module, modules) { const QString qbsQtModuleDir = qbsQtModuleBaseDir + QLatin1Char('/') + module.qbsName; QString moduleTemplateFileName; @@ -181,6 +211,8 @@ static void createModules(Profile &profile, Settings *settings, moduleTemplateFileName = QLatin1String("gui.qbs"); } else if (module.qbsName == QLatin1String("phonon")) { moduleTemplateFileName = QLatin1String("phonon.qbs"); + } else if (module.isPlugin) { + moduleTemplateFileName = QLatin1String("plugin.qbs"); } else { moduleTemplateFileName = QLatin1String("module.qbs"); } |