| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- CPack External Generator
- ------------------------
- .. versionadded:: 3.13
- CPack provides many generators to create packages for a variety of platforms
- and packaging systems. The intention is for CMake/CPack to be a complete
- end-to-end solution for building and packaging a software project. However, it
- may not always be possible to use CPack for the entire packaging process, due
- to either technical limitations or policies that require the use of certain
- tools. For this reason, CPack provides the "External" generator, which allows
- external packaging software to take advantage of some of the functionality
- provided by CPack, such as component installation and the dependency graph.
- Integration with External Packaging Tools
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The CPack External generator generates a ``.json`` file containing the
- CPack internal metadata, which gives external software information
- on how to package the software. External packaging software may itself
- invoke CPack, consume the generated metadata,
- install and package files as required.
- Alternatively CPack can invoke an external packaging software
- through an optional custom CMake script in
- :variable:`CPACK_EXTERNAL_PACKAGE_SCRIPT` instead.
- Staging of installation files may also optionally be
- taken care of by the generator when enabled through the
- :variable:`CPACK_EXTERNAL_ENABLE_STAGING` variable.
- JSON Format
- ^^^^^^^^^^^
- The JSON metadata file contains a list of CPack components and component groups,
- the various options passed to :command:`cpack_add_component` and
- :command:`cpack_add_component_group`, the dependencies between the components
- and component groups, and various other options passed to CPack.
- The JSON's root object will always provide two fields:
- ``formatVersionMajor`` and ``formatVersionMinor``, which are always integers
- that describe the output format of the generator. Backwards-compatible changes
- to the output format (for example, adding a new field that didn't exist before)
- cause the minor version to be incremented, and backwards-incompatible changes
- (for example, deleting a field or changing its meaning) cause the major version
- to be incremented and the minor version reset to 0. The format version is
- always of the format ``major.minor``. In other words, it always has exactly two
- parts, separated by a period.
- You can request one or more specific versions of the output format as described
- below with :variable:`CPACK_EXTERNAL_REQUESTED_VERSIONS`. The output format will
- have a major version that exactly matches the requested major version, and a
- minor version that is greater than or equal to the requested minor version. If
- no version is requested with :variable:`CPACK_EXTERNAL_REQUESTED_VERSIONS`, the
- latest known major version is used by default. Currently, the only supported
- format is 1.0, which is described below.
- Version 1.0
- ***********
- In addition to the standard format fields, format version 1.0 provides the
- following fields in the root:
- ``components``
- The ``components`` field is an object with component names as the keys and
- objects describing the components as the values. The component objects have
- the following fields:
- ``name``
- The name of the component. This is always the same as the key in the
- ``components`` object.
- ``displayName``
- The value of the ``DISPLAY_NAME`` field passed to
- :command:`cpack_add_component`.
- ``description``
- The value of the ``DESCRIPTION`` field passed to
- :command:`cpack_add_component`.
- ``isHidden``
- True if ``HIDDEN`` was passed to :command:`cpack_add_component`, false if
- it was not.
- ``isRequired``
- True if ``REQUIRED`` was passed to :command:`cpack_add_component`, false if
- it was not.
- ``isDisabledByDefault``
- True if ``DISABLED`` was passed to :command:`cpack_add_component`, false if
- it was not.
- ``group``
- Only present if ``GROUP`` was passed to :command:`cpack_add_component`. If
- so, this field is a string value containing the component's group.
- ``dependencies``
- An array of components the component depends on. This contains the values
- in the ``DEPENDS`` argument passed to :command:`cpack_add_component`. If no
- ``DEPENDS`` argument was passed, this is an empty list.
- ``installationTypes``
- An array of installation types the component is part of. This contains the
- values in the ``INSTALL_TYPES`` argument passed to
- :command:`cpack_add_component`. If no ``INSTALL_TYPES`` argument was
- passed, this is an empty list.
- ``isDownloaded``
- True if ``DOWNLOADED`` was passed to :command:`cpack_add_component`, false
- if it was not.
- ``archiveFile``
- The name of the archive file passed with the ``ARCHIVE_FILE`` argument to
- :command:`cpack_add_component`. If no ``ARCHIVE_FILE`` argument was passed,
- this is an empty string.
- ``componentGroups``
- The ``componentGroups`` field is an object with component group names as the
- keys and objects describing the component groups as the values. The component
- group objects have the following fields:
- ``name``
- The name of the component group. This is always the same as the key in the
- ``componentGroups`` object.
- ``displayName``
- The value of the ``DISPLAY_NAME`` field passed to
- :command:`cpack_add_component_group`.
- ``description``
- The value of the ``DESCRIPTION`` field passed to
- :command:`cpack_add_component_group`.
- ``parentGroup``
- Only present if ``PARENT_GROUP`` was passed to
- :command:`cpack_add_component_group`. If so, this field is a string value
- containing the component group's parent group.
- ``isExpandedByDefault``
- True if ``EXPANDED`` was passed to :command:`cpack_add_component_group`,
- false if it was not.
- ``isBold``
- True if ``BOLD_TITLE`` was passed to :command:`cpack_add_component_group`,
- false if it was not.
- ``components``
- An array of names of components that are direct members of the group
- (components that have this group as their ``GROUP``). Components of
- subgroups are not included.
- ``subgroups``
- An array of names of component groups that are subgroups of the group
- (groups that have this group as their ``PARENT_GROUP``).
- ``installationTypes``
- The ``installationTypes`` field is an object with installation type names as
- the keys and objects describing the installation types as the values. The
- installation type objects have the following fields:
- ``name``
- The name of the installation type. This is always the same as the key in
- the ``installationTypes`` object.
- ``displayName``
- The value of the ``DISPLAY_NAME`` field passed to
- :command:`cpack_add_install_type`.
- ``index``
- The integer index of the installation type in the list.
- ``projects``
- The ``projects`` field is an array of objects describing CMake projects which
- comprise the CPack project. The values in this field are derived from
- :variable:`CPACK_INSTALL_CMAKE_PROJECTS`. In most cases, this will be only a
- single project. The project objects have the following fields:
- ``projectName``
- The project name passed to :variable:`CPACK_INSTALL_CMAKE_PROJECTS`.
- ``component``
- The name of the component or component set which comprises the project.
- ``directory``
- The build directory of the CMake project. This is the directory which
- contains the ``cmake_install.cmake`` script.
- ``subDirectory``
- The subdirectory to install the project into inside the CPack package.
- ``packageName``
- The package name given in :variable:`CPACK_PACKAGE_NAME`. Only present if
- this option is set.
- ``packageVersion``
- The package version given in :variable:`CPACK_PACKAGE_VERSION`. Only present
- if this option is set.
- ``packageDescriptionFile``
- The package description file given in
- :variable:`CPACK_PACKAGE_DESCRIPTION_FILE`. Only present if this option is
- set.
- ``packageDescriptionSummary``
- The package description summary given in
- :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`. Only present if this option is
- set.
- ``buildConfig``
- The build configuration given to CPack with the :option:`cpack -C` option.
- Only present if this option is set.
- ``defaultDirectoryPermissions``
- The default directory permissions given in
- :variable:`CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`. Only present if this
- option is set.
- ``setDestdir``
- True if :variable:`CPACK_SET_DESTDIR` is true, false if it is not.
- ``packagingInstallPrefix``
- The install prefix given in :variable:`CPACK_PACKAGING_INSTALL_PREFIX`. Only
- present if :variable:`CPACK_SET_DESTDIR` is true.
- ``stripFiles``
- True if :variable:`CPACK_STRIP_FILES` is true, false if it is not.
- ``warnOnAbsoluteInstallDestination``
- True if :variable:`CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION` is true, false
- if it is not.
- ``errorOnAbsoluteInstallDestination``
- True if :variable:`CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION` is true,
- false if it is not.
- Variables specific to CPack External generator
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- .. variable:: CPACK_EXTERNAL_REQUESTED_VERSIONS
- This variable is used to request a specific version of the CPack External
- generator. It is a list of ``major.minor`` values, separated by semicolons.
- If this variable is set to a non-empty value, the CPack External generator
- will iterate through each item in the list to search for a version that it
- knows how to generate. Requested versions should be listed in order of
- descending preference by the client software, as the first matching version
- in the list will be generated.
- The generator knows how to generate the version if it has a versioned
- generator whose major version exactly matches the requested major version,
- and whose minor version is greater than or equal to the requested minor
- version. For example, if ``CPACK_EXTERNAL_REQUESTED_VERSIONS`` contains 1.0, and
- the CPack External generator knows how to generate 1.1, it will generate 1.1.
- If the generator doesn't know how to generate a version in the list, it skips
- the version and looks at the next one. If it doesn't know how to generate any
- of the requested versions, an error is thrown.
- If this variable is not set, or is empty, the CPack External generator will
- generate the highest major and minor version that it knows how to generate.
- If an invalid version is encountered in ``CPACK_EXTERNAL_REQUESTED_VERSIONS`` (one
- that doesn't match ``major.minor``, where ``major`` and ``minor`` are
- integers), it is ignored.
- .. variable:: CPACK_EXTERNAL_ENABLE_STAGING
- This variable can be set to true to enable optional installation
- into a temporary staging area which can then be picked up
- and packaged by an external packaging tool.
- The top level directory used by CPack for the current packaging
- task is contained in ``CPACK_TOPLEVEL_DIRECTORY``.
- It is automatically cleaned up on each run before packaging is initiated
- and can be used for custom temporary files required by
- the external packaging tool.
- It also contains the staging area ``CPACK_TEMPORARY_DIRECTORY``
- into which CPack performs the installation when staging is enabled.
- .. variable:: CPACK_EXTERNAL_PACKAGE_SCRIPT
- This variable can optionally specify the full path to
- a CMake script file to be run as part of the CPack invocation.
- It is invoked after (optional) staging took place and may
- run an external packaging tool. The script has access to
- the variables defined by the CPack config file.
- .. variable:: CPACK_EXTERNAL_BUILT_PACKAGES
- .. versionadded:: 3.19
- The ``CPACK_EXTERNAL_PACKAGE_SCRIPT`` script may set this list variable to the
- full paths of generated package files. CPack will copy these files from the
- staging directory back to the top build directory and possibly produce
- checksum files if the :variable:`CPACK_PACKAGE_CHECKSUM` is set.
|