From c72a9197a46695439ba4e59043d7d71993c477bc Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 5 Oct 2022 13:07:07 +0200 Subject: [PATCH] build.py: Add option to call cpack Adds --with-cpack option. - macOS: does nothing (we already create a better, signed disk image) - Linux: creates qtcreator.deb in build directory - Windows: Checks for NSIS and WIX installation, creates qtcreator.exe and qtcreator.msi as appropriate Change-Id: Ie7816d04cb2e01e90795481e1519b0a6645f5cd3 Reviewed-by: Cristian Adam --- cmake/Utils.cmake | 14 ++++++++++---- packaging/CMakeLists.txt | 1 + scripts/build.py | 27 +++++++++++++++++++++++++-- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake index 363c78ddaf5..e43674e4a35 100644 --- a/cmake/Utils.cmake +++ b/cmake/Utils.cmake @@ -22,16 +22,22 @@ function(setup_dependencies_component) set(_elfutils_arg "--elfutils \"${_elfutils_path}\"") endif() install(CODE " - set(_ide_app_target \"\${CMAKE_INSTALL_PREFIX}/${IDE_APP_PATH}/${IDE_APP_TARGET}${CMAKE_EXECUTABLE_SUFFIX}\") + # DESTDIR is set for e.g. the cpack DEB generator, but is empty in other situations + if(DEFINED ENV{DESTDIR}) + set(DESTDIR_WITH_SEP \"\$ENV{DESTDIR}/\") + else() + set(DESTDIR_WITH_SEP \"\") + endif() + set(_default_app_target \"\${DESTDIR_WITH_SEP}\${CMAKE_INSTALL_PREFIX}/${IDE_APP_PATH}/${IDE_APP_TARGET}${CMAKE_EXECUTABLE_SUFFIX}\") + set(_ide_app_target \"\${_default_app_target}\") if (NOT EXISTS \"\${_ide_app_target}\") # The component CPack generators (WIX, NSIS64, IFW) install every component with their own CMAKE_INSTALL_PREFIX # directory and since deployqt.py needs the path to IDE_APP_TARGET the line below is needeed string(REPLACE \"Dependencies\" \"${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}\" _ide_app_target \"\${_ide_app_target}\") endif() if (NOT EXISTS \"\${_ide_app_target}\") - # On Linux with the DEB generator the CMAKE_INSTALL_PREFIX is relative and the DESTDIR environment variable is needed - # to point out to the IDE_APP_TARGET binary - set(_ide_app_target \"\$ENV{DESTDIR}/\${CMAKE_INSTALL_PREFIX}/${IDE_APP_PATH}/${IDE_APP_TARGET}${CMAKE_EXECUTABLE_SUFFIX}\") + # something went wrong, reset to default and hope for the best + set(_ide_app_target \"\${_default_app_target}\") endif() execute_process(COMMAND \"${Python3_EXECUTABLE}\" diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index ef89687621c..7c577462894 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -26,6 +26,7 @@ set(CPACK_DEBIAN_COMPRESSION_TYPE lzma) get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) list(REMOVE_ITEM CPACK_COMPONENTS_ALL ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}) list(REMOVE_ITEM CPACK_COMPONENTS_ALL libraries) # empty component, breaks WIX +list(REMOVE_ITEM CPACK_COMPONENTS_ALL DebugInfo) # exclude the huge debug info list(PREPEND CPACK_COMPONENTS_ALL ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}) set(CPACK_COMPONENT_Dependencies_HIDDEN TRUE) diff --git a/scripts/build.py b/scripts/build.py index e9aecc01325..d69c6e12868 100755 --- a/scripts/build.py +++ b/scripts/build.py @@ -7,8 +7,8 @@ from __future__ import print_function import argparse import collections -import glob import os +import shutil import common @@ -70,6 +70,8 @@ def get_arguments(): action='store_true', default=False) parser.add_argument('--with-pch', help='Enable building with PCH', action='store_true', default=False) + parser.add_argument('--with-cpack', help='Create packages with cpack', + action='store_true', default=False) parser.add_argument('--add-path', help='Prepends a CMAKE_PREFIX_PATH to the build', action='append', dest='prefix_paths', default=[]) parser.add_argument('--add-module-path', help='Prepends a CMAKE_MODULE_PATH to the build', @@ -92,6 +94,23 @@ def get_arguments(): if not args.qt_path and not args.no_qtcreator: parser.error("argument --qt-path is required if --no-qtcreator is not given") + + if args.with_cpack: + if common.is_mac_platform(): + print('warning: --with-cpack is not supported on macOS, turning off') + args.with_cpack = False + elif common.is_linux_platform(): + args.cpack_generators = ['DEB'] + elif common.is_windows_platform(): + args.cpack_generators = [] + if shutil.which('makensis'): + args.cpack_generators += ['NSIS64'] + if shutil.which('candle') and shutil.which('torch'): + args.cpack_generators += ['WIX'] + else: + print('warning: could not find NSIS or WIX, turning cpack off') + args.with_cpack = False + return args def common_cmake_arguments(args): @@ -149,7 +168,6 @@ def build_qtcreator(args, paths): '-DBUILD_DEVELOPER_DOCS=' + cmake_option(not args.no_docs), '-DBUILD_EXECUTABLE_SDKTOOL=OFF', '-DQTC_FORCE_XCB=ON', - '-DCMAKE_INSTALL_PREFIX=' + common.to_posix_path(paths.install), '-DWITH_TESTS=' + cmake_option(args.with_tests)] cmake_args += common_cmake_arguments(args) @@ -168,6 +186,9 @@ def build_qtcreator(args, paths): cmake_args += ['-DWITH_SANITIZE=ON', '-DSANITIZE_FLAGS=' + ",".join(args.sanitize_flags)] + if args.with_cpack: + cmake_args += ['-DCPACK_PACKAGE_FILE_NAME=qtcreator' + args.zip_infix] + cmake_args += args.config_args common.check_print_call(cmake_args + [paths.src], paths.build) @@ -288,6 +309,8 @@ def package_qtcreator(args, paths): paths.src, paths.install], paths.result) + if args.with_cpack and args.cpack_generators: + common.check_print_call(['cpack', '-G', ';'.join(args.cpack_generators)], paths.build) def get_paths(args):