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

See :module:`CPackIFW` for details on the CPackIFW module.

.. _QtIFW: http://doc.qt.io/qtinstallerframework/index.html


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

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' (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
