mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-03-28 14:56:19 +01: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
|
||||
|
||||
# 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 {
|
||||
|
|
|
@ -7,7 +7,6 @@ import platform
|
|||
import argparse
|
||||
import multiprocessing
|
||||
import fileinput
|
||||
import re
|
||||
from enum import Enum
|
||||
|
||||
# vs help
|
||||
|
@ -212,7 +211,7 @@ def build(arch, toolset, sdk_version, config_str, project_path_under_current_pat
|
|||
|
||||
|
||||
def parse_args():
|
||||
ap = argparse.ArgumentParser(description="Windows Jami-lrc build tool")
|
||||
ap = argparse.ArgumentParser(description="Client qt build tool")
|
||||
ap.add_argument(
|
||||
'-b', '--build', action='store_true',
|
||||
help='Build Qt Client')
|
||||
|
|
Loading…
Add table
Reference in a new issue