summaryrefslogtreecommitdiffstats
path: root/src/tools/windeployqt/main.cpp
diff options
context:
space:
mode:
authorOliver Wolff <oliver.wolff@qt.io>2023-03-29 14:14:38 +0200
committerOliver Wolff <oliver.wolff@qt.io>2023-04-12 14:54:06 +0200
commit6d9a8c30e927779c0fa03ff733bab9e1d884dd2e (patch)
tree26a5d55321e6deb9fcc50959199da20d2c38344b /src/tools/windeployqt/main.cpp
parentf8a3489bf012c7937653bd004640dabcd4d4b24f (diff)
windeployqt: Add option to skip plugin types during deployment
Pick-to: 6.5 Fixes: QTBUG-112317 Change-Id: Idb294105ee2006a36067d3967af1b7b55b375bd7 Reviewed-by: Timothée Keller <timothee.keller@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/tools/windeployqt/main.cpp')
-rw-r--r--src/tools/windeployqt/main.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/tools/windeployqt/main.cpp b/src/tools/windeployqt/main.cpp
index 351a8436ea..bec0291ae2 100644
--- a/src/tools/windeployqt/main.cpp
+++ b/src/tools/windeployqt/main.cpp
@@ -163,7 +163,7 @@ struct Options {
bool translations = true;
bool systemD3dCompiler = true;
bool compilerRunTime = false;
- unsigned disabledPlugins = 0;
+ QStringList disabledPluginTypes;
bool softwareRasterizer = true;
Platform platform = WindowsDesktopMsvc;
ModuleBitset additionalLibraries;
@@ -379,6 +379,11 @@ static inline int parseArguments(const QStringList &arguments, QCommandLineParse
QStringLiteral("Skip plugin deployment."));
parser->addOption(noPluginsOption);
+ QCommandLineOption skipPluginTypesOption(QStringLiteral("skip-plugin-types"),
+ QStringLiteral("A comma-separated list of plugin types that are not deployed (qmltooling,generic)."),
+ QStringLiteral("plugin types"));
+ parser->addOption(skipPluginTypesOption);
+
QCommandLineOption noLibraryOption(QStringLiteral("no-libraries"),
QStringLiteral("Skip library deployment."));
parser->addOption(noLibraryOption);
@@ -498,6 +503,8 @@ static inline int parseArguments(const QStringList &arguments, QCommandLineParse
return CommandLineParseError;
}
+ if (parser->isSet(skipPluginTypesOption))
+ options->disabledPluginTypes = parser->value(skipPluginTypesOption).split(u',');
if (parser->isSet(releaseWithDebugInfoOption))
std::wcerr << "Warning: " << releaseWithDebugInfoOption.names().first() << " is obsolete.";
@@ -824,15 +831,22 @@ static qint64 qtModule(QString module, const QString &infix)
// Return the path if a plugin is to be deployed
static QString deployPlugin(const QString &plugin, const QDir &subDir,
ModuleBitset *usedQtModules, const ModuleBitset &disabledQtModules,
- unsigned disabledPlugins,
+ const QStringList &disabledPluginTypes,
const QString &libraryLocation, const QString &infix,
Platform platform)
{
+ const QString subDirName = subDir.dirName();
+ // Filter out disabled plugins
+ if (disabledPluginTypes.contains(subDirName)) {
+ std::wcout << "Skipping plugin " << plugin << " due to skipped plugin type " << subDirName << '\n';
+ return {};
+ }
+
const QString pluginPath = subDir.absoluteFilePath(plugin);
// Deploy QUiTools plugins as is without further dependency checking.
// The user needs to ensure all required libraries are present (would
// otherwise pull QtWebEngine for its plugin).
- if (subDir.dirName() == u"designer")
+ if (subDirName == u"designer")
return pluginPath;
QStringList dependentQtLibs;
@@ -873,7 +887,7 @@ static QString deployPlugin(const QString &plugin, const QDir &subDir,
}
QStringList findQtPlugins(ModuleBitset *usedQtModules, const ModuleBitset &disabledQtModules,
- unsigned disabledPlugins,
+ const QStringList &disabledPluginTypes,
const QString &qtPluginsDirName, const QString &libraryLocation,
const QString &infix,
DebugMatchMode debugMatchModeIn, Platform platform, QString *platformPlugin)
@@ -897,9 +911,7 @@ QStringList findQtPlugins(ModuleBitset *usedQtModules, const ModuleBitset &disab
? MatchDebugOrRelease // QTBUG-44331: Debug detection does not work for webengine, deploy all.
: debugMatchModeIn;
QDir subDir(subDirFi.absoluteFilePath());
- // Filter out disabled plugins
- if (disabledQtModules.test(QtQmlToolingModuleId) && subDirName == "qmltooling"_L1)
- continue;
+
// Filter for platform or any.
QString filter;
const bool isPlatformPlugin = subDirName == "platforms"_L1;
@@ -924,7 +936,7 @@ QStringList findQtPlugins(ModuleBitset *usedQtModules, const ModuleBitset &disab
for (const QString &plugin : plugins) {
const QString pluginPath =
deployPlugin(plugin, subDir, usedQtModules, disabledQtModules,
- disabledPlugins, libraryLocation, infix, platform);
+ disabledPluginTypes, libraryLocation, infix, platform);
if (!pluginPath.isEmpty()) {
if (isPlatformPlugin)
*platformPlugin = subDir.absoluteFilePath(plugin);
@@ -1370,7 +1382,7 @@ static DeployResult deploy(const Options &options, const QMap<QString, QString>
// For non-QML applications, disable QML to prevent it from being pulled in by the
// qtaccessiblequick plugin.
disabled,
- options.disabledPlugins, qtpathsVariables.value(QStringLiteral("QT_INSTALL_PLUGINS")),
+ options.disabledPluginTypes, qtpathsVariables.value(QStringLiteral("QT_INSTALL_PLUGINS")),
libraryLocation, infix, debugMatchMode, options.platform, &platformPlugin);
// Apply options flags and re-add library names.