CPackIFW.cmake 18.3 KB
Newer Older
1 2 3 4
#.rst:
# CPackIFW
# --------
#
5
# .. _QtIFW: http://doc.qt.io/qtinstallerframework/index.html
6 7 8 9 10 11 12 13 14 15 16
#
# 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
# ^^^^^^^^
#
17
# CPack ``IFW`` generator helps you to create online and offline
18 19
# binary cross-platform installers with a graphical user interface.
#
20
# CPack IFW generator prepares project installation and generates configuration
21 22 23 24 25 26
# 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.
#
27 28 29
# 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``.
30 31 32 33
#
# Variables
# ^^^^^^^^^
#
34 35
# You can use the following variables to change behavior of CPack ``IFW`` generator.
#
36 37 38 39 40 41 42 43
# Debug
# """"""
#
# .. variable:: CPACK_IFW_VERBOSE
#
#  Set to ``ON`` to enable addition debug output.
#  By default is ``OFF``.
#
44 45 46 47 48 49
# Package
# """""""
#
# .. variable:: CPACK_IFW_PACKAGE_TITLE
#
#  Name of the installer as displayed on the title bar.
50
#  By default used :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`.
51 52 53 54
#
# .. variable:: CPACK_IFW_PACKAGE_PUBLISHER
#
#  Publisher of the software (as shown in the Windows Control Panel).
55
#  By default used :variable:`CPACK_PACKAGE_VENDOR`.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#
# .. 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
#
72
#  Filename for a logo is used as QWizard::LogoPixmap.
73
#
74 75 76 77 78 79
# .. 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`.
#
80 81 82 83 84 85 86 87 88 89 90 91 92
# .. 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.
#
93 94 95 96 97 98 99 100 101
# .. 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
#
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
# .. 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.
#
131 132 133 134 135 136 137 138 139 140 141
# .. 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
142
#  from ``CPACK_DOWNLOAD_ALL`` if set
143
#
144 145 146
# Components
# """"""""""
#
147 148 149 150 151 152 153 154 155
# .. 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.
#
156
# Tools
157
# """"""""
158
#
159 160 161 162
# .. variable:: CPACK_IFW_FRAMEWORK_VERSION
#
#  The version of used QtIFW_ tools.
#
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
# .. 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.
#
# ::
#
188 189
#   cpack_ifw_configure_component(<compname> [COMMON]
#                       [NAME <name>]
190 191 192
#                       [VERSION <version>]
#                       [SCRIPT <script>]
#                       [PRIORITY <priority>]
193
#                       [DEPENDS <com_id> ...]
194 195 196 197
#                       [LICENSES <display_name> <file_path> ...])
#
# This command should be called after cpack_add_component command.
#
198
# ``COMMON`` if set, then the component will be packaged and installed as part
199
# of a group to which it belongs.
200 201 202
#
# ``VERSION`` is version of component.
# By default used :variable:`CPACK_PACKAGE_VERSION`.
203
#
204
# ``SCRIPT`` is a relative or absolute path to operations script
205 206 207 208 209 210 211
# 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.
#
212 213
# ``DEPENDS`` list of dependency component identifiers in QtIFW_ style.
#
214 215 216 217 218 219 220 221 222 223 224 225 226 227
# ``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>]
228
#                       [SCRIPT <script>]
229 230 231 232 233
#                       [PRIORITY <priority>]
#                       [LICENSES <display_name> <file_path> ...])
#
# This command should be called after cpack_add_component_group command.
#
234 235
# ``VERSION`` is version of component group.
# By default used :variable:`CPACK_PACKAGE_VERSION`.
236 237 238 239
#
# ``NAME`` is used to create domain-like identification for this component group.
# By default used origin component group name.
#
240
# ``SCRIPT`` is a relative or absolute path to operations script
241 242
# for this component group.
#
243 244 245 246 247
# ``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.
#
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
# --------------------------------------------------------------------------
#
# .. 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.
#
275 276 277 278 279 280 281
# Example usage
# ^^^^^^^^^^^^^
#
# .. code-block:: cmake
#
#    set(CPACK_PACKAGE_NAME "MyPackage")
#    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyPackage Installation Example")
282
#    set(CPACK_PACKAGE_VERSION "1.0.0") # Version of installer
283 284 285 286 287 288 289 290
#
#    include(CPack)
#    include(CPackIFW)
#
#    cpack_add_component(myapp
#        DISPLAY_NAME "MyApp"
#        DESCRIPTION "My Application")
#    cpack_ifw_configure_component(myapp
291
#        VERSION "1.2.3" # Version of component
292
#        SCRIPT "operations.qs")
293 294 295 296 297 298 299
#    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")
300 301 302 303 304
#
#
# Online installer
# ^^^^^^^^^^^^^^^^
#
305
# By default CPack IFW generator makes offline installer. This means that all
306 307 308 309 310 311 312 313
# 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.
#
314 315 316
# You also can use command :command:`cpack_ifw_add_repository` and
# variable :variable:`CPACK_IFW_DOWNLOAD_ALL` for more specific configuration.
#
317
# CPack IFW generator creates "repository" dir in current binary dir. You
318
# would copy content of this dir to specified ``site`` (``url``).
319 320 321 322 323 324 325
#
# See Also
# ^^^^^^^^
#
# Qt Installer Framework Manual:
#
#  Index page
326
#   http://doc.qt.io/qtinstallerframework/index.html
327 328
#
#  Component Scripting
329
#   http://doc.qt.io/qtinstallerframework/scripting.html
330 331
#
#  Predefined Variables
332
#   http://doc.qt.io/qtinstallerframework/scripting.html#predefined-variables
333
#
334 335
# Download Qt Installer Framework for you platform from Qt site:
#  http://download.qt.io/official_releases/qt-installer-framework
336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
#

#=============================================================================
# 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

358 359 360 361 362
set(_CPACK_IFW_PATHS
  "${QTIFWDIR}"
  "$ENV{QTIFWDIR}"
  "${QTDIR}"
  "$ENV{QTIFWDIR}")
363
if(WIN32)
364 365 366
  list(APPEND _CPACK_IFW_PATHS
    "$ENV{HOMEDRIVE}/Qt"
    "C:/Qt")
367
else()
368 369 370
  list(APPEND _CPACK_IFW_PATHS
    "$ENV{HOME}/Qt"
    "/opt/Qt")
371 372 373
endif()

set(_CPACK_IFW_SUFFIXES
374
# Common
375
  "bin"
376 377 378 379 380 381
# Second branch
  "QtIFW2.3.0/bin"
  "QtIFW2.2.0/bin"
  "QtIFW2.1.0/bin"
  "QtIFW2.0.0/bin"
# First branch
382 383 384 385
  "QtIFW-1.6.0/bin"
  "QtIFW-1.5.0/bin"
  "QtIFW-1.4.0/bin"
  "QtIFW-1.3.0/bin")
386 387 388 389 390 391 392

# Look for 'binarycreator'

find_program(CPACK_IFW_BINARYCREATOR_EXECUTABLE
  NAMES binarycreator
  PATHS ${_CPACK_IFW_PATHS}
  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
393
  DOC "QtIFW binarycreator command line client")
394

395
mark_as_advanced(CPACK_IFW_BINARYCREATOR_EXECUTABLE)
396 397 398 399 400 401 402 403 404 405 406

# 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)

407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
# 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)

427 428 429 430 431 432 433
#
## Next code is included only once
#

if(NOT CPackIFW_CMake_INCLUDED)
set(CPackIFW_CMake_INCLUDED 1)

434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454
#=============================================================================
# Framework version
#=============================================================================

if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND CPACK_IFW_DEVTOOL_EXECUTABLE)
  execute_process(COMMAND
    "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}" --framework-version
    OUTPUT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION)
  if(CPACK_IFW_FRAMEWORK_VERSION)
    string(REPLACE " " ""
      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION}")
    string(REPLACE "\t" ""
      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION}")
    string(REPLACE "\n" ""
      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION}")
    if(CPACK_IFW_VERBOSE)
      message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} version")
    endif()
  endif()
endif()

455 456 457 458 459 460 461 462 463 464 465 466 467 468
#=============================================================================
# Macro definition
#=============================================================================

# Macro definition based on CPackComponent

if(NOT CPackComponent_CMake_INCLUDED)
    include(CPackComponent)
endif()

if(NOT __CMAKE_PARSE_ARGUMENTS_INCLUDED)
    include(CMakeParseArguments)
endif()

469 470 471 472 473 474 475 476 477 478 479 480 481 482
# 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()

483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505
# 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)

506
  set(_IFW_OPT COMMON)
507 508 509 510
  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})

511
  _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_SCRIPT)
512 513 514 515
  _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_LICENSES)

  set(_CPACK_IFWCOMP_STR "\n# Configuration for IFW component \"${compname}\"\n")

516 517 518 519 520 521
  foreach(_IFW_ARG_NAME ${_IFW_OPT})
  cpack_append_option_set_command(
    CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME}
    _CPACK_IFWCOMP_STR)
  endforeach()

522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545
  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)
546
  set(_IFW_ARGS NAME VERSION SCRIPT PRIORITY)
547 548 549
  set(_IFW_MULTI_ARGS LICENSES)
  cmake_parse_arguments(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})

550
  _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_SCRIPT)
551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571
  _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()

572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610
# 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()

611 612 613
# Resolve package control script
_cpack_ifw_resolve_script(CPACK_IFW_PACKAGE_CONTROL_SCRIPT)

614
endif() # NOT CPackIFW_CMake_INCLUDED