valentina/qbs/modules/macdeployqt/macdeployqt.qbs

126 lines
4.7 KiB
QML
Raw Normal View History

2023-01-27 21:08:47 +01:00
import qbs.File
import qbs.FileInfo
import qbs.Environment
import qbs.Utilities
import qbs.ModUtils
/**
This module uses _macdeployqt_ program to collect Qt runtime for MacOS deployment.
*/
Module {
additionalProductTypes: ["macdeployqt"]
property bool artifacts: true
property string macdeployqtArtifact: artifacts ? "maceployqt.txt" : undefined
property string macdeployqtProgramBinPath : undefined
2023-01-27 21:08:47 +01:00
property string macdeployqtProgram: "macdeployqt"
property bool noPlugins: false
property int verbose: undefined
property bool noStrip: true
property bool useDebugLibs: false
property bool alwaysOverwrite: false
2023-09-21 16:45:30 +02:00
property bool appstoreCompliant: false
2023-01-27 21:08:47 +01:00
2023-09-21 16:45:30 +02:00
property stringList libpath: undefined
2023-01-27 21:08:47 +01:00
property stringList targetApps: undefined
2023-09-12 16:50:15 +02:00
property bool signForNotarization: false
2023-08-18 13:01:03 +02:00
property string signingIdentity: "-" // ad-hoc
2023-01-27 21:08:47 +01:00
Rule {
// alwaysRun: true
multiplex: true
condition: product.qbs.targetOS.contains("macos") && product.bundle.isBundle && (product.buildconfig.enableMultiBundle || (!product.buildconfig.enableMultiBundle && product.primaryApp))
inputs: ["bundle.content"]
prepare: {
var macdeployqtProgram = product.macdeployqt.macdeployqtProgram;
// Checking if directory exists as a dirty workaround to check if `--no-install` options has been set from command line.
if (!File.exists(product.qbs.installRoot)) {
var cmd = new JavaScriptCommand();
cmd.macdeployqtProgram = macdeployqtProgram;
cmd.description = "can not invoke '" + macdeployqtProgram + "' when '--no-install` options has been set from command line";
cmd.sourceCode = function () {
console.warn("Can not invoke '" + macdeployqtProgram + "' when '--no-install` options has been set from command line (tip: remove your build directory entirely after unchecking '--no-install' option)");
}
} else {
const installRoot = product.qbs.installRoot + product.qbs.installPrefix + "/" + product.buildconfig.installAppPath;
var cmdArgs = [installRoot + "/" + product.targetName + ".app"];
if (product.macdeployqt.noPlugins)
2023-08-18 12:51:36 +02:00
cmdArgs.push("-no-plugins");
2023-01-27 21:08:47 +01:00
if (product.macdeployqt.verbose !== undefined)
2023-09-21 16:45:30 +02:00
cmdArgs.push("-verbose=" + product.macdeployqt.verbose);
2023-01-27 21:08:47 +01:00
if (product.macdeployqt.noStrip)
cmdArgs.push("-no-strip");
if (product.macdeployqt.useDebugLibs)
cmdArgs.push("-use-debug-libs");
if (product.macdeployqt.alwaysOverwrite)
cmdArgs.push("-always-overwrite");
if (product.macdeployqt.appstoreCompliant)
cmdArgs.push("-appstore-compliant");
if (product.macdeployqt.libpath !== undefined)
2023-09-21 16:45:30 +02:00
product.macdeployqt.libpath.forEach(function(libpath) {
cmdArgs.push("-libpath=" + libpath);
});
2023-01-27 21:08:47 +01:00
2023-09-12 16:50:15 +02:00
if (product.buildconfig.enableCodeSigning) {
if (product.macdeployqt.signForNotarization)
cmdArgs.push("-sign-for-notarization=" + product.macdeployqt.signingIdentity);
else
cmdArgs.push("-codesign=" + product.macdeployqt.signingIdentity);
}
2023-08-18 13:01:03 +02:00
if (product.macdeployqt.targetApps !== undefined)
2023-01-27 21:08:47 +01:00
{
product.macdeployqt.targetApps.forEach(function(targetApp) {
cmdArgs.push("-executable=" + FileInfo.joinPaths(installRoot, product.targetName + ".app", "Contents", "MacOS", targetApp));
2023-01-27 21:08:47 +01:00
});
}
var macdeployqtProgramBinPath = product.Qt.core.binPath;
if (product.macdeployqt.macdeployqtProgramBinPath !== undefined)
macdeployqtProgramBinPath = product.macdeployqt.macdeployqtProgramBinPath;
var cmd = new Command(macdeployqtProgramBinPath + "/" + macdeployqtProgram, cmdArgs);
2023-01-27 21:08:47 +01:00
cmd.jobPool = "macdeployqt";
cmd.description = "invoking '" + macdeployqtProgram;
cmd.stdoutFilePath = product.buildDirectory + "/" + product.macdeployqt.macdeployqtArtifact;
}
cmd.workingDirectory = product.qbs.installRoot;
cmd.highlight = "filegen";
return [cmd]
}
Artifact {
filePath: product.buildDirectory + "/" + product.macdeployqt.macdeployqtArtifact
fileTags: ["macdeployqt"]
}
}
JobLimit {
jobPool: "macdeployqt"
jobCount: 1
}
}