aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2020-03-04 16:23:28 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2020-03-06 09:59:34 +0000
commitce503091a73a0024e6259b37a64fa192b3731581 (patch)
tree3e34230331041915406b64085b3558da08775239 /share
parent053c8f73ca67b9356f337aaf4ed58d2013cc2a77 (diff)
Qt support: Add support for moc metatype files
From Qt 5.15 on, moc can generate metatype information in JSON format. Task-number: QBS-1531 Change-Id: Ie6969f70bac51cc80f11057841ba8d4b7947c646 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'share')
-rw-r--r--share/qbs/module-providers/Qt/templates/core.qbs31
-rw-r--r--share/qbs/module-providers/Qt/templates/moc.js18
2 files changed, 43 insertions, 6 deletions
diff --git a/share/qbs/module-providers/Qt/templates/core.qbs b/share/qbs/module-providers/Qt/templates/core.qbs
index 8e990db22..f3bdf135a 100644
--- a/share/qbs/module-providers/Qt/templates/core.qbs
+++ b/share/qbs/module-providers/Qt/templates/core.qbs
@@ -52,6 +52,10 @@ Module {
property bool staticBuild: @staticBuild@
property stringList pluginMetaData: []
property bool enableKeywords: true
+ property bool generateMetaTypesFile
+ readonly property bool _generateMetaTypesFile: generateMetaTypesFile
+ && Utilities.versionCompare(version, "5.15") >= 0
+ property string metaTypesInstallDir
property stringList availableBuildVariants: @availableBuildVariants@
property string qtBuildVariant: {
@@ -209,7 +213,7 @@ Module {
cpp.windowsApiAdditionalPartitions: mkspecPath.startsWith("winrt-") ? ["phone"] : undefined
cpp.requireAppContainer: mkspecName.startsWith("winrt-")
- additionalProductTypes: ["qm"]
+ additionalProductTypes: ["qm", "qt.core.metatypes"]
validate: {
var validator = new ModUtils.PropertyValidator("Qt.core");
@@ -287,7 +291,7 @@ Module {
inputs: [objcppInput, cppInput]
auxiliaryInputs: "qt_plugin_metadata"
excludedInputs: "unmocable"
- outputFileTags: ["hpp", "unmocable"]
+ outputFileTags: ["hpp", "unmocable", "qt.core.metatypes.in"]
outputArtifacts: Moc.outputArtifacts.apply(Moc, arguments)
prepare: Moc.commands.apply(Moc, arguments)
}
@@ -296,7 +300,7 @@ Module {
inputs: "hpp"
auxiliaryInputs: ["qt_plugin_metadata", "cpp", "objcpp"];
excludedInputs: "unmocable"
- outputFileTags: ["hpp", "cpp", "moc_cpp", "unmocable"]
+ outputFileTags: ["hpp", "cpp", "moc_cpp", "unmocable", "qt.core.metatypes.in"]
outputArtifacts: Moc.outputArtifacts.apply(Moc, arguments)
prepare: Moc.commands.apply(Moc, arguments)
}
@@ -319,6 +323,27 @@ Module {
}
}
+ Rule {
+ multiplex: true
+ inputs: "qt.core.metatypes.in"
+ Artifact {
+ filePath: product.targetName.toLowerCase() + "_metatypes.json"
+ fileTags: "qt.core.metatypes"
+ qbs.install: product.Qt.core.metaTypesInstallDir
+ qbs.installDir: product.Qt.core.metaTypesInstallDir
+ }
+ prepare: {
+ var inputFilePaths = inputs["qt.core.metatypes.in"].map(function(a) {
+ return a.filePath;
+ });
+ var cmd = new Command(Moc.fullPath(product),
+ ["--collect-json", "-o", output.filePath].concat(inputFilePaths));
+ cmd.description = "generating " + output.fileName;
+ cmd.highlight = "codegen";
+ return cmd;
+ }
+ }
+
property path resourceSourceBase
property string resourcePrefix: "/"
property string resourceFileBaseName: product.targetName
diff --git a/share/qbs/module-providers/Qt/templates/moc.js b/share/qbs/module-providers/Qt/templates/moc.js
index aa67766b9..dfc72b7c1 100644
--- a/share/qbs/module-providers/Qt/templates/moc.js
+++ b/share/qbs/module-providers/Qt/templates/moc.js
@@ -30,7 +30,7 @@
var ModUtils = require("qbs.ModUtils");
-function args(product, input, outputFileName)
+function args(product, input, outputs)
{
var defines = product.cpp.compilerDefinesByLanguage;
if (input.fileTags.contains("objcpp"))
@@ -56,6 +56,15 @@ function args(product, input, outputFileName)
}
var pluginMetaData = product.Qt.core.pluginMetaData;
var args = [];
+ if (product.Qt.core._generateMetaTypesFile)
+ args.push("--output-json");
+ var outputFileName;
+ for (tag in outputs) {
+ if (tag !== "qt.core.metatypes.in") {
+ outputFileName = outputs[tag][0].filePath;
+ break;
+ }
+ }
args = args.concat(
defines.map(function(item) { return '-D' + item; }),
includePaths.map(function(item) { return '-I' + item; }),
@@ -90,12 +99,15 @@ function outputArtifacts(project, product, inputs, input)
+ input.completeBaseName + ".moc";
artifact.fileTags.push("hpp");
}
- return [artifact];
+ var artifacts = [artifact];
+ if (product.Qt.core._generateMetaTypesFile)
+ artifacts.push({filePath: artifact.filePath + ".json", fileTags: "qt.core.metatypes.in"});
+ return artifacts;
}
function commands(project, product, inputs, outputs, input, output)
{
- var cmd = new Command(fullPath(product), args(product, input, output.filePath));
+ var cmd = new Command(fullPath(product), args(product, input, outputs));
cmd.description = 'moc ' + input.fileName;
cmd.highlight = 'codegen';
return cmd;