CPack IFW Generator
-------------------

Overview
^^^^^^^^

This :manual:`cpack generator <cpack-generators(7)>` generates
configuration and meta information for the `Qt Installer Framework
<http://doc.qt.io/qtinstallerframework/index.html>`_ (QtIFW).

QtIFW provides tools and utilities to create installers for
the platforms supported by `Qt <https://www.qt.io>`_: Linux,
Microsoft Windows, and macOS.

To make use of this generator, QtIFW should also be installed.
The module :module:`CPackIFW` looks for the location of the
QtIFW command-line utilities.

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' (macOS),
 '.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_STYLE_SHEET

 Filename for a stylesheet.

.. 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_REMOVE_TARGET_DIR

 Set to ``OFF`` if the target directory should not be deleted when uninstalling.

 Is ``ON`` by default

.. 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.


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
