diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2019-09-26 11:21:13 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-09-26 13:03:29 +0200 |
commit | 8af52c803b2d7d5084d51f48a827a12c4b348ce2 (patch) | |
tree | 94a98f0d2ed2941d88747af6f8f5bb94e560cfc5 /tools/qmlplugindump/main.cpp | |
parent | a44cb389d3e59baaf0e3e85c682a49df7b90fad4 (diff) |
Loosen qmlplugindump's checking of URI and major version
If not given a "--strict" argument, qmlplugindump will ignore the given
major version and only check the URI as prefix, not as exact match. This
is in line with what qmlplugindump did in version 5.13 and before.
Fixes: QTBUG-78745
Change-Id: Ib2803d47e6cb60c797fec8dfaa628278307d4cd4
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tools/qmlplugindump/main.cpp')
-rw-r--r-- | tools/qmlplugindump/main.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp index 4733a8f676..196d6e39e6 100644 --- a/tools/qmlplugindump/main.cpp +++ b/tools/qmlplugindump/main.cpp @@ -105,12 +105,18 @@ struct QmlVersionInfo QString pluginImportUri; int majorVersion; int minorVersion; + bool strict; }; static bool matchingImportUri(const QQmlType &ty, const QmlVersionInfo& versionInfo) { - return (versionInfo.pluginImportUri == ty.module() - && (ty.majorVersion() == versionInfo.majorVersion || ty.majorVersion() == -1)) - || ty.module().isEmpty(); + if (versionInfo.strict) { + return (versionInfo.pluginImportUri == ty.module() + && (ty.majorVersion() == versionInfo.majorVersion || ty.majorVersion() == -1)) + || ty.module().isEmpty(); + } + return ty.module().isEmpty() + || versionInfo.pluginImportUri == ty.module() + || ty.module().startsWith(versionInfo.pluginImportUri + QLatin1Char('.')); } void collectReachableMetaObjects(const QMetaObject *meta, QSet<const QMetaObject *> *metas, const QmlVersionInfo &info, bool extended = false, bool alreadyChangedModule = false) @@ -1057,6 +1063,7 @@ int main(int argc, char *argv[]) QString dependenciesFile; QString mergeFile; bool forceQtQuickDependency = true; + bool strict = false; enum Action { Uri, Path, Builtins }; Action action = Uri; { @@ -1121,6 +1128,10 @@ int main(int argc, char *argv[]) } else if (arg == QLatin1String("--qapp") || arg == QLatin1String("-qapp")) { continue; + } else if (arg == QLatin1String("--strict") + || arg == QLatin1String("-strict")) { + strict = true; + continue; } else { std::cerr << "Invalid argument: " << qPrintable(arg) << std::endl; return EXIT_INVALIDARGUMENTS; @@ -1231,7 +1242,7 @@ int main(int argc, char *argv[]) int majorVersion = qtQmlMajorVersion, minorVersion = qtQmlMinorVersion; QmlVersionInfo info; if (action == Builtins) { - QSet<const QMetaObject *> builtins = collectReachableMetaObjects(&engine, uncreatableMetas, singletonMetas, defaultCompositeTypes, {QLatin1String("Qt"), majorVersion, minorVersion}); + QSet<const QMetaObject *> builtins = collectReachableMetaObjects(&engine, uncreatableMetas, singletonMetas, defaultCompositeTypes, {QLatin1String("Qt"), majorVersion, minorVersion, strict}); Q_ASSERT(builtins.size() == 1); metas.insert(*builtins.begin()); } else { @@ -1291,7 +1302,7 @@ int main(int argc, char *argv[]) return EXIT_IMPORTERROR; } } - info = {pluginImportUri, majorVersion, minorVersion}; + info = {pluginImportUri, majorVersion, minorVersion, strict}; QSet<const QMetaObject *> candidates = collectReachableMetaObjects(&engine, uncreatableMetas, singletonMetas, compositeTypes, info, defaultTypes); for (QString iter: compositeTypes.keys()) { |