aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-04-25 16:45:21 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-05-02 16:05:27 +0000
commit42fd8ec2495001c1435bbc34017416c18e691bb3 (patch)
tree0bf92596f2f4a4a6f29f95f1ab42feb7a537d375 /tools
parentb3bc1d6a1c9390ed42a044bad956816836beaad6 (diff)
Fix qmlimportscanner to find Qt Quick Controls 2 styles
The styles are installed to eg. qml/QtQuick/Controls.2/Material. That is, the version is in the parent module. See 3c5e438 for more details. Change-Id: Id5083c7934071666dd5e11511f16dea07d3104bf Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Marco Benelli <marco.benelli@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/qmlimportscanner/main.cpp46
1 files changed, 34 insertions, 12 deletions
diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp
index dcb9709bb8..2569d78c63 100644
--- a/tools/qmlimportscanner/main.cpp
+++ b/tools/qmlimportscanner/main.cpp
@@ -157,24 +157,46 @@ QVariantMap pluginsForModulePath(const QString &modulePath) {
// Search for a given qml import in g_qmlImportPaths.
QString resolveImportPath(const QString &uri, const QString &version)
{
- // Create path from uri (QtQuick.Controls -> QtQuick/Controls)
- QString path = uri;
- path.replace(QLatin1Char('.'), QLatin1Char('/'));
- // search for the most spesifc version first
- QString versionedName = path + QLatin1Char('.') + version;
+ const QLatin1Char dot('.');
+ const QLatin1Char slash('/');
+ const QStringList parts = uri.split(dot, QString::SkipEmptyParts);
+
+ QString ver = version;
while (true) {
- // look in all g_qmlImportPaths
foreach (const QString &qmlImportPath, g_qmlImportPaths) {
- QString candidatePath = QDir::cleanPath(qmlImportPath + QLatin1Char('/') + versionedName);
- if (QDir(candidatePath).exists())
- return candidatePath; // import found
+ // Search for the most specific version first, and search
+ // also for the version in parent modules. For example:
+ // - qml/QtQml/Models.2.0
+ // - qml/QtQml.2.0/Models
+ // - qml/QtQml/Models.2
+ // - qml/QtQml.2/Models
+ // - qml/QtQml/Models
+ if (ver.isEmpty()) {
+ const QString candidatePath = QDir::cleanPath(qmlImportPath + slash + parts.join(slash));
+ if (QDir(candidatePath).exists())
+ return candidatePath; // import found
+ } else {
+ for (int index = parts.count() - 1; index >= 0; --index) {
+ const QString candidatePath = QDir::cleanPath(qmlImportPath + slash
+ + parts.mid(0, index + 1).join(slash)
+ + dot + ver + slash
+ + parts.mid(index + 1).join(slash));
+
+ if (QDir(candidatePath).exists())
+ return candidatePath; // import found
+ }
+ }
}
// remove the last version digit; stop if there are none left
- int lastDot = versionedName.lastIndexOf(QLatin1Char('.'));
- if (lastDot == -1)
+ if (ver.isEmpty())
break;
- versionedName = versionedName.mid(0, lastDot);
+
+ int lastDot = ver.lastIndexOf(dot);
+ if (lastDot == -1)
+ ver.clear();
+ else
+ ver = ver.mid(0, lastDot);
}
return QString(); // not found