valentina/qbs/modules/multibundle/multibundle.qbs

131 lines
5.5 KiB
QML

import qbs.File
Module {
additionalProductTypes: ["multibundle"]
property stringList targetApps: undefined
Rule {
// alwaysRun: true
multiplex: true
condition: product.qbs.targetOS.contains("macos") && product.buildconfig.enableMultiBundle && product.type.contains("dynamiclibrary")
inputs: product.bundle.isBundle ? ["bundle.content"] : ["dynamiclibrary"]
outputFileTags: ["multibundle"]
outputArtifacts: {
var artifactNames = [];
const fileName = product.bundle.isBundle ? product.bundle.bundleName : inputs["dynamiclibrary"][0].fileName;
const installRoot = product.qbs.installRoot + product.qbs.installPrefix + "/" + product.buildconfig.installAppPath;
product.multibundle.targetApps.forEach(function(targetApp) {
artifactNames.push(installRoot + "/" + targetApp + ".app/Contents/Frameworks/" + fileName);
if (product.installDebugInformation)
artifactNames.push(installRoot + "/" + targetApp + ".app/Contents/Frameworks/" + fileName +
product.cpp.debugInfoBundleSuffix);
});
var artifacts = artifactNames.map(function(art){
var a = {
filePath: art,
fileTags: ["multibundle"]
}
return a;
});
return artifacts;
}
prepare: {
var cmd = new JavaScriptCommand();
cmd.description = "Copying dynamic library into bundles";
cmd.highlight = "filegen";
const fileName = product.bundle.isBundle ? product.bundle.bundleName : inputs["dynamiclibrary"][0].fileName;
const installRoot = product.qbs.installRoot + product.qbs.installPrefix + "/" + product.buildconfig.installAppPath;
var data = [];
product.multibundle.targetApps.forEach(function(targetApp) {
data.push({
"source" : product.buildDirectory + "/" + fileName,
"destination": installRoot + "/" + targetApp + ".app/Contents/Frameworks/" + fileName
});
if (product.installDebugInformation)
data.push({
"source" : product.buildDirectory + "/" + fileName + product.cpp.debugInfoBundleSuffix,
"destination": installRoot + "/" + targetApp + ".app/Contents/Frameworks/" + fileName +
product.cpp.debugInfoBundleSuffix
});
});
cmd.data = data;
cmd.sourceCode = function() {
data.forEach(function(copyData) {
File.copy(copyData.source, copyData.destination);
});
};
return [cmd];
}
}
Rule {
// alwaysRun: true
condition: product.qbs.targetOS.contains("macos") && !product.buildconfig.enableMultiBundle && product.type.contains("application")
inputs: ["bundle.application-executable"]
outputFileTags: ["multibundle"]
outputArtifacts: {
var artifactNames = [];
const installRoot = product.qbs.installRoot + product.qbs.installPrefix + "/" + product.buildconfig.installAppPath;
product.multibundle.targetApps.forEach(function(targetApp) {
artifactNames.push(installRoot + "/" + targetApp + ".app/Contents/MacOS/" + input.fileName);
if (product.installDebugInformation)
artifactNames.push(installRoot + "/" + targetApp + ".app/Contents/MacOS/" + input.fileName + ".app" +
product.cpp.debugInfoBundleSuffix);
});
var artifacts = artifactNames.map(function(art){
var a = {
filePath: art,
fileTags: ["multibundle"]
}
return a;
});
return artifacts;
}
prepare: {
var cmd = new JavaScriptCommand();
cmd.description = "Copying auxiliary binary into bundle";
cmd.highlight = "filegen";
const fileName = product.bundle.isBundle ? product.bundle.bundleName : inputs["application"][0].fileName;
const installRoot = product.qbs.installRoot + product.qbs.installPrefix + "/" + product.buildconfig.installAppPath;
var data = [];
product.multibundle.targetApps.forEach(function(targetApp) {
data.push({
"source" : input.filePath,
"destination": installRoot + "/" + targetApp + ".app/Contents/MacOS/" + input.fileName
});
if (product.installDebugInformation)
data.push({
"source" : product.buildDirectory + "/" + input.fileName + ".app" + product.cpp.debugInfoBundleSuffix,
"destination": installRoot + "/" + targetApp + ".app/Contents/MacOS/" + fileName +
product.cpp.debugInfoBundleSuffix
});
});
cmd.data = data;
cmd.sourceCode = function() {
data.forEach(function(copyData) {
console.info("Dynamic source: " + copyData.source);
console.info("Dynamic destination: " + copyData.destination);
File.copy(copyData.source, copyData.destination);
});
};
return [cmd];
}
}
}