/usr/share/qbs/modules/vcs/vcs-module.qbs is in qbs-common 1.10.1+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | import qbs
import qbs.File
import qbs.FileInfo
import qbs.Process
import qbs.TextFile
import qbs.Utilities
Module {
property string type: typeProbe.type
property string repoDir: project.sourceDirectory
property string toolFilePath: {
if (type === "git")
return "git";
if (type === "svn")
return "svn";
}
property string headerFileName: "vcs-repo-state.h"
readonly property string repoState: gitProbe.repoState || subversionProbe.repoState
// Internal
readonly property string includeDir: FileInfo.joinPaths(product.buildDirectory, "vcs-include")
readonly property string metaDataBaseDir: typeProbe.metaDataBaseDir
PropertyOptions {
name: "type"
allowedValues: ["git", "svn"]
description: "the version control system your project is using"
}
Depends { name: "cpp"; condition: headerFileName }
Properties {
condition: headerFileName
cpp.includePaths: [includeDir]
}
Probe {
id: typeProbe
property string tool: toolFilePath
property string theRepoDir: repoDir
property string type
property string metaDataBaseDir
configure: {
var detector = new Process();
try {
detector.setWorkingDirectory(theRepoDir);
if (detector.exec(tool || "git", ["rev-parse", "--git-dir"]) === 0) {
found = true;
type = "git";
metaDataBaseDir = detector.readStdOut().trim();
return;
}
if (detector.exec(tool || "svn",
["info", "--show-item", "wc-root", "--no-newline"]) === 0) {
found = true
type = "svn";
metaDataBaseDir = FileInfo.joinPaths(detector.readStdOut(), ".svn");
return;
} else if (detector.exec(tool || "svn", ["info"]) === 0) {
if (detector.exec(tool || "svn", ["--version", "--quiet"]) === 0
&& Utilities.versionCompare(detector.readStdOut().trim(), "1.9") < 0) {
throw "svn too old, version >= 1.9 required";
}
}
} finally {
detector.close();
}
}
}
Probe {
id: gitProbe
condition: type === "git"
property string tool: toolFilePath
property string theRepoDir: repoDir
property string filePath: FileInfo.joinPaths(metaDataBaseDir, "logs/HEAD")
property var timestamp: File.lastModified(filePath)
property string repoState
configure: {
if (!File.exists(filePath))
return; // No commits yet.
var proc = new Process();
try {
proc.setWorkingDirectory(theRepoDir);
proc.exec(tool, ["describe", "--always", "HEAD"], true);
repoState = proc.readStdOut().trim();
if (repoState)
found = true;
} finally {
proc.close();
}
}
}
Probe {
id: subversionProbe
condition: type === "svn"
property string tool: toolFilePath
property string theRepoDir: repoDir
property string filePath: FileInfo.joinPaths(metaDataBaseDir, "wc.db")
property var timestamp: File.lastModified(filePath)
property string repoState
configure: {
var proc = new Process();
try {
proc.setWorkingDirectory(theRepoDir);
proc.exec(tool, ["info", "-r", "HEAD", "--show-item", "revision", "--no-newline"],
true);
repoState = proc.readStdOut();
if (repoState)
found = true;
} finally {
proc.close();
}
}
}
Rule {
condition: repoState && headerFileName
multiplex: true
Artifact {
filePath: FileInfo.joinPaths(product.vcs.includeDir, product.vcs.headerFileName)
fileTags: ["hpp"]
}
prepare: {
var cmd = new JavaScriptCommand();
cmd.description = "generating " + output.fileName;
cmd.highlight = "codegen";
cmd.repoState = product.vcs.repoState;
cmd.sourceCode = function() {
var f = new TextFile(output.filePath, TextFile.WriteOnly);
try {
f.writeLine("#ifndef VCS_REPO_STATE_H");
f.writeLine("#define VCS_REPO_STATE_H");
f.writeLine('#define VCS_REPO_STATE "' + repoState + '"')
f.writeLine("#endif");
} finally {
f.close();
}
};
return [cmd];
}
}
}
|