summaryrefslogtreecommitdiff
path: root/share/cmake-3.2/Help/manual/cmake-packages.7.rst
diff options
context:
space:
mode:
Diffstat (limited to 'share/cmake-3.2/Help/manual/cmake-packages.7.rst')
-rwxr-xr-xshare/cmake-3.2/Help/manual/cmake-packages.7.rst671
1 files changed, 0 insertions, 671 deletions
diff --git a/share/cmake-3.2/Help/manual/cmake-packages.7.rst b/share/cmake-3.2/Help/manual/cmake-packages.7.rst
deleted file mode 100755
index 3367ba4..0000000
--- a/share/cmake-3.2/Help/manual/cmake-packages.7.rst
+++ /dev/null
@@ -1,671 +0,0 @@
-.. cmake-manual-description: CMake Packages Reference
-
-cmake-packages(7)
-*****************
-
-.. only:: html
-
- .. contents::
-
-Introduction
-============
-
-Packages provide dependency information to CMake based buildsystems. Packages
-are found with the :command:`find_package` command. The result of
-using ``find_package`` is either a set of :prop_tgt:`IMPORTED` targets, or
-a set of variables corresponding to build-relevant information.
-
-Using Packages
-==============
-
-CMake provides direct support for two forms of packages,
-`Config-file Packages`_ and `Find-module Packages`_.
-Indirect support for ``pkg-config`` packages is also provided via
-the :module:`FindPkgConfig` module. In all cases, the basic form
-of :command:`find_package` calls is the same:
-
-.. code-block:: cmake
-
- find_package(Qt4 4.7.0 REQUIRED) # CMake provides a Qt4 find-module
- find_package(Qt5Core 5.1.0 REQUIRED) # Qt provides a Qt5 package config file.
- find_package(LibXml2 REQUIRED) # Use pkg-config via the LibXml2 find-module
-
-In cases where it is known that a package configuration file is provided by
-upstream, and only that should be used, the ``CONFIG`` keyword may be passed
-to :command:`find_package`:
-
-.. code-block:: cmake
-
- find_package(Qt5Core 5.1.0 CONFIG REQUIRED)
- find_package(Qt5Gui 5.1.0 CONFIG)
-
-Similarly, the ``MODULE`` keyword says to use only a find-module:
-
-.. code-block:: cmake
-
- find_package(Qt4 4.7.0 MODULE REQUIRED)
-
-Specifying the type of package explicitly improves the error message shown to
-the user if it is not found.
-
-Both types of packages also support specifying components of a package,
-either after the ``REQUIRED`` keyword:
-
-.. code-block:: cmake
-
- find_package(Qt5 5.1.0 CONFIG REQUIRED Widgets Xml Sql)
-
-or as a separate ``COMPONENTS`` list:
-
-.. code-block:: cmake
-
- find_package(Qt5 5.1.0 COMPONENTS Widgets Xml Sql)
-
-or as a separate ``OPTIONAL_COMPONENTS`` list:
-
-.. code-block:: cmake
-
- find_package(Qt5 5.1.0 COMPONENTS Widgets
- OPTIONAL_COMPONENTS Xml Sql
- )
-
-Handling of ``COMPONENTS`` and ``OPTIONAL_COMPONENTS`` is defined by the
-package.
-
-By setting the :variable:`CMAKE_DISABLE_FIND_PACKAGE_<PackageName>` variable to
-``TRUE``, the ``PackageName`` package will not be searched, and will always
-be ``NOTFOUND``.
-
-.. _`Config File Packages`:
-
-Config-file Packages
---------------------
-
-A config-file package is a set of files provided by upstreams for downstreams
-to use. CMake searches in a number of locations for package configuration files, as
-described in the :command:`find_package` documentation. The most simple way for
-a CMake user to tell :manual:`cmake(1)` to search in a non-standard prefix for
-a package is to set the ``CMAKE_PREFIX_PATH`` cache variable.
-
-Config-file packages are provided by upstream vendors as part of development
-packages, that is, they belong with the header files and any other files
-provided to assist downsteams in using the package.
-
-A set of variables which provide package status information are also set
-automatically when using a config-file package. The ``<Package>_FOUND``
-variable is set to true or false, depending on whether the package was
-found. The ``<Package>_DIR`` cache variable is set to the location of the
-package configuration file.
-
-Find-module Packages
---------------------
-
-A find module is a file with a set of rules for finding the required pieces of
-a dependency, primarily header files and libraries. Typically, a find module
-is needed when the upstream is not built with CMake, or is not CMake-aware
-enough to otherwise provide a package configuration file. Unlike a package configuration
-file, it is not shipped with upstream, but is used by downstream to find the
-files by guessing locations of files with platform-specific hints.
-
-Unlike the case of an upstream-provided package configuration file, no single point
-of reference identifies the package as being found, so the ``<Package>_FOUND``
-variable is not automatically set by the :command:`find_package` command. It
-can still be expected to be set by convention however and should be set by
-the author of the Find-module. Similarly there is no ``<Package>_DIR`` variable,
-but each of the artifacts such as library locations and header file locations
-provide a separate cache variable.
-
-See the :manual:`cmake-developer(7)` manual for more information about creating
-Find-module files.
-
-Package Layout
-==============
-
-A config-file package consists of a `Package Configuration File`_ and
-optionally a `Package Version File`_ provided with the project distribution.
-
-Package Configuration File
---------------------------
-
-Consider a project ``Foo`` that installs the following files::
-
- <prefix>/include/foo-1.2/foo.h
- <prefix>/lib/foo-1.2/libfoo.a
-
-It may also provide a CMake package configuration file::
-
- <prefix>/lib/cmake/foo-1.2/FooConfig.cmake
-
-with content defining :prop_tgt:`IMPORTED` targets, or defining variables, such
-as:
-
-.. code-block:: cmake
-
- # ...
- # (compute PREFIX relative to file location)
- # ...
- set(Foo_INCLUDE_DIRS ${PREFIX}/include/foo-1.2)
- set(Foo_LIBRARIES ${PREFIX}/lib/foo-1.2/libfoo.a)
-
-If another project wishes to use ``Foo`` it need only to locate the ``FooConfig.cmake``
-file and load it to get all the information it needs about package content
-locations. Since the package configuration file is provided by the package
-installation it already knows all the file locations.
-
-The :command:`find_package` command may be used to search for the package
-configuration file. This command constructs a set of installation prefixes
-and searches under each prefix in several locations. Given the name ``Foo``,
-it looks for a file called ``FooConfig.cmake`` or ``foo-config.cmake``.
-The full set of locations is specified in the :command:`find_package` command
-documentation. One place it looks is::
-
- <prefix>/lib/cmake/Foo*/
-
-where ``Foo*`` is a case-insensitive globbing expression. In our example the
-globbing expression will match ``<prefix>/lib/cmake/foo-1.2`` and the package
-configuration file will be found.
-
-Once found, a package configuration file is immediately loaded. It, together
-with a package version file, contains all the information the project needs to
-use the package.
-
-Package Version File
---------------------
-
-When the :command:`find_package` command finds a candidate package configuration
-file it looks next to it for a version file. The version file is loaded to test
-whether the package version is an acceptable match for the version requested.
-If the version file claims compatibility the configuration file is accepted.
-Otherwise it is ignored.
-
-The name of the package version file must match that of the package configuration
-file but has either ``-version`` or ``Version`` appended to the name before
-the ``.cmake`` extension. For example, the files::
-
- <prefix>/lib/cmake/foo-1.3/foo-config.cmake
- <prefix>/lib/cmake/foo-1.3/foo-config-version.cmake
-
-and::
-
- <prefix>/lib/cmake/bar-4.2/BarConfig.cmake
- <prefix>/lib/cmake/bar-4.2/BarConfigVersion.cmake
-
-are each pairs of package configuration files and corresponding package version
-files.
-
-When the :command:`find_package` command loads a version file it first sets the
-following variables:
-
-``PACKAGE_FIND_NAME``
- The <package> name
-
-``PACKAGE_FIND_VERSION``
- Full requested version string
-
-``PACKAGE_FIND_VERSION_MAJOR``
- Major version if requested, else 0
-
-``PACKAGE_FIND_VERSION_MINOR``
- Minor version if requested, else 0
-
-``PACKAGE_FIND_VERSION_PATCH``
- Patch version if requested, else 0
-
-``PACKAGE_FIND_VERSION_TWEAK``
- Tweak version if requested, else 0
-
-``PACKAGE_FIND_VERSION_COUNT``
- Number of version components, 0 to 4
-
-The version file must use these variables to check whether it is compatible or
-an exact match for the requested version and set the following variables with
-results:
-
-``PACKAGE_VERSION``
- Full provided version string
-
-``PACKAGE_VERSION_EXACT``
- True if version is exact match
-
-``PACKAGE_VERSION_COMPATIBLE``
- True if version is compatible
-
-``PACKAGE_VERSION_UNSUITABLE``
- True if unsuitable as any version
-
-Version files are loaded in a nested scope so they are free to set any variables
-they wish as part of their computation. The find_package command wipes out the
-scope when the version file has completed and it has checked the output
-variables. When the version file claims to be an acceptable match for the
-requested version the find_package command sets the following variables for
-use by the project:
-
-``<package>_VERSION``
- Full provided version string
-
-``<package>_VERSION_MAJOR``
- Major version if provided, else 0
-
-``<package>_VERSION_MINOR``
- Minor version if provided, else 0
-
-``<package>_VERSION_PATCH``
- Patch version if provided, else 0
-
-``<package>_VERSION_TWEAK``
- Tweak version if provided, else 0
-
-``<package>_VERSION_COUNT``
- Number of version components, 0 to 4
-
-The variables report the version of the package that was actually found.
-The ``<package>`` part of their name matches the argument given to the
-:command:`find_package` command.
-
-.. _`Creating Packages`:
-
-Creating Packages
-=================
-
-Usually, the upstream depends on CMake itself and can use some CMake facilities
-for creating the package files. Consider an upstream which provides a single
-shared library:
-
-.. code-block:: cmake
-
- project(UpstreamLib)
-
- set(CMAKE_INCLUDE_CURRENT_DIR ON)
- set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
-
- set(Upstream_VERSION 3.4.1)
-
- include(GenerateExportHeader)
-
- add_library(ClimbingStats SHARED climbingstats.cpp)
- generate_export_header(ClimbingStats)
- set_property(TARGET ClimbingStats PROPERTY VERSION ${Upstream_VERSION})
- set_property(TARGET ClimbingStats PROPERTY SOVERSION 3)
- set_property(TARGET ClimbingStats PROPERTY
- INTERFACE_ClimbingStats_MAJOR_VERSION 3)
- set_property(TARGET ClimbingStats APPEND PROPERTY
- COMPATIBLE_INTERFACE_STRING ClimbingStats_MAJOR_VERSION
- )
-
- install(TARGETS ClimbingStats EXPORT ClimbingStatsTargets
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib
- RUNTIME DESTINATION bin
- INCLUDES DESTINATION include
- )
- install(
- FILES
- climbingstats.h
- "${CMAKE_CURRENT_BINARY_DIR}/climbingstats_export.h"
- DESTINATION
- include
- COMPONENT
- Devel
- )
-
- include(CMakePackageConfigHelpers)
- write_basic_package_version_file(
- "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfigVersion.cmake"
- VERSION ${Upstream_VERSION}
- COMPATIBILITY AnyNewerVersion
- )
-
- export(EXPORT ClimbingStatsTargets
- FILE "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsTargets.cmake"
- NAMESPACE Upstream::
- )
- configure_file(cmake/ClimbingStatsConfig.cmake
- "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfig.cmake"
- COPYONLY
- )
-
- set(ConfigPackageLocation lib/cmake/ClimbingStats)
- install(EXPORT ClimbingStatsTargets
- FILE
- ClimbingStatsTargets.cmake
- NAMESPACE
- Upstream::
- DESTINATION
- ${ConfigPackageLocation}
- )
- install(
- FILES
- cmake/ClimbingStatsConfig.cmake
- "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfigVersion.cmake"
- DESTINATION
- ${ConfigPackageLocation}
- COMPONENT
- Devel
- )
-
-The :module:`CMakePackageConfigHelpers` module provides a macro for creating
-a simple ``ConfigVersion.cmake`` file. This file sets the version of the
-package. It is read by CMake when :command:`find_package` is called to
-determine the compatibility with the requested version, and to set some
-version-specific variables ``<Package>_VERSION``, ``<Package>_VERSION_MAJOR``,
-``<Package>_VERSION_MINOR`` etc. The :command:`install(EXPORT)` command is
-used to export the targets in the ``ClimbingStatsTargets`` export-set, defined
-previously by the :command:`install(TARGETS)` command. This command generates
-the ``ClimbingStatsTargets.cmake`` file to contain :prop_tgt:`IMPORTED`
-targets, suitable for use by downsteams and arranges to install it to
-``lib/cmake/ClimbingStats``. The generated ``ClimbingStatsConfigVersion.cmake``
-and a ``cmake/ClimbingStatsConfig.cmake`` are installed to the same location,
-completing the package.
-
-The generated :prop_tgt:`IMPORTED` targets have appropriate properties set
-to define their :ref:`usage requirements <Target Usage Requirements>`, such as
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
-:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` and other relevant built-in
-``INTERFACE_`` properties. The ``INTERFACE`` variant of user-defined
-properties listed in :prop_tgt:`COMPATIBLE_INTERFACE_STRING` and
-other :ref:`Compatible Interface Properties` are also propagated to the
-generated :prop_tgt:`IMPORTED` targets. In the above case,
-``ClimbingStats_MAJOR_VERSION`` is defined as a string which must be
-compatible among the dependencies of any depender. By setting this custom
-defined user property in this version and in the next version of
-``ClimbingStats``, :manual:`cmake(1)` will issue a diagnostic if there is an
-attempt to use version 3 together with version 4. Packages can choose to
-employ such a pattern if different major versions of the package are designed
-to be incompatible.
-
-Note that it is not advisable to populate any properties which may contain
-paths, such as :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` and
-:prop_tgt:`INTERFACE_LINK_LIBRARIES`, with paths relevnt to dependencies.
-That would hard-code into installed packages the include directory or library
-paths for dependencies **as found on the machine the package was made on**.
-
-That is, code like this is incorrect for targets which will be used to
-generate config file packages:
-
-.. code-block:: cmake
-
- target_link_libraries(ClimbingStats INTERFACE
- ${Boost_LIBRARIES};${OtherDep_LIBRARIES}>
- )
- target_include_directories(ClimbingStats INTERFACE
- $<INSTALL_INTERFACE:${Boost_INCLUDE_DIRS};${OtherDep_INCLUDE_DIRS}>
- )
-
-Dependencies must provide their own :ref:`IMPORTED targets <Imported Targets>`
-which have their own :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` and
-:prop_tgt:`IMPORTED_LOCATION` populated appropriately. Those
-:ref:`IMPORTED targets <Imported Targets>` may then be
-used with the :command:`target_link_libraries` command for ``ClimbingStats``.
-
-That way, when a consumer uses the installed package, the
-consumer will run the appropriate :command:`find_package` command (via the
-find_dependency macro described below) to find
-the dependencies on their own machine and populate the
-:ref:`IMPORTED targets <Imported Targets>` with appropriate paths. Note that
-many modules currently shipped with CMake do not currently provide
-:ref:`IMPORTED targets <Imported Targets>`.
-
-A ``NAMESPACE`` with double-colons is specified when exporting the targets
-for installation. This convention of double-colons gives CMake a hint that
-the name is an :prop_tgt:`IMPORTED` target when it is used by downstreams
-with the :command:`target_link_libraries` command. This way, CMake can
-issue a diagnostic if the package providing it has not yet been found.
-
-In this case, when using :command:`install(TARGETS)` the ``INCLUDES DESTINATION``
-was specified. This causes the ``IMPORTED`` targets to have their
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` populated with the ``include``
-directory in the :variable:`CMAKE_INSTALL_PREFIX`. When the ``IMPORTED``
-target is used by downsteam, it automatically consumes the entries from
-that property.
-
-In this case, the ``ClimbingStatsConfig.cmake`` file could be as simple as:
-
-.. code-block:: cmake
-
- include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
-
-As this allows downstreams to use the ``IMPORTED`` targets. If any macros
-should be provided by the ``ClimbingStats`` package, they should
-be in a separate file which is installed to the same location as the
-``ClimbingStatsConfig.cmake`` file, and included from there.
-
-Packages created by :command:`install(EXPORT)` are designed to be relocatable,
-using paths relative to the location of the package itself. When defining
-the interface of a target for ``EXPORT``, keep in mind that the include
-directories should be specified as relative paths which are relative to the
-:variable:`CMAKE_INSTALL_PREFIX`:
-
-.. code-block:: cmake
-
- target_include_directories(tgt INTERFACE
- # Wrong, not relocatable:
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/TgtName>
- )
-
- target_include_directories(tgt INTERFACE
- # Ok, relocatable:
- $<INSTALL_INTERFACE:include/TgtName>
- )
-
-The ``$<INSTALL_PREFIX>``
-:manual:`generator expression <cmake-generator-expressions(7)>` may be used as
-a placeholder for the install prefix without resulting in a non-relocatable
-package. This is necessary if complex generator expressions are used:
-
-.. code-block:: cmake
-
- target_include_directories(tgt INTERFACE
- # Ok, relocatable:
- $<INSTALL_INTERFACE:$<$<CONFIG:Debug>:$<INSTALL_PREFIX>/include/TgtName>>
- )
-
-The :command:`export(EXPORT)` command creates an :prop_tgt:`IMPORTED` targets
-definition file which is specific to the build-tree, and is not relocatable.
-This can similiarly be used with a suitable package configuration file and
-package version file to define a package for the build tree which may be used
-without installation. Consumers of the build tree can simply ensure that the
-:variable:`CMAKE_PREFIX_PATH` contains the build directory, or set the
-``ClimbingStats_DIR`` to ``<build_dir>/ClimbingStats`` in the cache.
-
-This can also be extended to cover dependencies:
-
-.. code-block:: cmake
-
- # ...
- add_library(ClimbingStats SHARED climbingstats.cpp)
- generate_export_header(ClimbingStats)
-
- find_package(Stats 2.6.4 REQUIRED)
- target_link_libraries(ClimbingStats PUBLIC Stats::Types)
-
-As the ``Stats::Types`` target is a ``PUBLIC`` dependency of ``ClimbingStats``,
-downsteams must also find the ``Stats`` package and link to the ``Stats::Types``
-library. The ``Stats`` package should be found in the ``ClimbingStatsConfig.cmake``
-file to ensure this. The ``find_dependency`` macro from the
-:module:`CMakeFindDependencyMacro` helps with this by propagating
-whether the package is ``REQUIRED``, or ``QUIET`` etc. All ``REQUIRED``
-dependencies of a package should be found in the ``Config.cmake`` file:
-
-.. code-block:: cmake
-
- include(CMakeFindDependencyMacro)
- find_dependency(Stats 2.6.4)
-
- include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
- include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsMacros.cmake")
-
-The ``find_dependency`` macro also sets ``ClimbingStats_FOUND`` to ``False`` if
-the dependency is not found, along with a diagnostic that the ``ClimbingStats``
-package can not be used without the ``Stats`` package.
-
-If ``COMPONENTS`` are specified when the downstream uses :command:`find_package`,
-they are listed in the ``<Package>_FIND_COMPONENTS`` variable. If a particular
-component is non-optional, then the ``<Package>_FIND_REQUIRED_<comp>`` will
-be true. This can be tested with logic in the package configuration file:
-
-.. code-block:: cmake
-
- include(CMakeFindDependencyMacro)
- find_dependency(Stats 2.6.4)
-
- include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
- include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsMacros.cmake")
-
- set(_supported_components Plot Table)
-
- foreach(_comp ${ClimbingStats_FIND_COMPONENTS})
- if (NOT ";${_supported_components};" MATCHES _comp)
- set(ClimbingStats_FOUND False)
- set(ClimbingStats_NOTFOUND_MESSAGE "Unsupported component: ${_comp}")
- endif()
- include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStats${_comp}Targets.cmake")
- endforeach()
-
-Here, the ``ClimbingStats_NOTFOUND_MESSAGE`` is set to a diagnosis that the package
-could not be found because an invalid component was specified. This message
-variable can be set for any case where the ``_FOUND`` variable is set to ``False``,
-and will be displayed to the user.
-
-.. _`Package Registry`:
-
-Package Registry
-================
-
-CMake provides two central locations to register packages that have
-been built or installed anywhere on a system:
-
-* `User Package Registry`_
-* `System Package Registry`_
-
-The registries are especially useful to help projects find packages in
-non-standard install locations or directly in their own build trees.
-A project may populate either the user or system registry (using its own
-means, see below) to refer to its location.
-In either case the package should store at the registered location a
-`Package Configuration File`_ (``<package>Config.cmake``) and optionally a
-`Package Version File`_ (``<package>ConfigVersion.cmake``).
-
-The :command:`find_package` command searches the two package registries
-as two of the search steps specified in its documentation. If it has
-sufficient permissions it also removes stale package registry entries
-that refer to directories that do not exist or do not contain a matching
-package configuration file.
-
-.. _`User Package Registry`:
-
-User Package Registry
----------------------
-
-The User Package Registry is stored in a per-user location.
-The :command:`export(PACKAGE)` command may be used to register a project
-build tree in the user package registry. CMake currently provides no
-interface to add install trees to the user package registry. Installers
-must be manually taught to register their packages if desired.
-
-On Windows the user package registry is stored in the Windows registry
-under a key in ``HKEY_CURRENT_USER``.
-
-A ``<package>`` may appear under registry key::
-
- HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\<package>
-
-as a ``REG_SZ`` value, with arbitrary name, that specifies the directory
-containing the package configuration file.
-
-On UNIX platforms the user package registry is stored in the user home
-directory under ``~/.cmake/packages``. A ``<package>`` may appear under
-the directory::
-
- ~/.cmake/packages/<package>
-
-as a file, with arbitrary name, whose content specifies the directory
-containing the package configuration file.
-
-.. _`System Package Registry`:
-
-System Package Registry
------------------------
-
-The System Package Registry is stored in a system-wide location.
-CMake currently provides no interface to add to the system package registry.
-Installers must be manually taught to register their packages if desired.
-
-On Windows the system package registry is stored in the Windows registry
-under a key in ``HKEY_LOCAL_MACHINE``. A ``<package>`` may appear under
-registry key::
-
- HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<package>
-
-as a ``REG_SZ`` value, with arbitrary name, that specifies the directory
-containing the package configuration file.
-
-There is no system package registry on non-Windows platforms.
-
-.. _`Disabling the Package Registry`:
-
-Disabling the Package Registry
-------------------------------
-
-In some cases using the Package Registries is not desirable. CMake
-allows to disable them using the following variables:
-
- * :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` disables the
- :command:`export(PACKAGE)` command.
- * :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` disables the
- User Package Registry in all the :command:`find_package` calls.
- * :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` disables
- the System Package Registry in all the :command:`find_package` calls.
-
-Package Registry Example
-------------------------
-
-A simple convention for naming package registry entries is to use content
-hashes. They are deterministic and unlikely to collide
-(:command:`export(PACKAGE)` uses this approach).
-The name of an entry referencing a specific directory is simply the content
-hash of the directory path itself.
-
-If a project arranges for package registry entries to exist, such as::
-
- > reg query HKCU\Software\Kitware\CMake\Packages\MyPackage
- HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\MyPackage
- 45e7d55f13b87179bb12f907c8de6fc4 REG_SZ c:/Users/Me/Work/lib/cmake/MyPackage
- 7b4a9844f681c80ce93190d4e3185db9 REG_SZ c:/Users/Me/Work/MyPackage-build
-
-or::
-
- $ cat ~/.cmake/packages/MyPackage/7d1fb77e07ce59a81bed093bbee945bd
- /home/me/work/lib/cmake/MyPackage
- $ cat ~/.cmake/packages/MyPackage/f92c1db873a1937f3100706657c63e07
- /home/me/work/MyPackage-build
-
-then the ``CMakeLists.txt`` code:
-
-.. code-block:: cmake
-
- find_package(MyPackage)
-
-will search the registered locations for package configuration files
-(``MyPackageConfig.cmake``). The search order among package registry
-entries for a single package is unspecified and the entry names
-(hashes in this example) have no meaning. Registered locations may
-contain package version files (``MyPackageConfigVersion.cmake``) to
-tell :command:`find_package` whether a specific location is suitable
-for the version requested.
-
-Package Registry Ownership
---------------------------
-
-Package registry entries are individually owned by the project installations
-that they reference. A package installer is responsible for adding its own
-entry and the corresponding uninstaller is responsible for removing it.
-
-The :command:`export(PACKAGE)` command populates the user package registry
-with the location of a project build tree. Build trees tend to be deleted by
-developers and have no "uninstall" event that could trigger removal of their
-entries. In order to keep the registries clean the :command:`find_package`
-command automatically removes stale entries it encounters if it has sufficient
-permissions. CMake provides no interface to remove an entry referencing an
-existing build tree once :command:`export(PACKAGE)` has been invoked.
-However, if the project removes its package configuration file from the build
-tree then the entry referencing the location will be considered stale.