Skip to content
Snippets Groups Projects
Commit 345da3d7 authored by Ming Rui Zhang's avatar Ming Rui Zhang Committed by Ming Rui Zhang
Browse files

misc: use python script to replace copy-runtime-files.ps1

Gitlab: #160
Change-Id: Icfaa6f891cbae159ddced3119612abe1a7a89885
parent 2d461cc5
No related branches found
No related tags found
No related merge requests found
[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
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')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment