CPackIFW.cmake 22.7 KB
Newer Older
1 2 3
# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.

4 5 6 7
#.rst:
# CPackIFW
# --------
#
8
# .. _QtIFW: http://doc.qt.io/qtinstallerframework/index.html
9
#
10 11
# This module looks for the location of the command line utilities supplied
# with the Qt Installer Framework (QtIFW_).
12 13 14 15 16 17 18 19
#
# The module also defines several commands to control the behavior of the
# CPack ``IFW`` generator.
#
#
# Overview
# ^^^^^^^^
#
20
# CPack ``IFW`` generator helps you to create online and offline
21 22
# binary cross-platform installers with a graphical user interface.
#
23
# CPack IFW generator prepares project installation and generates configuration
24 25 26 27 28 29
# 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.
#
30 31 32
# 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``.
33 34 35 36
#
# Variables
# ^^^^^^^^^
#
37 38
# You can use the following variables to change behavior of CPack ``IFW``
# generator.
39
#
40 41 42 43 44 45 46 47
# Debug
# """"""
#
# .. variable:: CPACK_IFW_VERBOSE
#
#  Set to ``ON`` to enable addition debug output.
#  By default is ``OFF``.
#
48 49 50 51 52 53
# Package
# """""""
#
# .. variable:: CPACK_IFW_PACKAGE_TITLE
#
#  Name of the installer as displayed on the title bar.
54
#  By default used :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`.
55 56 57 58
#
# .. variable:: CPACK_IFW_PACKAGE_PUBLISHER
#
#  Publisher of the software (as shown in the Windows Control Panel).
59
#  By default used :variable:`CPACK_PACKAGE_VENDOR`.
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
#
72 73
#  Filename for a custom window icon in PNG format for the Installer
#  application.
74 75 76
#
# .. variable:: CPACK_IFW_PACKAGE_LOGO
#
77
#  Filename for a logo is used as QWizard::LogoPixmap.
78
#
79 80 81 82 83 84
# .. 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`.
#
85 86 87
# .. variable:: CPACK_IFW_TARGET_DIRECTORY
#
#  Default target directory for installation.
88 89
#  By default used
#  "@ApplicationsDir@/:variable:`CPACK_PACKAGE_INSTALL_DIRECTORY`"
90 91 92 93 94 95 96 97 98
#
#  You can use predefined variables.
#
# .. variable:: CPACK_IFW_ADMIN_TARGET_DIRECTORY
#
#  Default target directory for installation with administrator rights.
#
#  You can use predefined variables.
#
99 100 101 102 103 104 105 106 107
# .. 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
#
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
# .. 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.
#
137 138 139 140 141 142 143 144
# .. 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.
#
145 146 147 148 149 150
# .. 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`
151
#  or updated with command :command:`cpack_ifw_update_repository`.
152 153 154 155 156
#
# .. variable:: CPACK_IFW_DOWNLOAD_ALL
#
#  If this is ``ON`` all components will be downloaded.
#  By default is ``OFF`` or used value
157
#  from ``CPACK_DOWNLOAD_ALL`` if set
158
#
159 160 161
# Components
# """"""""""
#
162 163 164 165 166 167 168 169 170
# .. 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.
#
171
# Tools
172
# """"""""
173
#
174 175 176 177
# .. variable:: CPACK_IFW_FRAMEWORK_VERSION
#
#  The version of used QtIFW_ tools.
#
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
# .. 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
#
Brad King's avatar
Brad King committed
197
#   Sets the arguments specific to the CPack IFW generator.
198
#
Brad King's avatar
Brad King committed
199
#   ::
200
#
Brad King's avatar
Brad King committed
201 202 203 204 205 206 207 208
#     cpack_ifw_configure_component(<compname> [COMMON] [ESSENTIAL]
#                         [NAME <name>]
#                         [VERSION <version>]
#                         [SCRIPT <script>]
#                         [PRIORITY <priority>]
#                         [DEPENDS <com_id> ...]
#                         [LICENSES <display_name> <file_path> ...]
#                         [USER_INTERFACES <file_path> <file_path> ...])
209
#
Brad King's avatar
Brad King committed
210
#   This command should be called after :command:`cpack_add_component` command.
211
#
Brad King's avatar
Brad King committed
212 213 214
#   ``COMMON``
#     if set, then the component will be packaged and installed as part
#     of a group to which it belongs.
215
#
Brad King's avatar
Brad King committed
216 217 218
#   ``ESSENTIAL``
#     if set, then the package manager stays disabled until that
#     component is updated.
219
#
Brad King's avatar
Brad King committed
220 221 222
#   ``NAME``
#     is used to create domain-like identification for this component.
#     By default used origin component name.
223
#
Brad King's avatar
Brad King committed
224 225 226
#   ``VERSION``
#     is version of component.
#     By default used :variable:`CPACK_PACKAGE_VERSION`.
227
#
Brad King's avatar
Brad King committed
228 229 230
#   ``SCRIPT``
#     is a relative or absolute path to operations script
#     for this component.
231
#
Brad King's avatar
Brad King committed
232 233
#   ``PRIORITY``
#     is priority of the component in the tree.
234
#
Brad King's avatar
Brad King committed
235 236
#   ``DEPENDS``
#     list of dependency component identifiers in QtIFW_ style.
237
#
Brad King's avatar
Brad King committed
238 239 240
#   ``LICENSES``
#     pair of <display_name> and <file_path> of license text for this
#     component. You can specify more then one license.
241
#
Brad King's avatar
Brad King committed
242 243
#   ``USER_INTERFACES``
#     a list of <file_path> representing pages to load
244
#
245 246 247
#
# .. command:: cpack_ifw_configure_component_group
#
Brad King's avatar
Brad King committed
248
#   Sets the arguments specific to the CPack IFW generator.
249
#
Brad King's avatar
Brad King committed
250
#   ::
251
#
Brad King's avatar
Brad King committed
252 253 254 255 256 257 258
#     cpack_ifw_configure_component_group(<groupname>
#                         [NAME <name>]
#                         [VERSION <version>]
#                         [SCRIPT <script>]
#                         [PRIORITY <priority>]
#                         [LICENSES <display_name> <file_path> ...]
#                         [USER_INTERFACES <file_path> <file_path> ...])
259
#
Brad King's avatar
Brad King committed
260 261
#   This command should be called after :command:`cpack_add_component_group`
#   command.
262
#
Brad King's avatar
Brad King committed
263 264 265
#   ``NAME``
#     is used to create domain-like identification for this component group.
#     By default used origin component group name.
266
#
Brad King's avatar
Brad King committed
267 268 269
#   ``VERSION``
#     is version of component group.
#     By default used :variable:`CPACK_PACKAGE_VERSION`.
270
#
Brad King's avatar
Brad King committed
271 272 273
#   ``SCRIPT``
#     is a relative or absolute path to operations script
#     for this component group.
274
#
Brad King's avatar
Brad King committed
275 276
#   ``PRIORITY``
#     is priority of the component group in the tree.
277
#
Brad King's avatar
Brad King committed
278 279 280
#   ``LICENSES``
#     pair of <display_name> and <file_path> of license text for this
#     component group. You can specify more then one license.
281
#
Brad King's avatar
Brad King committed
282 283
#   ``USER_INTERFACES``
#     a list of <file_path> representing pages to load
284
#
285 286 287
#
# .. command:: cpack_ifw_add_repository
#
Brad King's avatar
Brad King committed
288
#   Add QtIFW_ specific remote repository to binary installer.
289
#
Brad King's avatar
Brad King committed
290
#   ::
291
#
Brad King's avatar
Brad King committed
292 293 294 295 296
#     cpack_ifw_add_repository(<reponame> [DISABLED]
#                         URL <url>
#                         [USERNAME <username>]
#                         [PASSWORD <password>]
#                         [DISPLAY_NAME <display_name>])
297
#
Brad King's avatar
Brad King committed
298 299
#   This command will also add the <reponame> repository
#   to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`.
300
#
Brad King's avatar
Brad King committed
301 302
#   ``DISABLED``
#     if set, then the repository will be disabled by default.
303
#
Brad King's avatar
Brad King committed
304 305
#   ``URL``
#     is points to a list of available components.
306
#
Brad King's avatar
Brad King committed
307 308
#   ``USERNAME``
#     is used as user on a protected repository.
309
#
Brad King's avatar
Brad King committed
310 311
#   ``PASSWORD``
#     is password to use on a protected repository.
312
#
Brad King's avatar
Brad King committed
313 314
#   ``DISPLAY_NAME``
#     is string to display instead of the URL.
315 316 317 318
#
#
# .. command:: cpack_ifw_update_repository
#
Brad King's avatar
Brad King committed
319
#   Update QtIFW_ specific repository from remote repository.
320
#
Brad King's avatar
Brad King committed
321
#   ::
322
#
Brad King's avatar
Brad King committed
323 324 325 326 327 328
#     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>])
329
#
Brad King's avatar
Brad King committed
330 331
#   This command will also add the <reponame> repository
#   to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`.
332
#
Brad King's avatar
Brad King committed
333 334
#   ``URL``
#     is points to a list of available components.
335
#
Brad King's avatar
Brad King committed
336 337
#   ``OLD_URL``
#     is points to a list that will replaced.
338
#
Brad King's avatar
Brad King committed
339 340
#   ``NEW_URL``
#     is points to a list that will replace to.
341
#
Brad King's avatar
Brad King committed
342 343
#   ``USERNAME``
#     is used as user on a protected repository.
344
#
Brad King's avatar
Brad King committed
345 346
#   ``PASSWORD``
#     is password to use on a protected repository.
347
#
Brad King's avatar
Brad King committed
348 349
#   ``DISPLAY_NAME``
#     is string to display instead of the URL.
350
#
351 352 353 354 355 356 357 358 359 360 361 362 363
#
# .. 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`.
#
#
364 365 366 367 368 369 370
# Example usage
# ^^^^^^^^^^^^^
#
# .. code-block:: cmake
#
#    set(CPACK_PACKAGE_NAME "MyPackage")
#    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyPackage Installation Example")
371
#    set(CPACK_PACKAGE_VERSION "1.0.0") # Version of installer
372 373 374 375 376 377 378 379
#
#    include(CPack)
#    include(CPackIFW)
#
#    cpack_add_component(myapp
#        DISPLAY_NAME "MyApp"
#        DESCRIPTION "My Application")
#    cpack_ifw_configure_component(myapp
380
#        VERSION "1.2.3" # Version of component
381
#        SCRIPT "operations.qs")
382 383 384 385 386 387 388
#    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")
389 390 391 392 393
#
#
# Online installer
# ^^^^^^^^^^^^^^^^
#
394
# By default CPack IFW generator makes offline installer. This means that all
395 396 397 398 399 400 401 402
# 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.
#
403 404 405
# You also can use command :command:`cpack_ifw_add_repository` and
# variable :variable:`CPACK_IFW_DOWNLOAD_ALL` for more specific configuration.
#
406
# CPack IFW generator creates "repository" dir in current binary dir. You
407
# would copy content of this dir to specified ``site`` (``url``).
408 409 410 411 412 413
#
# See Also
# ^^^^^^^^
#
# Qt Installer Framework Manual:
#
Brad King's avatar
Brad King committed
414
# * Index page:
415
#   http://doc.qt.io/qtinstallerframework/index.html
416
#
Brad King's avatar
Brad King committed
417
# * Component Scripting:
418
#   http://doc.qt.io/qtinstallerframework/scripting.html
419
#
Brad King's avatar
Brad King committed
420
# * Predefined Variables:
421
#   http://doc.qt.io/qtinstallerframework/scripting.html#predefined-variables
422
#
Brad King's avatar
Brad King committed
423
# * Promoting Updates:
424 425
#   http://doc.qt.io/qtinstallerframework/ifw-updates.html
#
426 427
# Download Qt Installer Framework for you platform from Qt site:
#  http://download.qt.io/official_releases/qt-installer-framework
428 429 430 431 432 433 434 435
#

#=============================================================================
# Search Qt Installer Framework tools
#=============================================================================

# Default path

436 437 438 439 440
set(_CPACK_IFW_PATHS
  "${QTIFWDIR}"
  "$ENV{QTIFWDIR}"
  "${QTDIR}"
  "$ENV{QTIFWDIR}")
441
if(WIN32)
442 443 444
  list(APPEND _CPACK_IFW_PATHS
    "$ENV{HOMEDRIVE}/Qt"
    "C:/Qt")
445
else()
446 447 448
  list(APPEND _CPACK_IFW_PATHS
    "$ENV{HOME}/Qt"
    "/opt/Qt")
449 450 451
endif()

set(_CPACK_IFW_SUFFIXES
452
# Common
453
  "bin"
454 455 456 457
# Second branch
  "QtIFW2.3.0/bin"
  "QtIFW2.2.0/bin"
  "QtIFW2.1.0/bin"
458 459
  "QtIFW2.0.3/bin"
  "QtIFW2.0.1/bin"
460 461
  "QtIFW2.0.0/bin"
# First branch
462 463 464 465
  "QtIFW-1.6.0/bin"
  "QtIFW-1.5.0/bin"
  "QtIFW-1.4.0/bin"
  "QtIFW-1.3.0/bin")
466 467 468 469 470 471 472

# Look for 'binarycreator'

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

475
mark_as_advanced(CPACK_IFW_BINARYCREATOR_EXECUTABLE)
476 477 478 479 480 481 482 483 484 485 486

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

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

507 508 509 510 511 512 513
#
## Next code is included only once
#

if(NOT CPackIFW_CMake_INCLUDED)
set(CPackIFW_CMake_INCLUDED 1)

514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534
#=============================================================================
# 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()

535 536 537 538 539 540 541 542 543 544 545 546 547 548
#=============================================================================
# Macro definition
#=============================================================================

# Macro definition based on CPackComponent

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

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

549 550 551 552 553 554 555 556 557 558 559 560 561 562
# 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()

563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580
# 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()

581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596
# 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()

597 598 599 600 601
# Macro for configure component
macro(cpack_ifw_configure_component compname)

  string(TOUPPER ${compname} _CPACK_IFWCOMP_UNAME)

602
  set(_IFW_OPT COMMON ESSENTIAL)
603
  set(_IFW_ARGS NAME VERSION SCRIPT PRIORITY)
604
  set(_IFW_MULTI_ARGS DEPENDS LICENSES USER_INTERFACES)
605 606
  cmake_parse_arguments(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})

607
  _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_SCRIPT)
608
  _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_LICENSES)
609
  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_USER_INTERFACES)
610 611 612

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

613 614 615 616 617 618
  foreach(_IFW_ARG_NAME ${_IFW_OPT})
  cpack_append_option_set_command(
    CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME}
    _CPACK_IFWCOMP_STR)
  endforeach()

619 620 621 622 623 624 625
  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})
626
  cpack_append_list_variable_set_command(
627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642
    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)
643
  set(_IFW_ARGS NAME VERSION SCRIPT PRIORITY)
644
  set(_IFW_MULTI_ARGS LICENSES USER_INTERFACES)
645 646
  cmake_parse_arguments(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})

647
  _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_SCRIPT)
648
  _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_LICENSES)
649
  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_USER_INTERFACES)
650 651 652 653 654 655 656 657 658 659

  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})
660
  cpack_append_list_variable_set_command(
661 662 663 664 665 666 667 668 669
    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()

670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700
# 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})
701
  string(APPEND _CPACK_IFWREPO_STR "list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})\n")
702 703 704 705 706 707 708

  if(CPack_CMake_INCLUDED)
    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWREPO_STR}")
  endif()

endmacro()

709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742
# 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})
743
    string(APPEND _CPACK_IFWREPO_STR "list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})\n")
744 745 746 747 748 749 750 751 752 753
  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()

754 755 756 757 758 759 760 761 762 763 764
# 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()

765 766 767
# Resolve package control script
_cpack_ifw_resolve_script(CPACK_IFW_PACKAGE_CONTROL_SCRIPT)

768
endif() # NOT CPackIFW_CMake_INCLUDED