valentina/qbs/modules/pdftops/pdftops.qbs
Roman Telezhynskyi f2596591e5 New module pdftops.
With Qt 6 copy and sign pdftops from brew.
2023-09-21 17:37:49 +03:00

107 lines
3.8 KiB
QML

import qbs.Process
import qbs.File
import qbs.FileInfo
import qbs.Utilities
Module {
additionalProductTypes: ["pdftops.bundled"]
readonly property string pdftopsPath: pdftopsProbe.path
readonly property bool pdftopsPresent: pdftopsProbe.found
Probe {
id: pdftopsProbe
property string path
property string sourceDirectory: project.sourceDirectory
property string qtVersion: product.Qt.core.version
configure: {
if (Utilities.versionCompare(qtVersion, "6") >= 0) {
var detector = new Process();
try {
if (detector.exec("which", ["pdftops"]) === 0) {
var binPath = detector.readStdOut().trim(); // we can read only one time
if (detector.exec("realpath", [binPath]) === 0) {
path = detector.readStdOut().trim();
console.info("Found pdftops at '" + path + "'.");
found = true;
}
}
} finally {
detector.close();
}
} else {
var binPath = sourceDirectory + "/dist/macx/bin64/pdftops";
if (product.qbs.architecture.contains("x86_64") && File.exists(binPath)) {
path = binPath;
found = true;
}
}
}
}
Rule {
multiplex: true
inputs: ["pdftops.in"]
prepare: {
var cmds = [];
var src = input.filePath;
var dst = output.filePath;
var copyCmd = new Command("cp", [src, dst]);
copyCmd.highlight = 'filegen';
copyCmd.description = "copying " + input.fileName;
cmds.push(copyCmd);
if (!product.codesign.enableCodeSigning)
return cmds;
var actualSigningIdentity = product.codesign._actualSigningIdentity;
if (!actualSigningIdentity) {
throw "No codesigning identities (i.e. certificate and private key pairs) matching “"
+ product.codesign.signingIdentity + "” were found.";
}
var args = ["--force", "--sign", actualSigningIdentity.SHA1];
// If signingTimestamp is undefined or empty, do not specify the flag at all -
// this uses the system-specific default behavior
var signingTimestamp = product.codesign.signingTimestamp;
if (signingTimestamp) {
// If signingTimestamp is an empty string, specify the flag but do
// not specify a value - this uses a default Apple-provided server
var flag = "--timestamp";
if (signingTimestamp)
flag += "=" + signingTimestamp;
args.push(flag);
}
args = args.concat(product.codesign.codesignFlags || []);
args.push(output.filePath);
console.warn(args);
var cmdSign = new Command(product.codesign.codesignPath, args);
cmdSign.description = "codesign " + output.fileName
+ " (" + actualSigningIdentity.subjectInfo.CN + ")";
cmdSign.outputFilePath = output.filePath;
cmdSign.stderrFilterFunction = function(stderr) {
return stderr.replace(outputFilePath + ": replacing existing signature\n", "");
};
cmds.push(cmdSign);
return cmds;
}
Artifact {
filePath: FileInfo.joinPaths(product.qbs.installRoot, product.qbs.installPrefix,
product.buildconfig.installAppPath,
product.targetName + ".app", "Contents", "MacOS", "pdftops")
fileTags: ["pdftops.bundled"]
}
}
}