#.rst: # CPackIFW # -------- # # .. _QtIFW: http://qt-project.org/doc/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. # If you don't use a default path for the installation, please set # the used path in the variable ``QTIFWDIR``. # # Variables # ^^^^^^^^^ # # You can use the following variables to change behavior of CPack ``IFW`` generator. # # 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_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_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` # # .. 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. # # Tools # """""""" # # .. variable:: CPACK_IFW_BINARYCREATOR_EXECUTABLE # # The path to "binarycreator" command line client. # # This variable is cached and can be configured user if need. # # .. variable:: CPACK_IFW_REPOGEN_EXECUTABLE # # The path to "repogen" command line client. # # This variable is cached and can be configured user if need. # # 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] # [NAME <name>] # [VERSION <version>] # [SCRIPT <script>] # [PRIORITY <priority>] # [DEPENDS <com_id> ...] # [LICENSES <display_name> <file_path> ...]) # # This command should be called after cpack_add_component command. # # ``COMMON`` if set, then the component will be packaged and installed as part # of a group to which it belongs. # # ``VERSION`` is version of component. # By default used :variable:`CPACK_PACKAGE_VERSION`. # # ``SCRIPT`` is a relative or absolute path to operations script # for this component. # # ``NAME`` is used to create domain-like identification for this component. # By default used origin component name. # # ``PRIORITY`` is priority of the component in the tree. # # ``DEPENDS`` list of dependency component identifiers in QtIFW_ style. # # ``LICENSES`` pair of <display_name> and <file_path> of license text for this # component. You can specify more then one license. # # -------------------------------------------------------------------------- # # .. command:: cpack_ifw_configure_component_group # # Sets the arguments specific to the CPack IFW generator. # # :: # # cpack_ifw_configure_component_group(<grpname> # [VERSION <version>] # [NAME <name>] # [SCRIPT <script>] # [PRIORITY <priority>] # [LICENSES <display_name> <file_path> ...]) # # This command should be called after cpack_add_component_group command. # # ``VERSION`` is version of component group. # By default used :variable:`CPACK_PACKAGE_VERSION`. # # ``NAME`` is used to create domain-like identification for this component group. # By default used origin component group name. # # ``SCRIPT`` is a relative or absolute path to operations script # for this component group. # # ``PRIORITY`` is priority of the component group in the tree. # # ``LICENSES`` pair of <display_name> and <file_path> of license text for this # component group. You can specify more then one license. # # -------------------------------------------------------------------------- # # .. command:: cpack_ifw_add_repository # # Add QtIFW_ specific remote repository. # # :: # # cpack_ifw_add_repository(<reponame> [DISABLED] # URL <url> # [USERNAME <username>] # [PASSWORD <password>] # [DISPLAY_NAME <display_name>]) # # This macro 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. # # 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") # cpack_ifw_configure_component(myapp # 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://qt-project.org/doc/qtinstallerframework/index.html # # Component Scripting # http://qt-project.org/doc/qtinstallerframework/scripting.html # # Predefined Variables # http://qt-project.org/doc/qtinstallerframework/scripting.html#predefined-variables # # Download Qt Installer Framework for you platform from Qt Project site: # http://download.qt-project.org/official_releases/qt-installer-framework/ # #============================================================================= # Copyright 2014 Kitware, Inc. # Copyright 2014 Konstantin Podsvirov <konstantin@podsvirov.pro> # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) #============================================================================= # Search Qt Installer Framework tools #============================================================================= # Default path set(_CPACK_IFW_PATHS "${QTIFWDIR}" "$ENV{QTIFWDIR}" "${QTDIR}" "$ENV{QTIFWDIR}") if(WIN32) list(APPEND _CPACK_IFW_PATHS "$ENV{HOMEDRIVE}/Qt" "C:/Qt") else() list(APPEND _CPACK_IFW_PATHS "$ENV{HOME}/Qt" "/opt/Qt") endif() set(_CPACK_IFW_SUFFIXES "bin" "QtIFW-1.7.0/bin" "QtIFW-1.6.0/bin" "QtIFW-1.5.0/bin" "QtIFW-1.4.0/bin" "QtIFW-1.3.0/bin") # 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) # ## Next code is included only once # if(NOT CPackIFW_CMake_INCLUDED) set(CPackIFW_CMake_INCLUDED 1) #============================================================================= # Macro definition #============================================================================= # Macro definition based on CPackComponent if(NOT CPackComponent_CMake_INCLUDED) include(CPackComponent) endif() if(NOT __CMAKE_PARSE_ARGUMENTS_INCLUDED) include(CMakeParseArguments) 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() # Macro for configure component macro(cpack_ifw_configure_component compname) string(TOUPPER ${compname} _CPACK_IFWCOMP_UNAME) set(_IFW_OPT COMMON) set(_IFW_ARGS VERSION SCRIPT NAME PRIORITY) set(_IFW_MULTI_ARGS DEPENDS LICENSES) 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) 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_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) set(_IFW_ARGS NAME VERSION SCRIPT PRIORITY) set(_IFW_MULTI_ARGS LICENSES) 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) 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_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}) set(_CPACK_IFWREPO_STR "${_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() endif() # NOT CPackIFW_CMake_INCLUDED