valentina/qbs/modules/macdeployqt/macdeployqt.qbs
2023-09-21 17:45:30 +03:00

126 lines
4.7 KiB
QML

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
property string macdeployqtProgram: "macdeployqt"
property bool noPlugins: false
property int verbose: undefined
property bool noStrip: true
property bool useDebugLibs: false
property bool alwaysOverwrite: false
property bool appstoreCompliant: false
property stringList libpath: undefined
property stringList targetApps: undefined
property bool signForNotarization: false
property string signingIdentity: "-" // ad-hoc
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)
cmdArgs.push("-no-plugins");
if (product.macdeployqt.verbose !== undefined)
cmdArgs.push("-verbose=" + product.macdeployqt.verbose);
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)
product.macdeployqt.libpath.forEach(function(libpath) {
cmdArgs.push("-libpath=" + libpath);
});
if (product.buildconfig.enableCodeSigning) {
if (product.macdeployqt.signForNotarization)
cmdArgs.push("-sign-for-notarization=" + product.macdeployqt.signingIdentity);
else
cmdArgs.push("-codesign=" + product.macdeployqt.signingIdentity);
}
if (product.macdeployqt.targetApps !== undefined)
{
product.macdeployqt.targetApps.forEach(function(targetApp) {
cmdArgs.push("-executable=" + FileInfo.joinPaths(installRoot, product.targetName + ".app", "Contents", "MacOS", targetApp));
});
}
var macdeployqtProgramBinPath = product.Qt.core.binPath;
if (product.macdeployqt.macdeployqtProgramBinPath !== undefined)
macdeployqtProgramBinPath = product.macdeployqt.macdeployqtProgramBinPath;
var cmd = new Command(macdeployqtProgramBinPath + "/" + macdeployqtProgram, cmdArgs);
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
}
}