Merge topic 'document-cps-components-resolution'
dd8bf95271
Help: Document handling of CPS transitive components
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !10434
This commit is contained in:
commit
f65fcde174
@ -956,3 +956,37 @@ requirements are not satisfied.
|
||||
|
||||
.. _cps-version_schema: https://cps-org.github.io/cps/schema.html#version-schema
|
||||
.. |cps-version_schema| replace:: ``version_schema``
|
||||
|
||||
CPS Transitive Requirements
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
A |CPS| package description consists of one or more components which may in
|
||||
turn depend on other components either internal or external to the package.
|
||||
When external components are required, the providing package is noted as
|
||||
a package-level requirement of the package. Additionally, the set of required
|
||||
components is typically noted in said external package requirement.
|
||||
|
||||
Where a CMake-script package description would use the
|
||||
:command:`find_dependency` command to handle transitive dependencies, CMake
|
||||
handles transitive dependencies for CPS itself using an internally nested
|
||||
``find_package`` call. This call can resolve CPS package dependencies via
|
||||
*either* another CPS package, or via a CMake-script package. The manner in
|
||||
which the CPS component dependencies are handled is subject to some caveats.
|
||||
|
||||
When the candidate for resolving a transitive dependency is another CPS
|
||||
package, things are simple; ``COMPONENTS`` and CPS "components" are directly
|
||||
comparable (and are effectively synonymous with CMake "imported targets").
|
||||
CMake-script packages, however, are encouraged to (and often do) check that
|
||||
required components were found, whether or not the package describes separate
|
||||
components. Additionally, even those that do describe components typically do
|
||||
not have the same correlation to imported targets that is normal for CPS. As
|
||||
a result, passing the set of required components declared by a CPS package to
|
||||
``COMPONENTS`` would result in spurious failures to resolve dependencies.
|
||||
|
||||
To address this, if a candidate for resolving a CPS transitive dependency is a
|
||||
CMake-script package, CMake passes the required components as declared by the
|
||||
consuming CPS package as ``OPTIONAL_COMPONENTS`` and performs a separate,
|
||||
internal check that the candidate package supplied the required imported
|
||||
targets. Those targets must be named ``<PackageName>::<ComponentName>``, in
|
||||
conformance with CPS convention, or the check will consider the package not
|
||||
found.
|
||||
|
Loading…
Reference in New Issue
Block a user