summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-05-16 14:43:00 +0200
committerFriedemann Kleint <Friedemann.Kleint@digia.com>2013-05-16 15:49:49 +0200
commitf9402e561919a4b3f8cffe2aea7ce48bb3ebab74 (patch)
treee228ce2f0cbb43d6bbe908b78b9b3a1a1e4c3f44
parent4cd58c4d00ed1c091e1e9900bb76ee98f68da81d (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.cpp68
-rw-r--r--src/windeployqt/utils.cpp31
-rw-r--r--src/windeployqt/utils.h21
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);