diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2013-05-16 14:43:00 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2013-05-16 15:49:49 +0200 |
commit | f9402e561919a4b3f8cffe2aea7ce48bb3ebab74 (patch) | |
tree | e228ce2f0cbb43d6bbe908b78b9b3a1a1e4c3f44 | |
parent | 4cd58c4d00ed1c091e1e9900bb76ee98f68da81d (diff) |
windeployqt: Copy Quick 1, 2 imports.
Change the plugintype enumeration to be a module enumeration
which works better. Deploy imports with some smartness.
Change-Id: I4777816a24f4e13fb5416e9467357464e4e7ac21
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r-- | src/windeployqt/main.cpp | 68 | ||||
-rw-r--r-- | src/windeployqt/utils.cpp | 31 | ||||
-rw-r--r-- | src/windeployqt/utils.h | 21 |
3 files changed, 83 insertions, 37 deletions
diff --git a/src/windeployqt/main.cpp b/src/windeployqt/main.cpp index dcfe8b2d1..a886faa97 100644 --- a/src/windeployqt/main.cpp +++ b/src/windeployqt/main.cpp @@ -49,6 +49,7 @@ bool optPlugins = true; bool optLibraries = true; +bool optQuickImports = true; bool optHelp = false; Platform platform = Windows; @@ -61,6 +62,7 @@ static const char usageC[] = "a Windows/WinRT application to the build-directory.\n\n" "Options: -no-plugins : Skip plugin deployment\n" " -no-libraries : Skip library deployment\n" +" -no-quick-imports : Skip deployment of Qt Quick imports\n" " -h : Display help\n" " -verbose=<0-3> : 0 = no output, 1 = progress (default),\n" " 2 = normal, 3 = debug\n"; @@ -73,6 +75,8 @@ static inline bool parseArguments(const QStringList &arguments) optPlugins = false; } else if (argument == QLatin1String("-no-libraries")) { optLibraries = false; + } else if (argument == QLatin1String("-no-quick-imports")) { + optQuickImports = false; } else if (argument.startsWith(QLatin1String("-h"))) { optHelp = true; } else if (argument.startsWith(QLatin1String("-verbose"))) { @@ -137,23 +141,27 @@ static bool findDependentQtLibraries(const QString &qtBinDir, const QString &bin return true; } -static unsigned requiredQtPlugins(const QStringList &qtLibraries) +static unsigned qtModules(const QStringList &qtLibraries) { unsigned result = 0; if (!qtLibraries.filter(QStringLiteral("Qt5Gui"), Qt::CaseInsensitive).isEmpty()) - result |= GuiPlugin | PlatformPlugin; + result |= GuiModule; if (!qtLibraries.filter(QStringLiteral("Qt5Sql"), Qt::CaseInsensitive).isEmpty()) - result |= SqlPlugin; + result |= SqlModule; if (!qtLibraries.filter(QStringLiteral("Qt5Network"), Qt::CaseInsensitive).isEmpty()) - result |= NetworkPlugin; + result |= NetworkModule; if (!qtLibraries.filter(QStringLiteral("Qt5PrintSupport"), Qt::CaseInsensitive).isEmpty()) - result |= PrintSupportPlugin; + result |= PrintSupportModule; if (!qtLibraries.filter(QStringLiteral("Qt5Multimedia"), Qt::CaseInsensitive).isEmpty()) - result |= MultimediaPlugin; - if (!qtLibraries.filter(QStringLiteral("Qt5Quick"), Qt::CaseInsensitive).isEmpty() - || !qtLibraries.filter(QStringLiteral("Qt5Declarative"), Qt::CaseInsensitive).isEmpty()) { - result |= QmlToolingPlugin; - } + result |= MultimediaModule; + if (!qtLibraries.filter(QStringLiteral("Qt5Sensors"), Qt::CaseInsensitive).isEmpty()) + result |= SensorsModule; + if (!qtLibraries.filter(QStringLiteral("Qt5Quick"), Qt::CaseInsensitive).isEmpty()) + result |= Quick2Module; + if (!qtLibraries.filter(QStringLiteral("Qt5Declarative"), Qt::CaseInsensitive).isEmpty()) + result |= Quick1Module; + if (!qtLibraries.filter(QStringLiteral("Qt5WebKit"), Qt::CaseInsensitive).isEmpty()) + result |= WebKitModule; return result; } @@ -238,7 +246,8 @@ int main(int argc, char **argv) // Find the plugins and check whether ANGLE, D3D are required on the platform plugin. QString platformPlugin; - const QStringList plugins = findQtPlugins(requiredQtPlugins(dependentQtLibs), isDebug, platform, &platformPlugin, &errorMessage); + const unsigned usedQtModules = qtModules(dependentQtLibs); + const QStringList plugins = findQtPlugins(usedQtModules, isDebug, platform, &platformPlugin, &errorMessage); if (optVerboseLevel > 1) std::fprintf(stderr, "Plugins: %s\n", qPrintable(plugins.join(QLatin1Char(',')))); @@ -300,5 +309,42 @@ int main(int argc, char **argv) } } } // optPlugins + + // Update Quick imports + if (optQuickImports && (usedQtModules & (Quick1Module | Quick2Module))) { + const QStringList importNameFilters = QStringList() << QStringLiteral("*.qml") + << QStringLiteral("*.js") << QStringLiteral("*.dll") + << QStringLiteral("qmldir") << QStringLiteral("*.qmltypes"); + if (usedQtModules & Quick2Module) { + const QString quick2ImportPath = qmakeVariables.value(QStringLiteral("QT_INSTALL_QML")); + QStringList quick2Imports; + quick2Imports << QStringLiteral("QtQml") << QStringLiteral("QtQuick") << QStringLiteral("QtQuick.2"); + if (usedQtModules & MultimediaModule) + quick2Imports << QStringLiteral("QtMultimedia"); + if (usedQtModules & SensorsModule) + quick2Imports << QStringLiteral("QtSensors"); + if (usedQtModules & WebKitModule) + quick2Imports << QStringLiteral("QtWebKit"); + foreach (const QString &quick2Import, quick2Imports) { + if (!updateFile(quick2ImportPath + slash + quick2Import, importNameFilters, optDirectory, &errorMessage)) { + std::fprintf(stderr, "%s\n", qPrintable(errorMessage)); + return 1; + } + } + } // Quick 2 + if (usedQtModules & Quick1Module) { + const QString quick1ImportPath = qmakeVariables.value(QStringLiteral("QT_INSTALL_IMPORTS")); + QStringList quick1Imports(QStringLiteral("Qt")); + if (usedQtModules & WebKitModule) + quick1Imports << QStringLiteral("QtWebKit"); + foreach (const QString &quick1Import, quick1Imports) { + if (!updateFile(quick1ImportPath + slash + quick1Import, importNameFilters, optDirectory, &errorMessage)) { + std::fprintf(stderr, "%s\n", qPrintable(errorMessage)); + return 1; + } + } + } // Quick 1 + } // optQuickImports + return 0; } diff --git a/src/windeployqt/utils.cpp b/src/windeployqt/utils.cpp index 58d294a1b..b37ca0414 100644 --- a/src/windeployqt/utils.cpp +++ b/src/windeployqt/utils.cpp @@ -268,28 +268,26 @@ QString queryQMake(const QString &variable, QString *errorMessage) return QString::fromLocal8Bit(stdOut).trimmed(); } -static inline unsigned qtPluginType(const QString &subDirName) +static inline unsigned qtModuleForPlugin(const QString &subDirName) { if (subDirName == QLatin1String("accessible") || subDirName == QLatin1String("iconengines") - || subDirName == QLatin1String("imageformats")) { - return GuiPlugin; + || subDirName == QLatin1String("imageformats") || subDirName == QLatin1String("platforms")) { + return GuiModule; } - if (subDirName == QLatin1String("platforms")) - return GuiPlugin | PlatformPlugin; if (subDirName == QLatin1String("bearer")) - return NetworkPlugin; + return NetworkModule; if (subDirName == QLatin1String("sqldrivers")) - return SqlPlugin; + return SqlModule; if (subDirName == QLatin1String("mediaservice") || subDirName == QLatin1String("playlistformats")) - return MultimediaPlugin; + return MultimediaModule; if (subDirName == QLatin1String("printsupport")) - return PrintSupportPlugin; + return PrintSupportModule; if (subDirName == QLatin1String("qmltooling")) - return PrintSupportPlugin; - return OtherPlugin; // "designer" + return Quick1Module | Quick2Module; + return 0; // "designer" } -QStringList findQtPlugins(unsigned pluginTypes, bool debug, Platform platform, QString *platformPlugin, QString *errorMessage) +QStringList findQtPlugins(unsigned usedQtModules, bool debug, Platform platform, QString *platformPlugin, QString *errorMessage) { const QString qtPluginsDirName = queryQMake(QStringLiteral("QT_INSTALL_PLUGINS"), errorMessage); if (qtPluginsDirName.isEmpty()) @@ -297,13 +295,14 @@ QStringList findQtPlugins(unsigned pluginTypes, bool debug, Platform platform, Q QDir pluginsDir(qtPluginsDirName); QStringList result; foreach (const QString &subDirName, pluginsDir.entryList(QStringList(QLatin1String("*")), QDir::Dirs | QDir::NoDotAndDotDot)) { - const unsigned type = qtPluginType(subDirName); - if (type & pluginTypes) { + const unsigned module = qtModuleForPlugin(subDirName); + if (module & usedQtModules) { const QString subDirPath = qtPluginsDirName + QLatin1Char('/') + subDirName; QDir subDir(subDirPath); // Filter for platform or any. QString filter; - if (type & PlatformPlugin) { + const bool isPlatformPlugin = subDirName == QLatin1String("platforms"); + if (isPlatformPlugin) { filter = platform == WinRt ? QStringLiteral("qwinrt") : QStringLiteral("qwindows"); if (debug) filter.append(QLatin1Char('d')); @@ -314,7 +313,7 @@ QStringList findQtPlugins(unsigned pluginTypes, bool debug, Platform platform, Q foreach (const QString &dll, subDir.entryList(QStringList(filter), QDir::Files)) { const QString plugin = subDirPath + QLatin1Char('/') + dll; result.push_back(plugin); - if ((type & PlatformPlugin) && platformPlugin) + if (isPlatformPlugin && platformPlugin) *platformPlugin = plugin; } // for filter } // type matches diff --git a/src/windeployqt/utils.h b/src/windeployqt/utils.h index 8e7a92c54..20417df4a 100644 --- a/src/windeployqt/utils.h +++ b/src/windeployqt/utils.h @@ -54,18 +54,19 @@ QMap<QString, QString> queryQMakeAll(QString *errorMessage); QString queryQMake(const QString &variable, QString *errorMessage); QStringList findDependentLibs(const QString &binary, QString *errorMessage); -enum QtPluginType { - GuiPlugin = 0x1, - PlatformPlugin = 0x2, - SqlPlugin = 0x4, - NetworkPlugin = 0x8, - MultimediaPlugin = 0x10, - PrintSupportPlugin = 0x20, - QmlToolingPlugin = 0x40, - OtherPlugin = 0x80 +enum QtModule { + GuiModule = 0x1, + SqlModule = 0x4, + NetworkModule = 0x8, + MultimediaModule = 0x10, + PrintSupportModule = 0x20, + Quick1Module = 0x40, + Quick2Module = 0x80, + SensorsModule = 0x100, + WebKitModule = 0x400 }; -QStringList findQtPlugins(unsigned pluginTypes, bool debug, Platform platform, +QStringList findQtPlugins(unsigned usedQtModules, bool debug, Platform platform, QString *platformPlugin, QString *errorMessage); bool updateFile(const QString &sourceFileName, const QStringList &nameFilters, const QString &targetDirectory, QString *errorMessage); |