diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qmlimportscanner/main.cpp | 46 | ||||
-rw-r--r-- | tools/qmlplugindump/Info.plist | 6 | ||||
-rw-r--r-- | tools/qmlplugindump/main.cpp | 2 |
3 files changed, 38 insertions, 16 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 diff --git a/tools/qmlplugindump/Info.plist b/tools/qmlplugindump/Info.plist index f35846d048..e6c4914ca0 100644 --- a/tools/qmlplugindump/Info.plist +++ b/tools/qmlplugindump/Info.plist @@ -5,11 +5,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleSignature</key> - <string>@TYPEINFO@</string> + <string>????</string> <key>CFBundleExecutable</key> - <string>@EXECUTABLE@</string> + <string>qmlplugindump</string> <key>CFBundleIdentifier</key> - <string>com.nokia.qt.qmlplugindump</string> + <string>org.qt-project.qt.qmlplugindump</string> <key>LSUIElement</key> <string>1</string> </dict> diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp index 7870e3a9df..d0d70fd0fe 100644 --- a/tools/qmlplugindump/main.cpp +++ b/tools/qmlplugindump/main.cpp @@ -771,7 +771,7 @@ static bool readDependenciesData(QString dependenciesFile, const QByteArray &fil QString version = obj.value(QStringLiteral("version")).toString(); if (name.isEmpty() || urisToSkip.contains(name) || version.isEmpty()) continue; - if (name.endsWith(QLatin1String("Private"))) { + if (name.endsWith(QLatin1String("Private"), Qt::CaseInsensitive)) { if (verbose) std::cerr << "skipping private dependecy " << qPrintable( name ) << " " << qPrintable(version) << std::endl; |