diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2020-03-04 16:23:28 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2020-03-06 09:59:34 +0000 |
commit | ce503091a73a0024e6259b37a64fa192b3731581 (patch) | |
tree | 3e34230331041915406b64085b3558da08775239 /share | |
parent | 053c8f73ca67b9356f337aaf4ed58d2013cc2a77 (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.qbs | 31 | ||||
-rw-r--r-- | share/qbs/module-providers/Qt/templates/moc.js | 18 |
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; |