aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmlplugindump
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2019-09-26 11:21:13 +0200
committerUlf Hermann <ulf.hermann@qt.io>2019-09-26 13:03:29 +0200
commit8af52c803b2d7d5084d51f48a827a12c4b348ce2 (patch)
tree94a98f0d2ed2941d88747af6f8f5bb94e560cfc5 /tools/qmlplugindump
parenta44cb389d3e59baaf0e3e85c682a49df7b90fad4 (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')
-rw-r--r--tools/qmlplugindump/main.cpp21
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()) {