aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/qtprofilesetup/templates
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/qtprofilesetup/templates')
-rw-r--r--src/lib/qtprofilesetup/templates/QtModule.qbs22
-rw-r--r--src/lib/qtprofilesetup/templates/QtPlugin.qbs20
-rw-r--r--src/lib/qtprofilesetup/templates/dbus.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/gui.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/module.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/plugin.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/plugin_support.qbs52
-rw-r--r--src/lib/qtprofilesetup/templates/qml.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/quick.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/scxml.qbs1
10 files changed, 99 insertions, 2 deletions
diff --git a/src/lib/qtprofilesetup/templates/QtModule.qbs b/src/lib/qtprofilesetup/templates/QtModule.qbs
index 51ddca223..04820ee29 100644
--- a/src/lib/qtprofilesetup/templates/QtModule.qbs
+++ b/src/lib/qtprofilesetup/templates/QtModule.qbs
@@ -13,6 +13,25 @@ Module {
Depends { name: "cpp" }
Depends { name: "Qt.core" }
+ Depends { name: "Qt.plugin_support" }
+ property stringList pluginTypes
+ Qt.plugin_support.pluginTypes: pluginTypes
+ Depends {
+ condition: Qt.core.staticBuild && !isPlugin
+ name: "Qt";
+ submodules: {
+ // We have to pull in all plugins here, because dependency resolving happens
+ // before module merging, and we don't know yet if someone set
+ // Qt.pluginSupport.pluginsByType in the product.
+ // The real filtering is done later by the plugin module files themselves.
+ var list = [];
+ var allPlugins = Qt.plugin_support.allPluginsByType;
+ for (var i = 0; i < (pluginTypes || []).length; ++i)
+ Array.prototype.push.apply(list, allPlugins[pluginTypes[i]])
+ return list;
+ }
+ }
+
property string qtModuleName
property path binPath: Qt.core.binPath
property path incPath: Qt.core.incPath
@@ -53,9 +72,10 @@ Module {
? frameworkPathsDebug: frameworkPathsRelease
cpp.linkerFlags: Qt.core.qtBuildVariant === "debug"
? linkerFlagsDebug : linkerFlagsRelease
+ property bool enableLinking: qtModuleName != undefined && hasLibrary
Properties {
- condition: qtModuleName != undefined && hasLibrary
+ condition: enableLinking
cpp.staticLibraries: staticLibs
cpp.dynamicLibraries: dynamicLibs
cpp.frameworks: mFrameworks.concat(!isStaticLibrary && Qt.core.frameworkBuild
diff --git a/src/lib/qtprofilesetup/templates/QtPlugin.qbs b/src/lib/qtprofilesetup/templates/QtPlugin.qbs
index 3cac14e56..23a6795f3 100644
--- a/src/lib/qtprofilesetup/templates/QtPlugin.qbs
+++ b/src/lib/qtprofilesetup/templates/QtPlugin.qbs
@@ -5,9 +5,27 @@ QtModule {
isPlugin: true
property string className
+ property stringList extendsModules
+
+ enableLinking: {
+ if (!base)
+ return false;
+ if (!isStaticLibrary)
+ return false;
+ if (!(Qt.plugin_support.enabledPlugins || []).contains(qtModuleName))
+ return false;
+ if (!extendsModules || extendsModules.length === 0)
+ return true;
+ for (var i = 0; i < extendsModules.length; ++i) {
+ var moduleName = extendsModules[i];
+ if (product.Qt[moduleName] && product.Qt[moduleName].present)
+ return true;
+ }
+ return false;
+ }
Rule {
- condition: isStaticLibrary
+ condition: enableLinking
multiplex: true
Artifact {
filePath: product.targetName + "_qt_plugin_import_"
diff --git a/src/lib/qtprofilesetup/templates/dbus.qbs b/src/lib/qtprofilesetup/templates/dbus.qbs
index e4fd09d4f..9245a63e3 100644
--- a/src/lib/qtprofilesetup/templates/dbus.qbs
+++ b/src/lib/qtprofilesetup/templates/dbus.qbs
@@ -62,6 +62,7 @@ QtModule {
libNameForLinkerRelease: @libNameForLinkerRelease@
libFilePathDebug: @libFilePathDebug@
libFilePathRelease: @libFilePathRelease@
+ pluginTypes: @pluginTypes@
cpp.defines: @defines@
cpp.includePaths: @includes@
diff --git a/src/lib/qtprofilesetup/templates/gui.qbs b/src/lib/qtprofilesetup/templates/gui.qbs
index 9770e94e1..eb69e0cad 100644
--- a/src/lib/qtprofilesetup/templates/gui.qbs
+++ b/src/lib/qtprofilesetup/templates/gui.qbs
@@ -48,6 +48,7 @@ QtModule {
libNameForLinkerRelease: @libNameForLinkerRelease@
libFilePathDebug: @libFilePathDebug@
libFilePathRelease: @libFilePathRelease@
+ pluginTypes: @pluginTypes@
cpp.defines: @defines@
cpp.includePaths: @includes@
diff --git a/src/lib/qtprofilesetup/templates/module.qbs b/src/lib/qtprofilesetup/templates/module.qbs
index f33c9109d..60ad106e5 100644
--- a/src/lib/qtprofilesetup/templates/module.qbs
+++ b/src/lib/qtprofilesetup/templates/module.qbs
@@ -21,6 +21,7 @@ QtModule {
libNameForLinkerRelease: @libNameForLinkerRelease@
libFilePathDebug: @libFilePathDebug@
libFilePathRelease: @libFilePathRelease@
+ pluginTypes: @pluginTypes@
cpp.defines: @defines@
cpp.includePaths: @includes@
cpp.libraryPaths: @libraryPaths@
diff --git a/src/lib/qtprofilesetup/templates/plugin.qbs b/src/lib/qtprofilesetup/templates/plugin.qbs
index 957988dd5..e73e2a4d9 100644
--- a/src/lib/qtprofilesetup/templates/plugin.qbs
+++ b/src/lib/qtprofilesetup/templates/plugin.qbs
@@ -22,5 +22,6 @@ QtPlugin {
libFilePathDebug: @libFilePathDebug@
libFilePathRelease: @libFilePathRelease@
cpp.libraryPaths: @libraryPaths@
+ extendsModules: @extends@
@additionalContent@
}
diff --git a/src/lib/qtprofilesetup/templates/plugin_support.qbs b/src/lib/qtprofilesetup/templates/plugin_support.qbs
new file mode 100644
index 000000000..c7e479f55
--- /dev/null
+++ b/src/lib/qtprofilesetup/templates/plugin_support.qbs
@@ -0,0 +1,52 @@
+Module {
+ // Set by user.
+ property varList pluginsByType
+
+ // Set by Qt modules.
+ property stringList pluginTypes
+
+ // Set by setup-qt.
+ readonly property var allPluginsByType: @allPluginsByType@
+ readonly property stringList nonEssentialPlugins: @nonEssentialPlugins@
+
+ // Derived.
+ readonly property var defaultPluginsByType: {
+ var map = {};
+ for (var i = 0; i < (pluginTypes || []).length; ++i) {
+ var pType = pluginTypes[i];
+ map[pType] = (allPluginsByType[pType] || []).filter(function(p) {
+ return !nonEssentialPlugins.contains(p); });
+ }
+ return map;
+ }
+ readonly property var effectivePluginsByType: {
+ var ppt = pluginsByType || [];
+ var eppt = {};
+ for (var i = 0; i < ppt.length; ++i) {
+ var listEntry = ppt[i];
+ for (var pluginType in listEntry) {
+ var newValue = listEntry[pluginType];
+ if (!newValue)
+ newValue = [];
+ else if (typeof newValue == "string")
+ newValue = [newValue];
+ if (!Array.isArray(newValue))
+ throw "Invalid value '" + newValue + "' in Qt.plugin_support.pluginsByType";
+ eppt[pluginType] = (eppt[pluginType] || []).uniqueConcat(newValue);
+ }
+ }
+ var dppt = defaultPluginsByType;
+ for (var pluginType in dppt) {
+ if (!eppt[pluginType])
+ eppt[pluginType] = dppt[pluginType];
+ }
+ return eppt;
+ }
+ readonly property stringList enabledPlugins: {
+ var list = [];
+ var eppt = effectivePluginsByType;
+ for (var t in eppt)
+ Array.prototype.push.apply(list, eppt[t]);
+ return list;
+ }
+}
diff --git a/src/lib/qtprofilesetup/templates/qml.qbs b/src/lib/qtprofilesetup/templates/qml.qbs
index 8c518c9f1..51bb5faa2 100644
--- a/src/lib/qtprofilesetup/templates/qml.qbs
+++ b/src/lib/qtprofilesetup/templates/qml.qbs
@@ -42,6 +42,7 @@ QtModule {
libNameForLinkerRelease: @libNameForLinkerRelease@
libFilePathDebug: @libFilePathDebug@
libFilePathRelease: @libFilePathRelease@
+ pluginTypes: @pluginTypes@
cpp.defines: @defines@
cpp.includePaths: @includes@
cpp.libraryPaths: @libraryPaths@
diff --git a/src/lib/qtprofilesetup/templates/quick.qbs b/src/lib/qtprofilesetup/templates/quick.qbs
index 87cdee49d..67394cabb 100644
--- a/src/lib/qtprofilesetup/templates/quick.qbs
+++ b/src/lib/qtprofilesetup/templates/quick.qbs
@@ -57,6 +57,7 @@ QtModule {
libNameForLinkerRelease: @libNameForLinkerRelease@
libFilePathDebug: @libFilePathDebug@
libFilePathRelease: @libFilePathRelease@
+ pluginTypes: @pluginTypes@
cpp.defines: @defines@
cpp.includePaths: @includes@
cpp.libraryPaths: @libraryPaths@
diff --git a/src/lib/qtprofilesetup/templates/scxml.qbs b/src/lib/qtprofilesetup/templates/scxml.qbs
index 1964671f8..b02a49246 100644
--- a/src/lib/qtprofilesetup/templates/scxml.qbs
+++ b/src/lib/qtprofilesetup/templates/scxml.qbs
@@ -69,6 +69,7 @@ QtModule {
libNameForLinkerRelease: @libNameForLinkerRelease@
libFilePathDebug: @libFilePathDebug@
libFilePathRelease: @libFilePathRelease@
+ pluginTypes: @pluginTypes@
cpp.defines: @defines@
cpp.includePaths: @includes@