import os
import sys
import io
import argparse
from build_qt.qt_repo import QtRepo, QtRepoError
from build_qt.qt5_build import Qt5Build
from build_qt.config import Config
def init_parser():
parser = argparse.ArgumentParser(description='Build Qt for OHOS')
parser.add_argument('--init', action='store_true', help='初始化Qt仓库,并应用补丁')
parser.add_argument('--env_check', action='store_true', help='检查开发环境')
parser.add_argument('--reset_repo', action='store_true', help='重置Qt仓库,并重新应用补丁')
build_stages = ['configure', 'build', 'install', 'clean', 'all', "print_build_info"]
parser.add_argument('--exe_stage', type=str, choices=build_stages, help='执行指定阶段')
parser.add_argument("--with_pack", action="store_true", help="编译后是否打包编译结果")
parser.add_argument('--use_github', action='store_true', help='使用GitHub地址')
_args = parser.parse_args()
if not any(vars(_args).values()):
parser.print_help()
exit(0)
return _args
if __name__ == '__main__':
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stdout.reconfigure(line_buffering=True)
args = init_parser()
config_path = os.path.join(os.getcwd(), 'configure.json')
if not os.path.exists(config_path):
package_dir = os.path.dirname(os.path.abspath(__file__))
config_path = os.path.join(package_dir, 'configure.json')
if not os.path.exists(config_path):
print(f'错误: 找不到配置文件 configure.json')
print(f'已尝试: {os.path.join(os.getcwd(), "configure.json")}')
print(f'已尝试: {config_path}')
exit(1)
config = Config(config_path, args.use_github)
qt_dir_name = 'qt6' if config.is_qt6() else 'qt5'
qt_dir = os.path.join(config.get_working_dir(), qt_dir_name)
repo = QtRepo(qt_dir, config)
if args.init:
try:
repo.clone()
repo.clone_patch_repo()
if not config.is_qt6():
print('Qt5:在init阶段应用补丁')
repo.apply_patches()
else:
print('Qt6:补丁将在build阶段(主机编译后)应用')
except QtRepoError as e:
print('QtRepoError:', e)
exit(1)
except Exception as e:
print('Error:', e)
exit(1)
exit()
if args.reset_repo:
try:
repo.apply_patches()
except QtRepoError as e:
print('QtRepoError:', e)
exit(1)
except Exception as e:
print('Error:', e)
exit(1)
exit()
if args.exe_stage is not None or args.env_check:
config.dev_env_check()
if args.env_check:
exit()
if config.is_qt6():
from build_qt.qt6_build import Qt6Build
print('检测到Qt6版本,使用Qt6Build类')
qtBuild = Qt6Build(qt_dir, config)
else:
print('检测到Qt5版本,使用Qt5Build类')
qtBuild = Qt5Build(qt_dir, config)
if args.exe_stage == 'clean':
qtBuild.clean()
exit()
if args.exe_stage == 'configure' or args.exe_stage == 'all':
try:
qtBuild.configure()
except Exception as e:
print('Error during configuration:', e)
exit(1)
if args.exe_stage == 'build' or args.exe_stage == 'all':
try:
qtBuild.build(config.build_jobs())
except Exception as e:
print('Error during build:', e)
exit(1)
if args.exe_stage == 'install' or args.exe_stage == 'all':
try:
qtBuild.install()
except Exception as e:
print('Error during install:', e)
exit(1)
if args.with_pack:
try:
qtBuild.pack()
except Exception as e:
print('Error during pack:', e)
exit(1)
if args.exe_stage == 'print_build_info':
qtBuild.print_build_info()
exit()