install: Implement new install(CODE|SCRIPT) option ALL_COMPONENTS

In a per-component installation the generated installation scripts
are invoked once for each component.

Per default custom installation script code added by install(CODE|SCRIPT)
only runs for one specific component in this context.

The new ALL_COMPONENTS option allows custom script code to be run once
for each component being installed.
This commit is contained in:
Nils Gladitz
2021-05-19 10:15:16 +02:00
parent 82fd8b6ba3
commit 99ff75455e
25 changed files with 133 additions and 20 deletions

View File

@@ -619,7 +619,7 @@ Custom Installation Logic
.. code-block:: cmake
install([[SCRIPT <file>] [CODE <code>]]
[COMPONENT <component>] [EXCLUDE_FROM_ALL] [...])
[COMPONENT <component>] [EXCLUDE_FROM_ALL] [ALL_COMPONENTS] [...])
The ``SCRIPT`` form will invoke the given CMake script files during
installation. If the script file name is a relative path it will be
@@ -634,6 +634,12 @@ example, the code
will print a message during installation.
The option ``ALL_COMPONENTS``
.. versionadded:: 3.21
Run the custom installation script code for every component of a
component-specific installation.
.. versionadded:: 3.14
``<file>`` or ``<code>`` may use "generator expressions" with the syntax
``$<...>`` (in the case of ``<file>``, this refers to their use in the file

View File

@@ -751,6 +751,11 @@ with members:
Optional member that is present with boolean value ``true`` when
:command:`install` is called with the ``EXCLUDE_FROM_ALL`` option.
``isForAllComponents``
Optional member that is present with boolean value ``true`` when
:command:`install(SCRIPT|CODE)` is called with the
``ALL_COMPONENTS`` option.
``isOptional``
Optional member that is present with boolean value ``true`` when
:command:`install` is called with the ``OPTIONAL`` option.

View File

@@ -0,0 +1,7 @@
install-script-all-components
-----------------------------
* The :command:`install(SCRIPT|CODE)` command
supports a new option ``ALL_COMPONENTS`` which allows
the corresponding code to run for every component of
a per component installation.