Guest User

Untitled

a guest
Aug 8th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import qbs
  2. import qbs.File
  3. import qbs.FileInfo
  4. import "proto.js" as HelperFunctions
  5.  
  6. Module {
  7. //    Depends { name: "cpp" }
  8.  
  9.     property bool enableCompilerWarnings: false
  10.     property string protocBinary: "protoc"
  11.     property string outputTag: "hpp"
  12.     property bool uniqueSymbolPrefix: false
  13.  
  14.     readonly property string outputDir: product.buildDirectory + "/proto"
  15.  
  16.     Properties {
  17.         condition: {
  18.             for (var i = 0; i < product.dependencies.length; i++) {
  19.                 var dep = product.dependencies[i];
  20.                 if (dep.name == "cpp")
  21.                     return true;
  22.             }
  23.             return false;
  24.         }
  25.         cpp.staticLibraries: ["protobuf"]
  26.     }
  27.  
  28.     Rule {
  29.         inputs: ["proto.input"]
  30.         multiplex: true
  31.         outputFileTags: ["hpp", "cpp"]
  32.         outputArtifacts: {
  33.             var outputDir = product.moduleProperty("proto", "outputDir");
  34.             var artifacts = [];
  35.             inputs["proto.input"].map(function(inp) {
  36.                 artifacts.push({
  37.                     fileTags: ["hpp"],
  38.                     filePath: outputDir + "/" + FileInfo.baseName(inp.fileName) + ".pb.h",
  39.                     cpp: {
  40.                         includePaths: [].concat(inp.cpp.includePaths, outputDir),
  41. //                        staticLibraries: [].concat(inp.cpp.staticLibraries, "protobuf"),
  42.                     }
  43.                 });
  44.                 artifacts.push({
  45.                     fileTags: ["cpp"],
  46.                     filePath: outputDir + "/" + FileInfo.baseName(inp.fileName) + ".pb.cc",
  47.                     cpp: {
  48.                         includePaths: [].concat(inp.cpp.includePaths, outputDir),
  49. //                        staticLibraries: [].concat(inp.cpp.staticLibraries, "protobuf"),
  50.                     }
  51.                 });
  52.             });
  53.             return artifacts;
  54.         }
  55.  
  56.         prepare: {
  57.             var outputDir = product.moduleProperty("proto", "outputDir");
  58.  
  59.             var mkdir = new JavaScriptCommand();
  60.             mkdir.silent = true;
  61.             mkdir.outputDir = outputDir;
  62.             mkdir.sourceCode = function () {
  63.                 File.makePath(outputDir);
  64.             };
  65.  
  66.             var args = ["--cpp_out", outputDir];
  67.             var files = [];
  68.             inputs["proto.input"].map(function(inp) {
  69.                 args.push("--proto_path", FileInfo.path(inp.filePath));
  70.                 files.push(inp.filePath);
  71.             });
  72.             for (var i = 0; i < files.length; i++) {
  73.                 args.push(files[i]);
  74.             }
  75.  
  76.             var cmd = new Command(product.moduleProperty("proto", "protocBinary"), args);
  77.             cmd.workingDirectory = product.moduleProperty("proto", "outputDir");
  78.             cmd.description = "generating proto";
  79.             return [mkdir, cmd];
  80.         }
  81.     }
  82.  
  83.     FileTagger {
  84.         patterns: ["*.proto"]
  85.         fileTags: ["proto.input"];
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment