mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-09-10 12:03:18 +02:00
misc: use python script to replace copy-runtime-files.ps1
Gitlab: #160 Change-Id: Icfaa6f891cbae159ddced3119612abe1a7a89885
This commit is contained in:
parent
2d461cc557
commit
345da3d72a
4 changed files with 289 additions and 112 deletions
|
@ -1,109 +0,0 @@
|
||||||
[cmdletbinding()]
|
|
||||||
param (
|
|
||||||
[string]$mode,
|
|
||||||
[string]$qtver,
|
|
||||||
[string]$daemonDir,
|
|
||||||
[string]$lrcDir,
|
|
||||||
[string]$outDir
|
|
||||||
);
|
|
||||||
|
|
||||||
$clientDir = split-path -parent $MyInvocation.MyCommand.Definition
|
|
||||||
$stamp = (git rev-parse HEAD).Substring(0, 8)
|
|
||||||
$stampFile = $clientDir + "\.deploy.stamp"
|
|
||||||
If (test-path $stampFile) {
|
|
||||||
if($stamp = (Get-Content -Path $stampFile)) {
|
|
||||||
write-host "deployment stamp up-to-date" $outDir -ForegroundColor Cyan
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# default values
|
|
||||||
$qtver = If ($qtver) { $qtver } Else { "5.15.0" }
|
|
||||||
$qtMinorVer = $qtver.split('.')[1]
|
|
||||||
$mode = If ($mode) { $mode } Else { "Release" }
|
|
||||||
|
|
||||||
if (!$outDir) { $outDir = $clientDir + "\x64\" + $mode }
|
|
||||||
If (!(test-path $outDir)) { New-Item -ItemType directory -Path $outDir -Force }
|
|
||||||
|
|
||||||
$qtverSplit1, $qtverSplit2 , $qtverSplit3 = $qtver.Split('.')
|
|
||||||
$qtMsvcDir = If (([int]$qtMinorVer) -le 14) {"msvc2017_64"} Else {"msvc2019_64"}
|
|
||||||
|
|
||||||
$QtDir = "C:\Qt\$qtver\$qtMsvcDir"
|
|
||||||
|
|
||||||
if (!$daemonDir) { $daemonDir = $clientDir + '\..\daemon' }
|
|
||||||
if (!$lrcDir) { $lrcDir = $clientDir + '\..\lrc' }
|
|
||||||
|
|
||||||
write-host "********************************************************************************" -ForegroundColor Magenta
|
|
||||||
write-host "copying deployment files..." -ForegroundColor Green
|
|
||||||
write-host "using daemonDir: " $daemonDir -ForegroundColor Magenta
|
|
||||||
write-host "using lrcDir: " $lrcDir -ForegroundColor Magenta
|
|
||||||
write-host "using QtDir: " $QtDir -ForegroundColor Magenta
|
|
||||||
write-host "********************************************************************************" -ForegroundColor Magenta
|
|
||||||
|
|
||||||
# dependency bin files and misc
|
|
||||||
$FilesToCopy = @(
|
|
||||||
"$daemonDir\contrib\build\ffmpeg\Build\win32\x64\bin\avcodec-58.dll",
|
|
||||||
"$daemonDir\contrib\build\ffmpeg\Build\win32\x64\bin\avutil-56.dll",
|
|
||||||
"$daemonDir\contrib\build\ffmpeg\Build\win32\x64\bin\avformat-58.dll",
|
|
||||||
"$daemonDir\contrib\build\ffmpeg\Build\win32\x64\bin\avdevice-58.dll",
|
|
||||||
"$daemonDir\contrib\build\ffmpeg\Build\win32\x64\bin\swresample-3.dll",
|
|
||||||
"$daemonDir\contrib\build\ffmpeg\Build\win32\x64\bin\swscale-5.dll",
|
|
||||||
"$daemonDir\contrib\build\ffmpeg\Build\win32\x64\bin\avfilter-7.dll",
|
|
||||||
"$daemonDir\contrib\build\openssl\libcrypto-1_1-x64.dll",
|
|
||||||
"$daemonDir\contrib\build\openssl\libssl-1_1-x64.dll",
|
|
||||||
"$clientDir\qt.conf",
|
|
||||||
"$clientDir\images\jami.ico",
|
|
||||||
"$clientDir\License.rtf"
|
|
||||||
)
|
|
||||||
foreach ($i in $FilesToCopy) {
|
|
||||||
write-host "copying: " $i " => " $outDir -ForegroundColor Cyan
|
|
||||||
Copy-Item -Path $i -Recurse -Destination $outDir -Force -Container
|
|
||||||
}
|
|
||||||
|
|
||||||
############
|
|
||||||
# qt
|
|
||||||
############
|
|
||||||
$windeployqt = "$QtDir\bin\windeployqt.exe --qmldir $clientDir\src --release $outDir\Jami.exe"
|
|
||||||
Invoke-Expression $windeployqt
|
|
||||||
|
|
||||||
# ringtones
|
|
||||||
$CopyDir = $outDir + "\ringtones"
|
|
||||||
If (!(test-path $CopyDir)) { New-Item -ItemType directory -Path $CopyDir -Force }
|
|
||||||
$RingtonePath = "$clientDir\..\daemon\ringtones"
|
|
||||||
write-host "copying ringtones..."
|
|
||||||
Get-ChildItem -Path $RingtonePath -Include *.ul, *.ogg, *.wav, *.opus -Recurse | ForEach-Object {
|
|
||||||
write-host "copying ringtone: " $_.FullName " => " $CopyDir -ForegroundColor Cyan
|
|
||||||
Copy-Item -Path $_.FullName -Destination $CopyDir -Force –Recurse
|
|
||||||
}
|
|
||||||
|
|
||||||
# qt translations
|
|
||||||
$lrelease = "$QtDir\bin\lrelease.exe"
|
|
||||||
|
|
||||||
# lrc translations
|
|
||||||
$lrcTSPath = "$lrcDir\translations"
|
|
||||||
Get-ChildItem -Path $lrcTSPath -Include *.ts -Recurse | ForEach-Object {
|
|
||||||
& $lrelease $_.FullName
|
|
||||||
}
|
|
||||||
$CopyDir = $outDir + "\share\libringclient\translations"
|
|
||||||
If (!(test-path $CopyDir)) { New-Item -ItemType directory -Path $CopyDir -Force }
|
|
||||||
write-host "copying lrc translations..."
|
|
||||||
Get-ChildItem -Path $lrcTSPath -Include *.qm -Recurse | ForEach-Object {
|
|
||||||
write-host "copying translation file: " $_.FullName " => " $CopyDir -ForegroundColor Cyan
|
|
||||||
Copy-Item -Path $_.FullName -Destination $CopyDir -Force –Recurse
|
|
||||||
}
|
|
||||||
|
|
||||||
# client translations
|
|
||||||
$clientTSPath = "$clientDir\translations"
|
|
||||||
Get-ChildItem -Path $clientTSPath -Include *.ts -Recurse | ForEach-Object {
|
|
||||||
& $lrelease $_.FullName
|
|
||||||
}
|
|
||||||
$CopyDir = $outDir + "\share\ring\translations"
|
|
||||||
If (!(test-path $CopyDir)) { New-Item -ItemType directory -Path $CopyDir -Force }
|
|
||||||
write-host "copying client translations..."
|
|
||||||
Get-ChildItem -Path $clientTSPath -Include *.qm -Recurse | ForEach-Object {
|
|
||||||
write-host "copying translation file: " $_.FullName " => " $CopyDir -ForegroundColor Cyan
|
|
||||||
Copy-Item -Path $_.FullName -Destination $CopyDir -Force –Recurse
|
|
||||||
}
|
|
||||||
|
|
||||||
New-Item -Path $stampFile -ItemType "file" -Value $stamp -Force
|
|
||||||
write-host "copy completed" -NoNewline -ForegroundColor Green
|
|
287
copy-runtime-files.py
Normal file
287
copy-runtime-files.py
Normal file
|
@ -0,0 +1,287 @@
|
||||||
|
import tempfile
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import platform
|
||||||
|
import argparse
|
||||||
|
import shutil
|
||||||
|
import fileinput
|
||||||
|
|
||||||
|
if platform.system() == "Windows":
|
||||||
|
from colorama import init
|
||||||
|
|
||||||
|
# init ANSI escape character sequences for windows
|
||||||
|
init()
|
||||||
|
|
||||||
|
|
||||||
|
class bcolors:
|
||||||
|
HEADER = '\033[95m'
|
||||||
|
OKBLUE = '\033[94m'
|
||||||
|
OKCYAN = '\033[96m'
|
||||||
|
OKGREEN = '\033[92m'
|
||||||
|
WARNING = '\033[93m'
|
||||||
|
FAIL = '\033[91m'
|
||||||
|
ENDC = '\033[0m'
|
||||||
|
BOLD = '\033[1m'
|
||||||
|
UNDERLINE = '\033[4m'
|
||||||
|
|
||||||
|
|
||||||
|
def execute_cmd(cmd, use_subprocess_pipe=False):
|
||||||
|
p = subprocess.Popen(cmd,
|
||||||
|
shell=True,
|
||||||
|
stdout=subprocess.PIPE if use_subprocess_pipe else sys.stdout)
|
||||||
|
output, error = p.communicate()
|
||||||
|
|
||||||
|
if use_subprocess_pipe:
|
||||||
|
if output:
|
||||||
|
return output
|
||||||
|
return error
|
||||||
|
else:
|
||||||
|
if p.returncode != 0:
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
|
||||||
|
class globalVar:
|
||||||
|
# global var
|
||||||
|
system_name = platform.system()
|
||||||
|
client_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
mode = "Release"
|
||||||
|
qt_version = ""
|
||||||
|
qt_path = ""
|
||||||
|
daemon_path = client_dir + os.sep + '..' + os.sep + 'daemon'
|
||||||
|
lrc_path = client_dir + os.sep + '..' + os.sep + 'lrc'
|
||||||
|
output_path = ""
|
||||||
|
|
||||||
|
stamp = execute_cmd('git rev-parse HEAD', True)[0:8]
|
||||||
|
if system_name == "Windows":
|
||||||
|
stamp = stamp.decode("utf-8")
|
||||||
|
stampFile = client_dir + os.sep + ".deploy.stamp"
|
||||||
|
|
||||||
|
|
||||||
|
def check_stamp():
|
||||||
|
if os.path.exists(globalVar.stampFile):
|
||||||
|
with open(globalVar.stampFile) as f:
|
||||||
|
contents = f.read()
|
||||||
|
if contents.strip() == globalVar.stamp:
|
||||||
|
print(bcolors.OKGREEN + "Deployment stamp up-to-date" + bcolors.ENDC)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
|
||||||
|
def write_stamp():
|
||||||
|
with open(".deploy.stamp", "w") as file:
|
||||||
|
file.write(globalVar.stamp)
|
||||||
|
|
||||||
|
|
||||||
|
def setup_parameters(parsed_args):
|
||||||
|
if globalVar.system_name == "Windows":
|
||||||
|
if parsed_args.mode:
|
||||||
|
if parsed_args.mode == "Beta":
|
||||||
|
globalVar.mode = "Beta"
|
||||||
|
|
||||||
|
if parsed_args.qtVersion:
|
||||||
|
globalVar.qt_version = parsed_args.qtVersion
|
||||||
|
qt_minor_ver = int(globalVar.qt_version.split('.')[1])
|
||||||
|
if qt_minor_ver < 14:
|
||||||
|
print(bcolors.WARNING + "Qt version not supported" + bcolors.ENDC)
|
||||||
|
sys.exit()
|
||||||
|
globalVar.qt_path = "C:\\Qt\\" + globalVar.qt_version + \
|
||||||
|
("\\msvc2017_64" if qt_minor_ver < 15 else "\\msvc2019_64")
|
||||||
|
else:
|
||||||
|
globalVar.qt_path = "C:\\Qt\\5.15.0\\msvc2019_64"
|
||||||
|
else:
|
||||||
|
if parsed_args.qtPath:
|
||||||
|
globalVar.qt_path = parsed_args.qtPath
|
||||||
|
else:
|
||||||
|
globalVar.qt_version = execute_cmd('qmake -v', True)
|
||||||
|
globalVar.qt_version = globalVar.qt_version.split(
|
||||||
|
'Qt version')[1].split('in')[0].strip()
|
||||||
|
qt_minor_ver = int(globalVar.qt_version.split('.')[1])
|
||||||
|
if qt_minor_ver < 14:
|
||||||
|
print(bcolors.WARNING + "Qt version not supported" + bcolors.ENDC)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if parsed_args.daemonPath:
|
||||||
|
globalVar.daemon_path = parsed_args.daemonPath
|
||||||
|
|
||||||
|
if parsed_args.lrcPath:
|
||||||
|
globalVar.lrc_path = parsed_args.lrcPath
|
||||||
|
|
||||||
|
if parsed_args.outputPath:
|
||||||
|
if not os.path.exists(parsed_args.outputPath):
|
||||||
|
os.makedirs(parsed_args.outputPath)
|
||||||
|
globalVar.output_path = parsed_args.outputPath
|
||||||
|
else:
|
||||||
|
if globalVar.system_name != "Windows":
|
||||||
|
globalVar.output_path = globalVar.client_dir + os.sep + 'build-local'
|
||||||
|
else:
|
||||||
|
globalVar.output_path = globalVar.client_dir + \
|
||||||
|
os.sep + "x64" + os.sep + globalVar.mode
|
||||||
|
|
||||||
|
|
||||||
|
def copy_deployment_files():
|
||||||
|
# dependency bin files and misc
|
||||||
|
files_to_copy = [
|
||||||
|
globalVar.daemon_path + "\\contrib\\build\\ffmpeg\\Build\\win32\\x64\\bin\\avcodec-58.dll",
|
||||||
|
globalVar.daemon_path + "\\contrib\\build\\ffmpeg\\Build\\win32\\x64\\bin\\avutil-56.dll",
|
||||||
|
globalVar.daemon_path +
|
||||||
|
"\\contrib\\build\\ffmpeg\\Build\\win32\\x64\\bin\\avformat-58.dll",
|
||||||
|
globalVar.daemon_path +
|
||||||
|
"\\contrib\\build\\ffmpeg\\Build\\win32\\x64\\bin\\avdevice-58.dll",
|
||||||
|
globalVar.daemon_path +
|
||||||
|
"\\contrib\\build\\ffmpeg\\Build\\win32\\x64\\bin\\swresample-3.dll",
|
||||||
|
globalVar.daemon_path + "\\contrib\\build\\ffmpeg\\Build\\win32\\x64\\bin\\swscale-5.dll",
|
||||||
|
globalVar.daemon_path + "\\contrib\\build\\ffmpeg\\Build\\win32\\x64\\bin\\avfilter-7.dll",
|
||||||
|
globalVar.daemon_path + "\\contrib\\build\\openssl\\libcrypto-1_1-x64.dll",
|
||||||
|
globalVar.daemon_path + "\\contrib\\build\\openssl\\libssl-1_1-x64.dll",
|
||||||
|
globalVar.client_dir + "\\qt.conf",
|
||||||
|
globalVar.client_dir + "\\images\\jami.ico",
|
||||||
|
globalVar.client_dir + "\\License.rtf"
|
||||||
|
]
|
||||||
|
|
||||||
|
for file in files_to_copy:
|
||||||
|
print(bcolors.OKBLUE + "Copying: " + file +
|
||||||
|
" -> " + globalVar.output_path + bcolors.ENDC)
|
||||||
|
if os.path.exists(file):
|
||||||
|
shutil.copy(file, globalVar.output_path)
|
||||||
|
else:
|
||||||
|
print(bcolors.FAIL + file + " does not exist" + bcolors.ENDC)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# qt windeploy
|
||||||
|
win_deploy_qt = globalVar.qt_path + "\\bin\\windeployqt.exe --qmldir " + \
|
||||||
|
globalVar.client_dir + "\\src --release " + globalVar.output_path + "\\Jami.exe"
|
||||||
|
execute_cmd(win_deploy_qt)
|
||||||
|
|
||||||
|
|
||||||
|
def copy_ringtones():
|
||||||
|
# ringtones
|
||||||
|
copy_to_path = globalVar.output_path + os.sep + "ringtones"
|
||||||
|
if not os.path.exists(copy_to_path):
|
||||||
|
os.makedirs(copy_to_path)
|
||||||
|
ringtone_path = globalVar.client_dir + "\\..\\daemon\\ringtones"
|
||||||
|
|
||||||
|
print(bcolors.OKCYAN + "Copying ringtones..." + bcolors.ENDC)
|
||||||
|
for _, _, files in os.walk(ringtone_path):
|
||||||
|
for file in files:
|
||||||
|
print(bcolors.OKBLUE + "Copying ringtone: " +
|
||||||
|
file + " -> " + copy_to_path + bcolors.ENDC)
|
||||||
|
shutil.copy(ringtone_path + os.sep + file, copy_to_path)
|
||||||
|
|
||||||
|
|
||||||
|
def release_and_copy_translations():
|
||||||
|
# translations
|
||||||
|
lrelease = 'lrelease'
|
||||||
|
if globalVar.qt_path:
|
||||||
|
lrelease = globalVar.qt_path + os.sep + 'bin' + os.sep + \
|
||||||
|
'lrelease' + ('.exe' if globalVar.system_name == "Windows" else '')
|
||||||
|
|
||||||
|
# lrc translations
|
||||||
|
lrc_ts_path = globalVar.lrc_path + os.sep + 'translations'
|
||||||
|
copy_to_path = globalVar.output_path + os.sep + 'share' + \
|
||||||
|
os.sep + 'libringclient' + os.sep + 'translations'
|
||||||
|
if not os.path.exists(copy_to_path):
|
||||||
|
os.makedirs(copy_to_path)
|
||||||
|
|
||||||
|
print(bcolors.OKCYAN + "Release lrc translations..." + bcolors.ENDC)
|
||||||
|
for _, _, files in os.walk(lrc_ts_path):
|
||||||
|
for file in files:
|
||||||
|
if file.endswith(".ts"):
|
||||||
|
execute_cmd(lrelease + " " + lrc_ts_path + os.sep + file)
|
||||||
|
for file in files:
|
||||||
|
if file.endswith(".qm"):
|
||||||
|
print(bcolors.OKBLUE + "Copying translation file: " +
|
||||||
|
file + " -> " + copy_to_path + bcolors.ENDC)
|
||||||
|
shutil.copy(lrc_ts_path + os.sep + file, copy_to_path)
|
||||||
|
|
||||||
|
# client translations
|
||||||
|
client_ts_path = globalVar.client_dir + os.sep + 'translations'
|
||||||
|
copy_to_path = globalVar.output_path + os.sep + \
|
||||||
|
'share' + os.sep + 'ring' + os.sep + 'translations'
|
||||||
|
if not os.path.exists(copy_to_path):
|
||||||
|
os.makedirs(copy_to_path)
|
||||||
|
|
||||||
|
print(bcolors.OKCYAN + "Release client translations..." + bcolors.ENDC)
|
||||||
|
for _, _, files in os.walk(client_ts_path):
|
||||||
|
for file in files:
|
||||||
|
if file.endswith(".ts"):
|
||||||
|
execute_cmd(lrelease + " " +
|
||||||
|
client_ts_path + os.sep + file)
|
||||||
|
for file in files:
|
||||||
|
if file.endswith(".qm"):
|
||||||
|
print(bcolors.OKBLUE + "Copying translation file: " +
|
||||||
|
file + " -> " + copy_to_path + bcolors.ENDC)
|
||||||
|
shutil.copy(client_ts_path + os.sep + file, copy_to_path)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args():
|
||||||
|
ap = argparse.ArgumentParser(description="Copy runtime files tool")
|
||||||
|
if globalVar.system_name != "Windows":
|
||||||
|
ap.add_argument(
|
||||||
|
'-q', '--qtPath', default='',
|
||||||
|
help='Qt path')
|
||||||
|
else:
|
||||||
|
ap.add_argument(
|
||||||
|
'-m', '--mode', default='',
|
||||||
|
help='Release or Beta mode')
|
||||||
|
|
||||||
|
ap.add_argument(
|
||||||
|
'-q', '--qtVersion', default='',
|
||||||
|
help='Qt version')
|
||||||
|
|
||||||
|
ap.add_argument(
|
||||||
|
'-d', '--daemonPath', default='',
|
||||||
|
help='Daemon path')
|
||||||
|
ap.add_argument(
|
||||||
|
'-l', '--lrcPath', default='',
|
||||||
|
help='Lrc path')
|
||||||
|
ap.add_argument(
|
||||||
|
'-o', '--outputPath', default='',
|
||||||
|
help='Output path')
|
||||||
|
|
||||||
|
parsed_args = ap.parse_args()
|
||||||
|
|
||||||
|
return parsed_args
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# check stamp
|
||||||
|
check_stamp()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
parsed_args = parse_args()
|
||||||
|
|
||||||
|
# set up global var
|
||||||
|
setup_parameters(parsed_args)
|
||||||
|
|
||||||
|
print(bcolors.OKCYAN + "****************************************" + bcolors.ENDC)
|
||||||
|
print(bcolors.OKBLUE + "copying deployment files..." + bcolors.ENDC)
|
||||||
|
print(bcolors.OKBLUE + "using daemonDir: " +
|
||||||
|
globalVar.daemon_path + bcolors.ENDC)
|
||||||
|
print(bcolors.OKBLUE + "using lrcDir: " +
|
||||||
|
globalVar.lrc_path + bcolors.ENDC)
|
||||||
|
if globalVar.qt_path:
|
||||||
|
print(bcolors.OKBLUE + "using QtDir: " +
|
||||||
|
globalVar.qt_path + bcolors.ENDC)
|
||||||
|
else:
|
||||||
|
print(bcolors.OKBLUE + "using system Qt" + bcolors.ENDC)
|
||||||
|
if globalVar.system_name == "Windows":
|
||||||
|
print(bcolors.OKBLUE + globalVar.mode + " mode" + bcolors.ENDC)
|
||||||
|
print(bcolors.OKCYAN + "****************************************" + bcolors.ENDC)
|
||||||
|
|
||||||
|
# deployment
|
||||||
|
if globalVar.system_name == "Windows":
|
||||||
|
copy_deployment_files()
|
||||||
|
copy_ringtones()
|
||||||
|
|
||||||
|
# translations
|
||||||
|
release_and_copy_translations()
|
||||||
|
|
||||||
|
# write stamp
|
||||||
|
write_stamp()
|
||||||
|
|
||||||
|
print(bcolors.OKGREEN + "Copy completed" + bcolors.ENDC)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -77,7 +77,7 @@ win32-msvc {
|
||||||
Release: RC_FILE = ico.rc
|
Release: RC_FILE = ico.rc
|
||||||
|
|
||||||
# run the deployment script(run windeployqt)
|
# run the deployment script(run windeployqt)
|
||||||
QMAKE_POST_LINK += $$quote(powershell -ExecutionPolicy Unrestricted -File $$PWD/copy-runtime-files.ps1 -outDir $${DESTDIR})
|
QMAKE_POST_LINK += $$quote(python .\copy-runtime-files.py -o $${DESTDIR})
|
||||||
}
|
}
|
||||||
|
|
||||||
unix {
|
unix {
|
||||||
|
|
|
@ -7,7 +7,6 @@ import platform
|
||||||
import argparse
|
import argparse
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
import fileinput
|
import fileinput
|
||||||
import re
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
# vs help
|
# vs help
|
||||||
|
@ -212,7 +211,7 @@ def build(arch, toolset, sdk_version, config_str, project_path_under_current_pat
|
||||||
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
ap = argparse.ArgumentParser(description="Windows Jami-lrc build tool")
|
ap = argparse.ArgumentParser(description="Client qt build tool")
|
||||||
ap.add_argument(
|
ap.add_argument(
|
||||||
'-b', '--build', action='store_true',
|
'-b', '--build', action='store_true',
|
||||||
help='Build Qt Client')
|
help='Build Qt Client')
|
||||||
|
|
Loading…
Add table
Reference in a new issue