diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-04-25 16:45:21 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-05-02 16:05:27 +0000 |
commit | 42fd8ec2495001c1435bbc34017416c18e691bb3 (patch) | |
tree | 0bf92596f2f4a4a6f29f95f1ab42feb7a537d375 /tools | |
parent | b3bc1d6a1c9390ed42a044bad956816836beaad6 (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.cpp | 46 |
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 |