diff options
Diffstat (limited to 'scripts/build.py')
-rwxr-xr-x | scripts/build.py | 78 |
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() |