valentina/qbs/modules/windeployqt/windeployqt.qbs
Roman Telezhynskyi 23ccdf667d Polishing scripts.
2024-01-19 16:15:28 +02:00

195 lines
6.8 KiB
QML

import qbs.File
import qbs.FileInfo
import qbs.Environment
import qbs.Utilities
import qbs.ModUtils
/**
This module uses _windeployqt_ program to collect Qt runtime for Windows deployment.
*/
Module {
additionalProductTypes: ["windeployqt"]
property bool artifacts: true
property bool json: false
property string windeployqtArtifact: artifacts ? (json ? "windeployqt.json" : "windeployqt.txt")
: undefined
property string windeployqtProgram: "windeployqt.exe"
/**
Setup if need different path to windeployqt tool.
*/
property string windeployqtProgramBinPath: undefined
property string qmake: undefined
/**
Defines where collected files are being copied. This can be useful to distinguish Qt runtime from project artifacts. Uses
location of the binary if undefined.
*/
property string dir: undefined
property string libdir: undefined
property string plugindir: product.windeployqt.dir !== undefined ? product.windeployqt.dir + "/plugins"
: undefined
property bool debug: false
property bool release: false
property bool pdb: false
property bool force: false
property bool dryRun: false
property bool noPatchqt: false
property bool ignoreLibraryErrors: false
property bool noPlugins: false
property bool noLibraries: false
property string languages: undefined
property bool noTranslations: false
property bool noSystemD3dCompiler: false
property bool compilerRuntime: false
property bool noVirtualkeyboard: false
property bool noCompilerRuntime: false
property bool noOpenglSw: false
property string list: undefined
property int verbose: undefined
Depends { name: "Qt.core" }
Rule {
// alwaysRun: true
condition: product.qbs.targetOS.contains("windows") && product.qbs.buildVariant === "release"
inputs: product.type.contains("dynamiclibrary") ? ["dynamiclibrary"] : ["application"]
prepare: {
var windeployqtProgram = product.windeployqt.windeployqtProgram;
// 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.windeployqtProgram = windeployqtProgram;
cmd.description = "can not invoke '" + windeployqtProgram + "' when '--no-install` options has been set from command line";
cmd.sourceCode = function () {
console.warn("Can not invoke '" + windeployqtProgram + "' when '--no-install` options has been set from command line (tip: remove your build directory entirely after unchecking '--no-install' option)");
}
} else {
var cmdArgs = []
if (Utilities.versionCompare(product.Qt.core.version, "6") >= 0) {
if (product.windeployqt.qmake !== undefined)
cmdArgs.push("--qmake", product.windeployqt.qmake)
if (product.windeployqt.ignoreLibraryErrors)
cmdArgs.push("--ignore-library-errors")
if (!product.windeployqt.noTranslations && product.windeployqt.languages !== undefined)
cmdArgs.push("--translations", product.windeployqt.languages)
}
if (product.windeployqt.dir !== undefined)
cmdArgs.push("--dir", product.windeployqt.dir)
if (product.windeployqt.noLibraries)
cmdArgs.push("--no-libraries")
else if (product.windeployqt.libdir !== undefined)
cmdArgs.push("--libdir", product.windeployqt.libdir)
if (product.windeployqt.noPlugins)
cmdArgs.push("--no-plugins")
else if (product.windeployqt.plugindir !== undefined)
cmdArgs.push("--plugindir", product.windeployqt.plugindir)
if (product.windeployqt.debug)
cmdArgs.push("--debug")
if (product.windeployqt.release)
cmdArgs.push("--release")
if (product.windeployqt.pdb && product.qbs.toolchain.contains("msvc"))
cmdArgs.push("--pdb")
if (product.windeployqt.force)
cmdArgs.push("--force")
if (product.windeployqt.dryRun)
cmdArgs.push("--dry-run")
if (product.windeployqt.noPatchqt)
cmdArgs.push("--no-patchqt")
if (product.windeployqt.noTranslations)
cmdArgs.push("--no-translations")
if (product.windeployqt.noSystemD3dCompiler)
cmdArgs.push("--no-system-d3d-compiler")
if (product.windeployqt.compilerRuntime)
cmdArgs.push("--compiler-runtime")
if (product.windeployqt.noCompilerRuntime)
cmdArgs.push("--no-compiler-runtime")
if (product.windeployqt.noVirtualkeyboard &&
Utilities.versionCompare(product.Qt.core.version, "6.5") < 0)
cmdArgs.push("--no-virtualkeyboard")
if (product.windeployqt.json)
cmdArgs.push("--json")
if (product.windeployqt.noOpenglSw)
cmdArgs.push("--no-opengl-sw")
if (product.windeployqt.list !== undefined)
cmdArgs.push("--list", product.windeployqt.list)
if (product.windeployqt.verbose !== undefined)
cmdArgs.push("--verbose", product.windeployqt.verbose)
cmdArgs.push(product.installDir + "\\" + input.fileName);
var windeployqtProgramBinPath = product.Qt.core.binPath;
if (product.windeployqt.windeployqtProgramBinPath !== undefined)
windeployqtProgramBinPath = product.windeployqt.windeployqtProgramBinPath;
var cmd = new Command(windeployqtProgramBinPath + "/" + windeployqtProgram, cmdArgs);
cmd.jobPool = "windeployqt";
cmd.description = "invoking '" + windeployqtProgram;
cmd.stdoutFilePath = product.buildDirectory + "/" + product.windeployqt.windeployqtArtifact;
}
cmd.workingDirectory = product.qbs.installRoot;
cmd.highlight = "filegen";
return [cmd]
}
Artifact {
filePath: product.buildDirectory + "/" + product.windeployqt.windeployqtArtifact
fileTags: ["windeployqt", "windeployqt.json", "json"]
}
}
JobLimit {
jobPool: "windeployqt"
jobCount: 1
}
}