summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-06-17 15:15:18 +0200
committerEike Ziller <eike.ziller@qt.io>2020-06-25 16:37:28 +0000
commitbc4c2f8a155dd09b223955a650c9e0a6a92b63d8 (patch)
tree5ec6e7ef0aed45e94ddcbbdcbfe822ea131c62ff /scripts
parent5b53ac9661a3a3c0c275cd2f15a6a22a36682391 (diff)
downloadqt-creator-bc4c2f8a155dd09b223955a650c9e0a6a92b63d8.tar.gz
Use the packaging script for the github action
Unifies a bit of what is done. For example this adds documentation and creates a disk image for macOS. It will also make adding perfparser/elfutils and 32bit wininterrupt and qtcreatorcdbext easier. Adds Qt translations. Adds some useful options to build.py and make it work with python3 Disables detection of debug vs release build in deployqt.py on Windows if dumpbin is not there (for MinGW). Change-Id: I3cc33144cad653823321209c219d220eb75093ec Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/build.py51
-rw-r--r--scripts/common.py8
-rwxr-xr-xscripts/deployqt.py16
3 files changed, 54 insertions, 21 deletions
diff --git a/scripts/build.py b/scripts/build.py
index 11b7e0a387..6fd8d976b2 100755
--- a/scripts/build.py
+++ b/scripts/build.py
@@ -89,21 +89,29 @@ def get_arguments():
action='store_true', default=False)
parser.add_argument('--no-zip', help='Skip creation of 7zip files for install and developer package',
action='store_true', default=False)
+ parser.add_argument('--with-tests', help='Enable building of tests',
+ action='store_true', default=False)
parser.add_argument('--add-make-arg', help='Passes the argument to the make tool.',
action='append', dest='make_args', default=[])
+ parser.add_argument('--add-config', help=('Adds the argument to the CMake configuration call. '
+ 'Use "--add-config=-DSOMEVAR=SOMEVALUE" if the argument begins with a dash.'),
+ action='append', dest='config_args', default=[])
+ parser.add_argument('--zip-infix', help='Adds an infix to generated zip files, use e.g. for a build number.',
+ default='')
return parser.parse_args()
def build_qtcreator(args, paths):
if not os.path.exists(paths.build):
os.makedirs(paths.build)
prefix_paths = [paths.qt]
- if args.llvm_path:
- prefix_paths += [args.llvm_path]
+ if paths.llvm:
+ prefix_paths += [paths.llvm]
if paths.elfutils:
prefix_paths += [paths.elfutils]
build_type = 'Debug' if args.debug else 'Release'
with_docs_str = 'OFF' if args.no_docs else 'ON'
build_date_option = 'OFF' if args.no_build_date else 'ON'
+ test_option = 'ON' if args.with_tests else 'OFF'
cmake_args = ['cmake',
'-DCMAKE_PREFIX_PATH=' + ';'.join(prefix_paths),
'-DCMAKE_BUILD_TYPE=' + build_type,
@@ -112,7 +120,7 @@ def build_qtcreator(args, paths):
'-DBUILD_DEVELOPER_DOCS=' + with_docs_str,
'-DBUILD_EXECUTABLE_SDKTOOL=OFF',
'-DCMAKE_INSTALL_PREFIX=' + paths.install,
- '-DWITH_TESTS=OFF',
+ '-DWITH_TESTS=' + test_option,
'-G', 'Ninja']
if args.python3:
@@ -122,9 +130,10 @@ def build_qtcreator(args, paths):
# even if MSVC is first mentioned in the PATH...
# TODO would be nicer if we only did this if cl.exe is indeed first in the PATH
if common.is_windows_platform():
- cmake_args += ['-DCMAKE_C_COMPILER=cl',
- '-DCMAKE_CXX_COMPILER=cl',
- '-DBUILD_EXECUTABLE_WIN32INTERRUPT=OFF',
+ if not os.environ.get('CC') and not os.environ.get('CXX'):
+ cmake_args += ['-DCMAKE_C_COMPILER=cl',
+ '-DCMAKE_CXX_COMPILER=cl']
+ cmake_args += ['-DBUILD_EXECUTABLE_WIN32INTERRUPT=OFF',
'-DBUILD_EXECUTABLE_WIN64INTERRUPT=OFF',
'-DBUILD_LIBRARY_QTCREATORCDBEXT=OFF']
if args.python_path:
@@ -142,6 +151,8 @@ def build_qtcreator(args, paths):
'-DIDE_REVISION_STR=' + ide_revision,
'-DIDE_REVISION_URL=https://code.qt.io/cgit/qt-creator/qt-creator.git/log/?id=' + ide_revision]
+ cmake_args += args.config_args
+
common.check_print_call(cmake_args + [paths.src], paths.build)
build_args = ['cmake', '--build', '.']
if args.make_args:
@@ -200,31 +211,42 @@ def deploy_qt(args, paths):
qt_plugins = os.path.join(paths.qt, 'plugins')
qt_imports = os.path.join(paths.qt, 'imports')
qt_qml = os.path.join(paths.qt, 'qml')
+ env = dict(os.environ)
+ if paths.llvm:
+ env['LLVM_INSTALL_DIR'] = paths.llvm
common.check_print_call([script, app, qt_bins, qt_translations, qt_plugins,
qt_imports, qt_qml],
- paths.build)
+ paths.build,
+ env=env)
else:
cmd_args = ['python', '-u', os.path.join(paths.src, 'scripts', 'deployqt.py'), '-i']
if paths.elfutils:
cmd_args.extend(['--elfutils-path', paths.elfutils])
+ if paths.llvm:
+ cmd_args.extend(['--llvm-path', paths.llvm])
exe = os.path.join(paths.install, 'bin', args.app_target)
common.check_print_call(cmd_args + [exe, os.path.join(paths.qt, 'bin', 'qmake')],
paths.build)
def package_qtcreator(args, paths):
if not args.no_zip:
- common.check_print_call(['7z', 'a', '-mmt2', os.path.join(paths.result, 'qtcreator.7z'), '*'],
+ common.check_print_call(['7z', 'a', '-mmt2',
+ os.path.join(paths.result, 'qtcreator' + args.zip_infix + '.7z'),
+ '*'],
paths.install)
common.check_print_call(['7z', 'a', '-mmt2',
- os.path.join(paths.result, 'qtcreator_dev.7z'), '*'],
+ os.path.join(paths.result, 'qtcreator' + args.zip_infix + '_dev.7z'),
+ '*'],
paths.dev_install)
if common.is_windows_platform():
common.check_print_call(['7z', 'a', '-mmt2',
- os.path.join(paths.result, 'wininterrupt.7z'), '*'],
+ os.path.join(paths.result, 'wininterrupt' + args.zip_infix + '.7z'),
+ '*'],
paths.wininterrupt_install)
if not args.no_cdb:
common.check_print_call(['7z', 'a', '-mmt2',
- os.path.join(paths.result, 'qtcreatorcdbext.7z'), '*'],
+ os.path.join(paths.result, 'qtcreatorcdbext' + args.zip_infix + '.7z'),
+ '*'],
paths.qtcreatorcdbext_install)
if common.is_mac_platform():
@@ -233,7 +255,7 @@ def package_qtcreator(args, paths):
if not args.no_dmg:
common.check_print_call(['python', '-u',
os.path.join(paths.src, 'scripts', 'makedmg.py'),
- 'qt-creator.dmg',
+ 'qt-creator' + args.zip_infix + '.dmg',
'Qt Creator',
paths.src,
paths.install],
@@ -244,7 +266,7 @@ def get_paths(args):
['qt', 'src', 'build',
'install', 'dev_install', 'wininterrupt_install',
'qtcreatorcdbext_install', 'result',
- 'elfutils'])
+ 'elfutils', 'llvm'])
build_path = os.path.abspath(args.build)
install_path = os.path.join(build_path, 'install')
return Paths(qt=os.path.abspath(args.qt_path),
@@ -255,7 +277,8 @@ def get_paths(args):
wininterrupt_install=os.path.join(install_path, 'wininterrupt'),
qtcreatorcdbext_install=os.path.join(install_path, 'qtcreatorcdbext'),
result=build_path,
- elfutils=os.path.abspath(args.elfutils_path) if args.elfutils_path else None)
+ elfutils=os.path.abspath(args.elfutils_path) if args.elfutils_path else None,
+ llvm=os.path.abspath(args.llvm_path) if args.llvm_path else None)
def main():
args = get_arguments()
diff --git a/scripts/common.py b/scripts/common.py
index 61923803fb..d033108648 100644
--- a/scripts/common.py
+++ b/scripts/common.py
@@ -40,18 +40,20 @@ def is_linux_platform():
def is_mac_platform():
return sys.platform.startswith('darwin')
-def check_print_call(command, workdir):
+def check_print_call(command, workdir, env=None):
print('------------------------------------------')
print('COMMAND:')
print(' '.join(['"' + c.replace('"', '\\"') + '"' for c in command]))
print('PWD: "' + workdir + '"')
print('------------------------------------------')
- subprocess.check_call(command, cwd=workdir)
+ subprocess.check_call(command, cwd=workdir, env=env)
def get_git_SHA(path):
try:
- return subprocess.check_output(['git', 'rev-list', '-n1', 'HEAD'], cwd=path).strip()
+ output = subprocess.check_output(['git', 'rev-list', '-n1', 'HEAD'], cwd=path).strip()
+ decoded_output = output.decode(encoding) if encoding else output
+ return decoded_output
except subprocess.CalledProcessError:
return None
return None
diff --git a/scripts/deployqt.py b/scripts/deployqt.py
index 4579c92cc3..5d7011e068 100755
--- a/scripts/deployqt.py
+++ b/scripts/deployqt.py
@@ -47,6 +47,10 @@ def get_args():
action='store_true', default=False)
parser.add_argument('--elfutils-path',
help='Path to elfutils installation for use by perfprofiler (Windows, Linux)')
+ # TODO remove defaulting to LLVM_INSTALL_DIR when we no longer build qmake based packages
+ parser.add_argument('--llvm-path',
+ help='Path to LLVM installation',
+ default=os.environ.get('LLVM_INSTALL_DIR'))
parser.add_argument('qtcreator_binary', help='Path to Qt Creator binary')
parser.add_argument('qmake_binary', help='Path to qmake binary')
@@ -98,8 +102,12 @@ def is_debug(fpath):
# bootstrap exception
if coredebug.search(fpath):
return True
- output = subprocess.check_output(['dumpbin', '/imports', fpath])
- return coredebug.search(output.decode(encoding)) != None
+ try:
+ output = subprocess.check_output(['dumpbin', '/imports', fpath])
+ return coredebug.search(output.decode(encoding)) != None
+ except FileNotFoundError:
+ # dumpbin is not there, maybe MinGW ? Just ship all .dlls.
+ return debug_build
def is_ignored_windows_file(use_debug, basepath, filename):
ignore_patterns = ['.lib', '.pdb', '.exp', '.ilk']
@@ -369,8 +377,8 @@ def main():
else:
copy_qt_libs(qt_deploy_prefix, QT_INSTALL_BINS, QT_INSTALL_LIBS, QT_INSTALL_PLUGINS, QT_INSTALL_IMPORTS, QT_INSTALL_QML, plugins, imports)
copy_translations(install_dir, QT_INSTALL_TRANSLATIONS)
- if "LLVM_INSTALL_DIR" in os.environ:
- deploy_libclang(install_dir, os.environ["LLVM_INSTALL_DIR"], chrpath_bin)
+ if args.llvm_path:
+ deploy_libclang(install_dir, args.llvm_path, chrpath_bin)
if args.elfutils_path:
deploy_elfutils(install_dir, chrpath_bin, args)