Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import qbs
- import qbs.File
- import qbs.FileInfo
- import "proto.js" as HelperFunctions
- Module {
- // Depends { name: "cpp" }
- property bool enableCompilerWarnings: false
- property string protocBinary: "protoc"
- property string outputTag: "hpp"
- property bool uniqueSymbolPrefix: false
- readonly property string outputDir: product.buildDirectory + "/proto"
- Properties {
- condition: {
- for (var i = 0; i < product.dependencies.length; i++) {
- var dep = product.dependencies[i];
- if (dep.name == "cpp")
- return true;
- }
- return false;
- }
- cpp.staticLibraries: ["protobuf"]
- }
- Rule {
- inputs: ["proto.input"]
- multiplex: true
- outputFileTags: ["hpp", "cpp"]
- outputArtifacts: {
- var outputDir = product.moduleProperty("proto", "outputDir");
- var artifacts = [];
- inputs["proto.input"].map(function(inp) {
- artifacts.push({
- fileTags: ["hpp"],
- filePath: outputDir + "/" + FileInfo.baseName(inp.fileName) + ".pb.h",
- cpp: {
- includePaths: [].concat(inp.cpp.includePaths, outputDir),
- // staticLibraries: [].concat(inp.cpp.staticLibraries, "protobuf"),
- }
- });
- artifacts.push({
- fileTags: ["cpp"],
- filePath: outputDir + "/" + FileInfo.baseName(inp.fileName) + ".pb.cc",
- cpp: {
- includePaths: [].concat(inp.cpp.includePaths, outputDir),
- // staticLibraries: [].concat(inp.cpp.staticLibraries, "protobuf"),
- }
- });
- });
- return artifacts;
- }
- prepare: {
- var outputDir = product.moduleProperty("proto", "outputDir");
- var mkdir = new JavaScriptCommand();
- mkdir.silent = true;
- mkdir.outputDir = outputDir;
- mkdir.sourceCode = function () {
- File.makePath(outputDir);
- };
- var args = ["--cpp_out", outputDir];
- var files = [];
- inputs["proto.input"].map(function(inp) {
- args.push("--proto_path", FileInfo.path(inp.filePath));
- files.push(inp.filePath);
- });
- for (var i = 0; i < files.length; i++) {
- args.push(files[i]);
- }
- var cmd = new Command(product.moduleProperty("proto", "protocBinary"), args);
- cmd.workingDirectory = product.moduleProperty("proto", "outputDir");
- cmd.description = "generating proto";
- return [mkdir, cmd];
- }
- }
- FileTagger {
- patterns: ["*.proto"]
- fileTags: ["proto.input"];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment