aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build.py')
-rwxr-xr-xscripts/build.py78
1 files changed, 52 insertions, 26 deletions
diff --git a/scripts/build.py b/scripts/build.py
index e7e414f508..6fd8d976b2 100755
--- a/scripts/build.py
+++ b/scripts/build.py
@@ -83,32 +83,44 @@ def get_arguments():
action='store_true', default=(not common.is_windows_platform()))
parser.add_argument('--no-docs', help='Skip documentation generation',
action='store_true', default=False)
+ parser.add_argument('--no-build-date', help='Does not show build date in about dialog, for reproducible builds',
+ action='store_true', default=False)
parser.add_argument('--no-dmg', help='Skip disk image creation (macOS)',
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 args.elfutils_path:
- prefix_paths += [args.elfutils_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,
+ '-DSHOW_BUILD_DATE=' + build_date_option,
'-DWITH_DOCS=' + with_docs_str,
'-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:
@@ -118,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:
@@ -138,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:
@@ -153,17 +168,12 @@ def build_qtcreator(args, paths):
paths.build)
if not args.no_docs:
common.check_print_call(['cmake', '--install', '.', '--prefix', paths.install,
- '--component', 'qtc_docs_qtcreator'],
- paths.build)
- common.check_print_call(['cmake', '--install', '.', '--prefix', paths.install,
- '--component', 'html_docs_qtcreator'],
+ '--component', 'qch_docs'],
paths.build)
common.check_print_call(['cmake', '--install', '.', '--prefix', paths.install,
- '--component', 'html_docs_qtcreator-dev'],
- paths.build)
- common.check_print_call(['cmake', '--install', '.', '--prefix', paths.install,
- '--component', 'html_docs_qtcreator-dev'],
+ '--component', 'html_docs'],
paths.build)
+
def build_wininterrupt(args, paths):
if not common.is_windows_platform():
return
@@ -201,29 +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(['python', '-u', os.path.join(paths.src, 'scripts', 'deployqt.py'),
- '-i', exe, os.path.join(paths.qt, 'bin', 'qmake')],
+ 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():
@@ -232,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],
@@ -242,7 +265,8 @@ def get_paths(args):
Paths = collections.namedtuple('Paths',
['qt', 'src', 'build',
'install', 'dev_install', 'wininterrupt_install',
- 'qtcreatorcdbext_install', 'result'])
+ 'qtcreatorcdbext_install', 'result',
+ '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),
@@ -252,7 +276,9 @@ def get_paths(args):
dev_install=os.path.join(install_path, 'qt-creator-dev'),
wininterrupt_install=os.path.join(install_path, 'wininterrupt'),
qtcreatorcdbext_install=os.path.join(install_path, 'qtcreatorcdbext'),
- result=build_path)
+ result=build_path,
+ 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()