# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. #.rst: # CPackIFW # -------- # # .. _QtIFW: http://doc.qt.io/qtinstallerframework/index.html # # This module looks for the location of the command line utilities supplied # with the Qt Installer Framework (QtIFW_). # # The module also defines several commands to control the behavior of the # CPack ``IFW`` generator. # # # Overview # ^^^^^^^^ # # CPack ``IFW`` generator helps you to create online and offline # binary cross-platform installers with a graphical user interface. # # CPack IFW generator prepares project installation and generates configuration # and meta information for QtIFW_ tools. # # The QtIFW_ provides a set of tools and utilities to create # installers for the supported desktop Qt platforms: Linux, Microsoft Windows, # and Mac OS X. # # You should also install QtIFW_ to use CPack ``IFW`` generator. # # Hints # ^^^^^ # # Generally, the CPack ``IFW`` generator automatically finds QtIFW_ tools, # but if you don't use a default path for installation of the QtIFW_ tools, # the path may be specified in either a CMake or an environment variable: # # .. variable:: CPACK_IFW_ROOT # # An CMake variable which specifies the location of the QtIFW_ tool suite. # # The variable will be cached in the ``CPackConfig.cmake`` file and used at # CPack runtime. # # .. variable:: QTIFWDIR # # An environment variable which specifies the location of the QtIFW_ tool # suite. # # .. note:: # The specified path should not contain "bin" at the end # (for example: "D:\\DevTools\\QtIFW2.0.5"). # # The :variable:`CPACK_IFW_ROOT` variable has a higher priority and overrides # the value of the :variable:`QTIFWDIR` variable. # # Internationalization # ^^^^^^^^^^^^^^^^^^^^ # # Some variables and command arguments support internationalization via # CMake script. This is an optional feature. # # Installers created by QtIFW_ tools have built-in support for # internationalization and many phrases are localized to many languages, # but this does not apply to the description of the your components and groups # that will be distributed. # # Localization of the description of your components and groups is useful for # users of your installers. # # A localized variable or argument can contain a single default value, and a # set of pairs the name of the locale and the localized value. # # For example: # # .. code-block:: cmake # # set(LOCALIZABLE_VARIABLE "Default value" # en "English value" # en_US "American value" # en_GB "Great Britain value" # ) # # Variables # ^^^^^^^^^ # # You can use the following variables to change behavior of CPack ``IFW`` # generator. # # Debug # """""" # # .. variable:: CPACK_IFW_VERBOSE # # Set to ``ON`` to enable addition debug output. # By default is ``OFF``. # # Package # """"""" # # .. variable:: CPACK_IFW_PACKAGE_TITLE # # Name of the installer as displayed on the title bar. # By default used :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`. # # .. variable:: CPACK_IFW_PACKAGE_PUBLISHER # # Publisher of the software (as shown in the Windows Control Panel). # By default used :variable:`CPACK_PACKAGE_VENDOR`. # # .. variable:: CPACK_IFW_PRODUCT_URL # # URL to a page that contains product information on your web site. # # .. variable:: CPACK_IFW_PACKAGE_ICON # # Filename for a custom installer icon. The actual file is '.icns' (Mac OS X), # '.ico' (Windows). No functionality on Unix. # # .. variable:: CPACK_IFW_PACKAGE_WINDOW_ICON # # Filename for a custom window icon in PNG format for the Installer # application. # # .. variable:: CPACK_IFW_PACKAGE_LOGO # # Filename for a logo is used as QWizard::LogoPixmap. # # .. variable:: CPACK_IFW_PACKAGE_WATERMARK # # Filename for a watermark is used as QWizard::WatermarkPixmap. # # .. variable:: CPACK_IFW_PACKAGE_BANNER # # Filename for a banner is used as QWizard::BannerPixmap. # # .. variable:: CPACK_IFW_PACKAGE_BACKGROUND # # Filename for an image used as QWizard::BackgroundPixmap (only used by MacStyle). # # .. variable:: CPACK_IFW_PACKAGE_WIZARD_STYLE # # Wizard style to be used ("Modern", "Mac", "Aero" or "Classic"). # # .. variable:: CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH # # Default width of the wizard in pixels. Setting a banner image will override this. # # .. variable:: CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT # # Default height of the wizard in pixels. Setting a watermark image will override this. # # .. variable:: CPACK_IFW_PACKAGE_TITLE_COLOR # # Color of the titles and subtitles (takes an HTML color code, such as "#88FF33"). # # .. variable:: CPACK_IFW_PACKAGE_START_MENU_DIRECTORY # # Name of the default program group for the product in the Windows Start menu. # # By default used :variable:`CPACK_IFW_PACKAGE_NAME`. # # .. variable:: CPACK_IFW_TARGET_DIRECTORY # # Default target directory for installation. # By default used # "@ApplicationsDir@/:variable:`CPACK_PACKAGE_INSTALL_DIRECTORY`" # # You can use predefined variables. # # .. variable:: CPACK_IFW_ADMIN_TARGET_DIRECTORY # # Default target directory for installation with administrator rights. # # You can use predefined variables. # # .. variable:: CPACK_IFW_PACKAGE_GROUP # # The group, which will be used to configure the root package # # .. variable:: CPACK_IFW_PACKAGE_NAME # # The root package name, which will be used if configuration group is not # specified # # .. variable:: CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME # # Filename of the generated maintenance tool. # The platform-specific executable file extension is appended. # # By default used QtIFW_ defaults (``maintenancetool``). # # .. variable:: CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE # # Filename for the configuration of the generated maintenance tool. # # By default used QtIFW_ defaults (``maintenancetool.ini``). # # .. variable:: CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS # # Set to ``ON`` if the installation path can contain non-ASCII characters. # # Is ``ON`` for QtIFW_ less 2.0 tools. # # .. variable:: CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH # # Set to ``OFF`` if the installation path cannot contain space characters. # # Is ``ON`` for QtIFW_ less 2.0 tools. # # .. variable:: CPACK_IFW_PACKAGE_CONTROL_SCRIPT # # Filename for a custom installer control script. # # .. variable:: CPACK_IFW_PACKAGE_RESOURCES # # List of additional resources ('.qrc' files) to include in the installer # binary. # # You can use :command:`cpack_ifw_add_package_resources` command to resolve # relative paths. # # .. variable:: CPACK_IFW_PACKAGE_FILE_EXTENSION # # The target binary extension. # # On Linux, the name of the target binary is automatically extended with # '.run', if you do not specify the extension. # # On Windows, the target is created as an application with the extension # '.exe', which is automatically added, if not supplied. # # On Mac, the target is created as an DMG disk image with the extension # '.dmg', which is automatically added, if not supplied. # # .. variable:: CPACK_IFW_REPOSITORIES_ALL # # The list of remote repositories. # # The default value of this variable is computed by CPack and contains # all repositories added with command :command:`cpack_ifw_add_repository` # or updated with command :command:`cpack_ifw_update_repository`. # # .. variable:: CPACK_IFW_DOWNLOAD_ALL # # If this is ``ON`` all components will be downloaded. # By default is ``OFF`` or used value # from ``CPACK_DOWNLOAD_ALL`` if set # # Components # """""""""" # # .. variable:: CPACK_IFW_RESOLVE_DUPLICATE_NAMES # # Resolve duplicate names when installing components with groups. # # .. variable:: CPACK_IFW_PACKAGES_DIRECTORIES # # Additional prepared packages dirs that will be used to resolve # dependent components. # # .. variable:: CPACK_IFW_REPOSITORIES_DIRECTORIES # # Additional prepared repository dirs that will be used to resolve and # repack dependent components. This feature available only # since QtIFW_ 3.1. # # Tools # """"" # # .. variable:: CPACK_IFW_FRAMEWORK_VERSION # # The version of used QtIFW_ tools. # # .. variable:: CPACK_IFW_BINARYCREATOR_EXECUTABLE # # The path to "binarycreator" command line client. # # This variable is cached and may be configured if needed. # # .. variable:: CPACK_IFW_REPOGEN_EXECUTABLE # # The path to "repogen" command line client. # # This variable is cached and may be configured if needed. # # .. variable:: CPACK_IFW_INSTALLERBASE_EXECUTABLE # # The path to "installerbase" installer executable base. # # This variable is cached and may be configured if needed. # # .. variable:: CPACK_IFW_DEVTOOL_EXECUTABLE # # The path to "devtool" command line client. # # This variable is cached and may be configured if needed. # # Commands # ^^^^^^^^^ # # The module defines the following commands: # # .. command:: cpack_ifw_configure_component # # Sets the arguments specific to the CPack IFW generator. # # :: # # cpack_ifw_configure_component(<compname> [COMMON] [ESSENTIAL] [VIRTUAL] # [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS] # [NAME <name>] # [DISPLAY_NAME <display_name>] # Note: Internationalization supported # [DESCRIPTION <description>] # Note: Internationalization supported # [UPDATE_TEXT <update_text>] # [VERSION <version>] # [RELEASE_DATE <release_date>] # [SCRIPT <script>] # [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated # [DEPENDS|DEPENDENCIES <com_id> ...] # [AUTO_DEPEND_ON <comp_id> ...] # [LICENSES <display_name> <file_path> ...] # [DEFAULT <value>] # [USER_INTERFACES <file_path> <file_path> ...] # [TRANSLATIONS <file_path> <file_path> ...]) # # This command should be called after :command:`cpack_add_component` command. # # ``COMMON`` # if set, then the component will be packaged and installed as part # of a group to which it belongs. # # ``ESSENTIAL`` # if set, then the package manager stays disabled until that # component is updated. # # ``VIRTUAL`` # if set, then the component will be hidden from the installer. # It is a equivalent of the ``HIDDEN`` option from the # :command:`cpack_add_component` command. # # ``FORCED_INSTALLATION`` # if set, then the component must always be installed. # It is a equivalent of the ``REQUARED`` option from the # :command:`cpack_add_component` command. # # ``REQUIRES_ADMIN_RIGHTS`` # set it if the component needs to be installed with elevated permissions. # # ``NAME`` # is used to create domain-like identification for this component. # By default used origin component name. # # ``DISPLAY_NAME`` # set to rewrite original name configured by # :command:`cpack_add_component` command. # # ``DESCRIPTION`` # set to rewrite original description configured by # :command:`cpack_add_component` command. # # ``UPDATE_TEXT`` # will be added to the component description if this is an update to # the component. # # ``VERSION`` # is version of component. # By default used :variable:`CPACK_PACKAGE_VERSION`. # # ``RELEASE_DATE`` # keep empty to auto generate. # # ``SCRIPT`` # is a relative or absolute path to operations script # for this component. # # ``PRIORITY`` | ``SORTING_PRIORITY`` # is priority of the component in the tree. # The ``PRIORITY`` option is deprecated and will be removed in a future # version of CMake. Please use ``SORTING_PRIORITY`` option instead. # # ``DEPENDS`` | ``DEPENDENCIES`` # list of dependency component or component group identifiers in # QtIFW_ style. # # ``AUTO_DEPEND_ON`` # list of identifiers of component or component group in QtIFW_ style # that this component has an automatic dependency on. # # ``LICENSES`` # pair of <display_name> and <file_path> of license text for this # component. You can specify more then one license. # # ``DEFAULT`` # Possible values are: TRUE, FALSE, and SCRIPT. # Set to FALSE to disable the component in the installer or to SCRIPT # to resolved during runtime (don't forget add the file of the script # as a value of the ``SCRIPT`` option). # # ``USER_INTERFACES`` # is a list of <file_path> ('.ui' files) representing pages to load. # # ``TRANSLATIONS`` # is a list of <file_path> ('.qm' files) representing translations to load. # # # .. command:: cpack_ifw_configure_component_group # # Sets the arguments specific to the CPack IFW generator. # # :: # # cpack_ifw_configure_component_group(<groupname> [VIRTUAL] # [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS] # [NAME <name>] # [DISPLAY_NAME <display_name>] # Note: Internationalization supported # [DESCRIPTION <description>] # Note: Internationalization supported # [UPDATE_TEXT <update_text>] # [VERSION <version>] # [RELEASE_DATE <release_date>] # [SCRIPT <script>] # [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated # [DEPENDS|DEPENDENCIES <com_id> ...] # [AUTO_DEPEND_ON <comp_id> ...] # [LICENSES <display_name> <file_path> ...] # [DEFAULT <value>] # [USER_INTERFACES <file_path> <file_path> ...] # [TRANSLATIONS <file_path> <file_path> ...]) # # This command should be called after :command:`cpack_add_component_group` # command. # # ``VIRTUAL`` # if set, then the group will be hidden from the installer. # Note that setting this on a root component does not work. # # ``FORCED_INSTALLATION`` # if set, then the group must always be installed. # # ``REQUIRES_ADMIN_RIGHTS`` # set it if the component group needs to be installed with elevated # permissions. # # ``NAME`` # is used to create domain-like identification for this component group. # By default used origin component group name. # # ``DISPLAY_NAME`` # set to rewrite original name configured by # :command:`cpack_add_component_group` command. # # ``DESCRIPTION`` # set to rewrite original description configured by # :command:`cpack_add_component_group` command. # # ``UPDATE_TEXT`` # will be added to the component group description if this is an update to # the component group. # # ``VERSION`` # is version of component group. # By default used :variable:`CPACK_PACKAGE_VERSION`. # # ``RELEASE_DATE`` # keep empty to auto generate. # # ``SCRIPT`` # is a relative or absolute path to operations script # for this component group. # # ``PRIORITY`` | ``SORTING_PRIORITY`` # is priority of the component group in the tree. # The ``PRIORITY`` option is deprecated and will be removed in a future # version of CMake. Please use ``SORTING_PRIORITY`` option instead. # # ``DEPENDS`` | ``DEPENDENCIES`` # list of dependency component or component group identifiers in # QtIFW_ style. # # ``AUTO_DEPEND_ON`` # list of identifiers of component or component group in QtIFW_ style # that this component group has an automatic dependency on. # # ``LICENSES`` # pair of <display_name> and <file_path> of license text for this # component group. You can specify more then one license. # # ``DEFAULT`` # Possible values are: TRUE, FALSE, and SCRIPT. # Set to TRUE to preselect the group in the installer # (this takes effect only on groups that have no visible child components) # or to SCRIPT to resolved during runtime (don't forget add the file of # the script as a value of the ``SCRIPT`` option). # # ``USER_INTERFACES`` # is a list of <file_path> ('.ui' files) representing pages to load. # # ``TRANSLATIONS`` # is a list of <file_path> ('.qm' files) representing translations to load. # # # .. command:: cpack_ifw_add_repository # # Add QtIFW_ specific remote repository to binary installer. # # :: # # cpack_ifw_add_repository(<reponame> [DISABLED] # URL <url> # [USERNAME <username>] # [PASSWORD <password>] # [DISPLAY_NAME <display_name>]) # # This command will also add the <reponame> repository # to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`. # # ``DISABLED`` # if set, then the repository will be disabled by default. # # ``URL`` # is points to a list of available components. # # ``USERNAME`` # is used as user on a protected repository. # # ``PASSWORD`` # is password to use on a protected repository. # # ``DISPLAY_NAME`` # is string to display instead of the URL. # # # .. command:: cpack_ifw_update_repository # # Update QtIFW_ specific repository from remote repository. # # :: # # cpack_ifw_update_repository(<reponame> # [[ADD|REMOVE] URL <url>]| # [REPLACE OLD_URL <old_url> NEW_URL <new_url>]] # [USERNAME <username>] # [PASSWORD <password>] # [DISPLAY_NAME <display_name>]) # # This command will also add the <reponame> repository # to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`. # # ``URL`` # is points to a list of available components. # # ``OLD_URL`` # is points to a list that will replaced. # # ``NEW_URL`` # is points to a list that will replace to. # # ``USERNAME`` # is used as user on a protected repository. # # ``PASSWORD`` # is password to use on a protected repository. # # ``DISPLAY_NAME`` # is string to display instead of the URL. # # # .. command:: cpack_ifw_add_package_resources # # Add additional resources in the installer binary. # # :: # # cpack_ifw_add_package_resources(<file_path> <file_path> ...) # # This command will also add the specified files # to a variable :variable:`CPACK_IFW_PACKAGE_RESOURCES`. # # # Example usage # ^^^^^^^^^^^^^ # # .. code-block:: cmake # # set(CPACK_PACKAGE_NAME "MyPackage") # set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyPackage Installation Example") # set(CPACK_PACKAGE_VERSION "1.0.0") # Version of installer # # include(CPack) # include(CPackIFW) # # cpack_add_component(myapp # DISPLAY_NAME "MyApp" # DESCRIPTION "My Application") # Default description # cpack_ifw_configure_component(myapp # DESCRIPTION ru_RU "Мое Приложение" # Localized description # VERSION "1.2.3" # Version of component # SCRIPT "operations.qs") # cpack_add_component(mybigplugin # DISPLAY_NAME "MyBigPlugin" # DESCRIPTION "My Big Downloadable Plugin" # DOWNLOADED) # cpack_ifw_add_repository(myrepo # URL "http://example.com/ifw/repo/myapp" # DISPLAY_NAME "My Application Repository") # # # Online installer # ^^^^^^^^^^^^^^^^ # # By default CPack IFW generator makes offline installer. This means that all # components will be packaged into a binary file. # # To make a component downloaded, you must set the ``DOWNLOADED`` option in # :command:`cpack_add_component`. # # Then you would use the command :command:`cpack_configure_downloads`. # If you set ``ALL`` option all components will be downloaded. # # You also can use command :command:`cpack_ifw_add_repository` and # variable :variable:`CPACK_IFW_DOWNLOAD_ALL` for more specific configuration. # # CPack IFW generator creates "repository" dir in current binary dir. You # would copy content of this dir to specified ``site`` (``url``). # # See Also # ^^^^^^^^ # # Qt Installer Framework Manual: # # * Index page: # http://doc.qt.io/qtinstallerframework/index.html # # * Component Scripting: # http://doc.qt.io/qtinstallerframework/scripting.html # # * Predefined Variables: # http://doc.qt.io/qtinstallerframework/scripting.html#predefined-variables # # * Promoting Updates: # http://doc.qt.io/qtinstallerframework/ifw-updates.html # # Download Qt Installer Framework for you platform from Qt site: # http://download.qt.io/official_releases/qt-installer-framework # #============================================================================= # Search Qt Installer Framework tools #============================================================================= # Default path foreach(_CPACK_IFW_PATH_VAR "CPACK_IFW_ROOT" "QTIFWDIR" "QTDIR") if(DEFINED ${_CPACK_IFW_PATH_VAR} AND NOT "${${_CPACK_IFW_PATH_VAR}}" STREQUAL "") list(APPEND _CPACK_IFW_PATHS "${${_CPACK_IFW_PATH_VAR}}") endif() if(NOT "$ENV{${_CPACK_IFW_PATH_VAR}}" STREQUAL "") list(APPEND _CPACK_IFW_PATHS "$ENV{${_CPACK_IFW_PATH_VAR}}") endif() endforeach() if(WIN32) list(APPEND _CPACK_IFW_PATHS "$ENV{HOMEDRIVE}/Qt" "C:/Qt") else() list(APPEND _CPACK_IFW_PATHS "$ENV{HOME}/Qt" "/opt/Qt") endif() list(REMOVE_DUPLICATES _CPACK_IFW_PATHS) set(_CPACK_IFW_PREFIXES # QtSDK "Tools/QtInstallerFramework/" # Second branch "QtIFW" # First branch "QtIFW-") set(_CPACK_IFW_VERSIONS "3.1" "3.1.0" "3.0" "3.0.0" "2.3" "2.3.0" "2.2" "2.2.0" "2.1" "2.1.0" "2.0" "2.0.5" "2.0.3" "2.0.2" "2.0.1" "2.0.0" "1.6" "1.6.0" "1.5" "1.5.0" "1.4" "1.4.0" "1.3" "1.3.0") set(_CPACK_IFW_SUFFIXES "bin") foreach(_CPACK_IFW_PREFIX ${_CPACK_IFW_PREFIXES}) foreach(_CPACK_IFW_VERSION ${_CPACK_IFW_VERSIONS}) list(APPEND _CPACK_IFW_SUFFIXES "${_CPACK_IFW_PREFIX}${_CPACK_IFW_VERSION}/bin") endforeach() endforeach() # Look for 'binarycreator' find_program(CPACK_IFW_BINARYCREATOR_EXECUTABLE NAMES binarycreator PATHS ${_CPACK_IFW_PATHS} PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES} DOC "QtIFW binarycreator command line client") mark_as_advanced(CPACK_IFW_BINARYCREATOR_EXECUTABLE) # Look for 'repogen' find_program(CPACK_IFW_REPOGEN_EXECUTABLE NAMES repogen PATHS ${_CPACK_IFW_PATHS} PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES} DOC "QtIFW repogen command line client" ) mark_as_advanced(CPACK_IFW_REPOGEN_EXECUTABLE) # Look for 'installerbase' find_program(CPACK_IFW_INSTALLERBASE_EXECUTABLE NAMES installerbase PATHS ${_CPACK_IFW_PATHS} PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES} DOC "QtIFW installer executable base" ) mark_as_advanced(CPACK_IFW_INSTALLERBASE_EXECUTABLE) # Look for 'devtool' (appeared in the second branch) find_program(CPACK_IFW_DEVTOOL_EXECUTABLE NAMES devtool PATHS ${_CPACK_IFW_PATHS} PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES} DOC "QtIFW devtool command line client" ) mark_as_advanced(CPACK_IFW_DEVTOOL_EXECUTABLE) # ## Next code is included only once # if(NOT CPackIFW_CMake_INCLUDED) set(CPackIFW_CMake_INCLUDED 1) #============================================================================= # Framework version #============================================================================= set(CPACK_IFW_FRAMEWORK_VERSION_FORCED "" CACHE STRING "The forced version of used QtIFW tools") mark_as_advanced(CPACK_IFW_FRAMEWORK_VERSION_FORCED) set(CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT 1 CACHE STRING "The timeout to return QtIFW framework version string from \"installerbase\" executable") mark_as_advanced(CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT) if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND NOT CPACK_IFW_FRAMEWORK_VERSION_FORCED) set(CPACK_IFW_FRAMEWORK_VERSION) # Invoke version from "installerbase" executable foreach(_ifw_version_argument --framework-version --version) if(NOT CPACK_IFW_FRAMEWORK_VERSION) execute_process(COMMAND "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}" ${_ifw_version_argument} TIMEOUT ${CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT} RESULT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION_RESULT OUTPUT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE ENCODING UTF8) if(NOT CPACK_IFW_FRAMEWORK_VERSION_RESULT AND CPACK_IFW_FRAMEWORK_VERSION_OUTPUT) string(REGEX MATCH "[0-9]+(\\.[0-9]+)*" CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION_OUTPUT}") if(CPACK_IFW_FRAMEWORK_VERSION) if("${_ifw_version_argument}" STREQUAL "--framework-version") set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_FRAMEWORK_VERSION") elseif("${_ifw_version_argument}" STREQUAL "--version") set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_FRAMEWORK_VERSION") endif() endif() endif() endif() endforeach() # Finaly try to get version from executable path if(NOT CPACK_IFW_FRAMEWORK_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)*" CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}") if(CPACK_IFW_FRAMEWORK_VERSION) set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_PATH") endif() endif() elseif(CPACK_IFW_FRAMEWORK_VERSION_FORCED) set(CPACK_IFW_FRAMEWORK_VERSION ${CPACK_IFW_FRAMEWORK_VERSION_FORCED}) set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "FORCED") endif() if(CPACK_IFW_VERBOSE) if(CPACK_IFW_FRAMEWORK_VERSION AND CPACK_IFW_FRAMEWORK_VERSION_FORCED) message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} (forced) version") elseif(CPACK_IFW_FRAMEWORK_VERSION) message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} version") endif() endif() if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND NOT CPACK_IFW_FRAMEWORK_VERSION) message(WARNING "Could not detect QtIFW tools version. Set used version to variable \"CPACK_IFW_FRAMEWORK_VERSION_FORCED\" manualy.") endif() #============================================================================= # Macro definition #============================================================================= # Macro definition based on CPackComponent if(NOT CPackComponent_CMake_INCLUDED) include(CPackComponent) endif() # Resolve full filename for script file macro(_cpack_ifw_resolve_script _variable) set(_ifw_script_macro ${_variable}) set(_ifw_script_file ${${_ifw_script_macro}}) if(DEFINED ${_ifw_script_macro}) get_filename_component(${_ifw_script_macro} ${_ifw_script_file} ABSOLUTE) set(_ifw_script_file ${${_ifw_script_macro}}) if(NOT EXISTS ${_ifw_script_file}) message(WARNING "CPack IFW: script file \"${_ifw_script_file}\" is not exists") set(${_ifw_script_macro}) endif() endif() endmacro() # Resolve full path to lisense file macro(_cpack_ifw_resolve_lisenses _variable) if(${_variable}) set(_ifw_license_file FALSE) set(_ifw_licenses_fix) foreach(_ifw_licenses_arg ${${_variable}}) if(_ifw_license_file) get_filename_component(_ifw_licenses_arg "${_ifw_licenses_arg}" ABSOLUTE) set(_ifw_license_file FALSE) else() set(_ifw_license_file TRUE) endif() list(APPEND _ifw_licenses_fix "${_ifw_licenses_arg}") endforeach(_ifw_licenses_arg) set(${_variable} "${_ifw_licenses_fix}") endif() endmacro() # Resolve full path to a list of provided files macro(_cpack_ifw_resolve_file_list _variable) if(${_variable}) set(_ifw_list_fix) foreach(_ifw_file_arg ${${_variable}}) get_filename_component(_ifw_file_arg "${_ifw_file_arg}" ABSOLUTE) if(EXISTS ${_ifw_file_arg}) list(APPEND _ifw_list_fix "${_ifw_file_arg}") else() message(WARNING "CPack IFW: page file \"${_ifw_file_arg}\" does not exist. Skipping") endif() endforeach(_ifw_file_arg) set(${_variable} "${_ifw_list_fix}") endif() endmacro() # Macro for configure component macro(cpack_ifw_configure_component compname) string(TOUPPER ${compname} _CPACK_IFWCOMP_UNAME) set(_IFW_OPT COMMON ESSENTIAL VIRTUAL FORCED_INSTALLATION REQUIRES_ADMIN_RIGHTS) set(_IFW_ARGS NAME VERSION RELEASE_DATE SCRIPT PRIORITY SORTING_PRIORITY UPDATE_TEXT DEFAULT) set(_IFW_MULTI_ARGS DISPLAY_NAME DESCRIPTION DEPENDS DEPENDENCIES AUTO_DEPEND_ON LICENSES USER_INTERFACES TRANSLATIONS) cmake_parse_arguments(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN}) _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_SCRIPT) _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_LICENSES) _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_USER_INTERFACES) _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_TRANSLATIONS) set(_CPACK_IFWCOMP_STR "\n# Configuration for IFW component \"${compname}\"\n") foreach(_IFW_ARG_NAME ${_IFW_OPT}) cpack_append_option_set_command( CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWCOMP_STR) endforeach() foreach(_IFW_ARG_NAME ${_IFW_ARGS}) cpack_append_string_variable_set_command( CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWCOMP_STR) endforeach() foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS}) cpack_append_list_variable_set_command( CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWCOMP_STR) endforeach() if(CPack_CMake_INCLUDED) file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWCOMP_STR}") endif() endmacro() # Macro for configure group macro(cpack_ifw_configure_component_group grpname) string(TOUPPER ${grpname} _CPACK_IFWGRP_UNAME) set(_IFW_OPT VIRTUAL FORCED_INSTALLATION REQUIRES_ADMIN_RIGHTS) set(_IFW_ARGS NAME VERSION RELEASE_DATE SCRIPT PRIORITY SORTING_PRIORITY UPDATE_TEXT DEFAULT) set(_IFW_MULTI_ARGS DISPLAY_NAME DESCRIPTION DEPENDS DEPENDENCIES AUTO_DEPEND_ON LICENSES USER_INTERFACES TRANSLATIONS) cmake_parse_arguments(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN}) _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_SCRIPT) _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_LICENSES) _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_USER_INTERFACES) _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_TRANSLATIONS) set(_CPACK_IFWGRP_STR "\n# Configuration for IFW component group \"${grpname}\"\n") foreach(_IFW_ARG_NAME ${_IFW_ARGS}) cpack_append_string_variable_set_command( CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWGRP_STR) endforeach() foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS}) cpack_append_list_variable_set_command( CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWGRP_STR) endforeach() if(CPack_CMake_INCLUDED) file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWGRP_STR}") endif() endmacro() # Macro for adding repository macro(cpack_ifw_add_repository reponame) string(TOUPPER ${reponame} _CPACK_IFWREPO_UNAME) set(_IFW_OPT DISABLED) set(_IFW_ARGS URL USERNAME PASSWORD DISPLAY_NAME) set(_IFW_MULTI_ARGS) cmake_parse_arguments(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN}) set(_CPACK_IFWREPO_STR "\n# Configuration for IFW repository \"${reponame}\"\n") foreach(_IFW_ARG_NAME ${_IFW_OPT}) cpack_append_option_set_command( CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWREPO_STR) endforeach() foreach(_IFW_ARG_NAME ${_IFW_ARGS}) cpack_append_string_variable_set_command( CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWREPO_STR) endforeach() foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS}) cpack_append_variable_set_command( CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWREPO_STR) endforeach() list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame}) string(APPEND _CPACK_IFWREPO_STR "list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})\n") if(CPack_CMake_INCLUDED) file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWREPO_STR}") endif() endmacro() # Macro for updating repository macro(cpack_ifw_update_repository reponame) string(TOUPPER ${reponame} _CPACK_IFWREPO_UNAME) set(_IFW_OPT ADD REMOVE REPLACE DISABLED) set(_IFW_ARGS URL OLD_URL NEW_URL USERNAME PASSWORD DISPLAY_NAME) set(_IFW_MULTI_ARGS) cmake_parse_arguments(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN}) set(_CPACK_IFWREPO_STR "\n# Configuration for IFW repository \"${reponame}\" update\n") foreach(_IFW_ARG_NAME ${_IFW_OPT}) cpack_append_option_set_command( CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWREPO_STR) endforeach() foreach(_IFW_ARG_NAME ${_IFW_ARGS}) cpack_append_string_variable_set_command( CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWREPO_STR) endforeach() foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS}) cpack_append_variable_set_command( CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME} _CPACK_IFWREPO_STR) endforeach() if(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_ADD OR CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_REMOVE OR CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_REPLACE) list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame}) string(APPEND _CPACK_IFWREPO_STR "list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})\n") else() set(_CPACK_IFWREPO_STR) endif() if(CPack_CMake_INCLUDED AND _CPACK_IFWREPO_STR) file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWREPO_STR}") endif() endmacro() # Macro for adding resources macro(cpack_ifw_add_package_resources) set(_CPACK_IFW_PACKAGE_RESOURCES ${ARGV}) _cpack_ifw_resolve_file_list(_CPACK_IFW_PACKAGE_RESOURCES) list(APPEND CPACK_IFW_PACKAGE_RESOURCES ${_CPACK_IFW_PACKAGE_RESOURCES}) set(_CPACK_IFWQRC_STR "list(APPEND CPACK_IFW_PACKAGE_RESOURCES \"${_CPACK_IFW_PACKAGE_RESOURCES}\")\n") if(CPack_CMake_INCLUDED) file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWQRC_STR}") endif() endmacro() # Resolve package control script _cpack_ifw_resolve_script(CPACK_IFW_PACKAGE_CONTROL_SCRIPT) endif() # NOT CPackIFW_CMake_INCLUDED