windeployqt: Change option -qmldir to accept multiple values.
authorFriedemann Kleint <Friedemann.Kleint@digia.com>
Thu, 12 Dec 2013 12:50:38 +0000 (14:50 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 12 Dec 2013 17:25:34 +0000 (18:25 +0100)
When deploying large applications like Qt Creator, it is then possible
to restrict scanning by qmlimportscanner to the modules that actually
use Quick2.

Change-Id: I39d138d5f67a56b251e27c9b48b4ccee020b97aa
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
src/windeployqt/main.cpp

index 6a8e651..c6b1f0b 100644 (file)
@@ -192,7 +192,7 @@ struct Options {
     unsigned additionalLibraries;
     unsigned disabledLibraries;
     unsigned updateFileFlags;
-    QString qmlDirectory; // Project's QML files.
+    QStringList qmlDirectories; // Project's QML files.
     QString directory;
     QString libraryDirectory;
     QString binary;
@@ -356,7 +356,7 @@ static inline int parseArguments(const QStringList &arguments, QCommandLineParse
         options->directory = parser->value(dirOption);
 
     if (parser->isSet(qmlDirOption))
-        options->qmlDirectory = parser->value(qmlDirOption);
+        options->qmlDirectories = parser->values(qmlDirOption);
 
     const QString &file = posArgs.front();
     const QFileInfo fi(QDir::cleanPath(file));
@@ -716,8 +716,15 @@ static DeployResult deploy(const Options &options,
     // Scan Quick2 imports
     QmlImportScanResult qmlScanResult;
     if (options.quickImports && usesQml2) {
-        const QString qmlDirectory = options.qmlDirectory.isEmpty() ? findQmlDirectory(options.platform, options.directory) : options.qmlDirectory;
-        if (!qmlDirectory.isEmpty()) {
+        QStringList qmlDirectories = options.qmlDirectories;
+        if (qmlDirectories.isEmpty()) {
+            const QString qmlDirectory = findQmlDirectory(options.platform, options.directory);
+            if (!qmlDirectory.isEmpty())
+                qmlDirectories.append(qmlDirectory);
+        }
+        foreach (const QString &qmlDirectory, qmlDirectories) {
+            if (optVerboseLevel >= 1)
+                std::printf("Scanning %s:\n", qPrintable(QDir::toNativeSeparators(qmlDirectory)));
             qmlScanResult = runQmlImportScanner(qmlDirectory, qmakeVariables.value(QStringLiteral("QT_INSTALL_QML")), options.platform, isDebug, errorMessage);
             if (!qmlScanResult.ok)
                 return result;