2023-01-18 14:04:26 +01:00
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"
2023-06-28 15:39:05 +02:00
/ * *
Setup if need different path to windeployqt tool .
* /
property string windeployqtProgramBinPath: undefined
2023-01-18 14:04:26 +01:00
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
2024-01-19 15:14:27 +01:00
condition: product . qbs . targetOS . contains ( "windows" ) && product . qbs . buildVariant === "release"
2023-01-18 14:04:26 +01:00
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" )
2024-01-19 15:15:28 +01:00
if ( product . windeployqt . noCompilerRuntime )
2023-01-18 14:04:26 +01:00
cmdArgs . push ( "--no-compiler-runtime" )
2023-06-27 13:22:49 +02:00
if ( product . windeployqt . noVirtualkeyboard &&
Utilities . versionCompare ( product . Qt . core . version , "6.5" ) < 0 )
2023-01-18 14:04:26 +01:00
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 )
2023-06-27 13:22:49 +02:00
cmdArgs . push ( product . installDir + "\\" + input . fileName ) ;
2023-01-18 14:04:26 +01:00
2023-06-28 15:39:05 +02:00
var windeployqtProgramBinPath = product . Qt . core . binPath ;
if ( product . windeployqt . windeployqtProgramBinPath !== undefined )
windeployqtProgramBinPath = product . windeployqt . windeployqtProgramBinPath ;
var cmd = new Command ( windeployqtProgramBinPath + "/" + windeployqtProgram , cmdArgs ) ;
2023-01-18 14:04:26 +01:00
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
}
}