find_*: Add docs for PackageRoot search path group

This commit is contained in:
Chuck Atkins
2017-05-03 13:57:02 -04:00
parent 57744ca9c0
commit fe8f08d268
7 changed files with 58 additions and 16 deletions

View File

@@ -16,8 +16,9 @@ The general signature is:
[PATH_SUFFIXES suffix1 [suffix2 ...]] [PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"] [DOC "cache documentation string"]
[NO_DEFAULT_PATH] [NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH] [NO_PACKAGE_ROOT_PATH]
[NO_CMAKE_PATH] [NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH] [NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH] [NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH | [CMAKE_FIND_ROOT_PATH_BOTH |
@@ -60,6 +61,10 @@ If ``NO_DEFAULT_PATH`` is specified, then no additional paths are
added to the search. added to the search.
If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows: If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR| replace::
|prefix_XXX_SUBDIR| for each ``<prefix>`` in ``PackageName_ROOT`` if called
from within a find module
.. |CMAKE_PREFIX_PATH_XXX_SUBDIR| replace:: .. |CMAKE_PREFIX_PATH_XXX_SUBDIR| replace::
|prefix_XXX_SUBDIR| for each ``<prefix>`` in :variable:`CMAKE_PREFIX_PATH` |prefix_XXX_SUBDIR| for each ``<prefix>`` in :variable:`CMAKE_PREFIX_PATH`
@@ -71,7 +76,18 @@ If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
|prefix_XXX_SUBDIR| for each ``<prefix>`` in |prefix_XXX_SUBDIR| for each ``<prefix>`` in
:variable:`CMAKE_SYSTEM_PREFIX_PATH` :variable:`CMAKE_SYSTEM_PREFIX_PATH`
1. Search paths specified in cmake-specific cache variables. 1. If called from within a find module, search prefix paths unique to the
current package being found. Specifically look in the ``PackageName_ROOT``
CMake and environment variables. The package root variables are maintained
as a stack so if called from nested find modules, root paths from the
parent's find module will be searchd after paths from the current module,
i.e. ``CurrentPackage_ROOT``, ``ENV{CurrentPackage_ROOT}``,
``ParentPackage_ROOT``, ``ENV{ParentPacakge_ROOT}``, etc.
This can be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed.
* |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX|
2. Search paths specified in cmake-specific cache variables.
These are intended to be used on the command line with a ``-DVAR=value``. These are intended to be used on the command line with a ``-DVAR=value``.
The values are interpreted as :ref:`;-lists <CMake Language Lists>`. The values are interpreted as :ref:`;-lists <CMake Language Lists>`.
This can be skipped if ``NO_CMAKE_PATH`` is passed. This can be skipped if ``NO_CMAKE_PATH`` is passed.
@@ -80,7 +96,7 @@ If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
* |CMAKE_XXX_PATH| * |CMAKE_XXX_PATH|
* |CMAKE_XXX_MAC_PATH| * |CMAKE_XXX_MAC_PATH|
2. Search paths specified in cmake-specific environment variables. 3. Search paths specified in cmake-specific environment variables.
These are intended to be set in the user's shell configuration, These are intended to be set in the user's shell configuration,
and therefore use the host's native path separator and therefore use the host's native path separator
(``;`` on Windows and ``:`` on UNIX). (``;`` on Windows and ``:`` on UNIX).
@@ -90,17 +106,17 @@ If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
* |CMAKE_XXX_PATH| * |CMAKE_XXX_PATH|
* |CMAKE_XXX_MAC_PATH| * |CMAKE_XXX_MAC_PATH|
3. Search the paths specified by the ``HINTS`` option. 4. Search the paths specified by the ``HINTS`` option.
These should be paths computed by system introspection, such as a These should be paths computed by system introspection, such as a
hint provided by the location of another item already found. hint provided by the location of another item already found.
Hard-coded guesses should be specified with the ``PATHS`` option. Hard-coded guesses should be specified with the ``PATHS`` option.
4. Search the standard system environment variables. 5. Search the standard system environment variables.
This can be skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is an argument. This can be skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is an argument.
* |SYSTEM_ENVIRONMENT_PATH_XXX| * |SYSTEM_ENVIRONMENT_PATH_XXX|
5. Search cmake variables defined in the Platform files 6. Search cmake variables defined in the Platform files
for the current system. This can be skipped if ``NO_CMAKE_SYSTEM_PATH`` for the current system. This can be skipped if ``NO_CMAKE_SYSTEM_PATH``
is passed. is passed.
@@ -108,7 +124,7 @@ If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
* |CMAKE_SYSTEM_XXX_PATH| * |CMAKE_SYSTEM_XXX_PATH|
* |CMAKE_SYSTEM_XXX_MAC_PATH| * |CMAKE_SYSTEM_XXX_MAC_PATH|
6. Search the paths specified by the PATHS option 7. Search the paths specified by the PATHS option
or in the short-hand version of the command. or in the short-hand version of the command.
These are typically hard-coded guesses. These are typically hard-coded guesses.

View File

@@ -8,6 +8,9 @@ find_file
.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/include`` .. |prefix_XXX_SUBDIR| replace:: ``<prefix>/include``
.. |entry_XXX_SUBDIR| replace:: ``<entry>/include`` .. |entry_XXX_SUBDIR| replace:: ``<entry>/include``
.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
is set, and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
.. |CMAKE_PREFIX_PATH_XXX| replace:: .. |CMAKE_PREFIX_PATH_XXX| replace::
``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
is set, and |CMAKE_PREFIX_PATH_XXX_SUBDIR| is set, and |CMAKE_PREFIX_PATH_XXX_SUBDIR|

View File

@@ -8,6 +8,9 @@ find_library
.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/lib`` .. |prefix_XXX_SUBDIR| replace:: ``<prefix>/lib``
.. |entry_XXX_SUBDIR| replace:: ``<entry>/lib`` .. |entry_XXX_SUBDIR| replace:: ``<entry>/lib``
.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
.. |CMAKE_PREFIX_PATH_XXX| replace:: .. |CMAKE_PREFIX_PATH_XXX| replace::
``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set, ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
and |CMAKE_PREFIX_PATH_XXX_SUBDIR| and |CMAKE_PREFIX_PATH_XXX_SUBDIR|

View File

@@ -64,8 +64,9 @@ The complete Config mode command signature is::
[PATHS path1 [path2 ... ]] [PATHS path1 [path2 ... ]]
[PATH_SUFFIXES suffix1 [suffix2 ...]] [PATH_SUFFIXES suffix1 [suffix2 ...]]
[NO_DEFAULT_PATH] [NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH] [NO_PACAKGE_ROOT_PATH]
[NO_CMAKE_PATH] [NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH] [NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_PACKAGE_REGISTRY] [NO_CMAKE_PACKAGE_REGISTRY]
[NO_CMAKE_BUILDS_PATH] # Deprecated; does nothing. [NO_CMAKE_BUILDS_PATH] # Deprecated; does nothing.
@@ -249,7 +250,13 @@ The set of installation prefixes is constructed using the following
steps. If ``NO_DEFAULT_PATH`` is specified all ``NO_*`` options are steps. If ``NO_DEFAULT_PATH`` is specified all ``NO_*`` options are
enabled. enabled.
1. Search paths specified in cmake-specific cache variables. These 1. Search paths specified in the ``PackageName_ROOT`` CMake and environment
variables. The package root variables are maintained as a stack so if
called from within a find module, root paths from the parent's find
module will also be searched after paths for the current package. This can
be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed.
2. Search paths specified in cmake-specific cache variables. These
are intended to be used on the command line with a ``-DVAR=value``. are intended to be used on the command line with a ``-DVAR=value``.
The values are interpreted as :ref:`;-lists <CMake Language Lists>`. The values are interpreted as :ref:`;-lists <CMake Language Lists>`.
This can be skipped if ``NO_CMAKE_PATH`` is passed:: This can be skipped if ``NO_CMAKE_PATH`` is passed::
@@ -258,7 +265,7 @@ enabled.
CMAKE_FRAMEWORK_PATH CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH CMAKE_APPBUNDLE_PATH
2. Search paths specified in cmake-specific environment variables. 3. Search paths specified in cmake-specific environment variables.
These are intended to be set in the user's shell configuration, These are intended to be set in the user's shell configuration,
and therefore use the host's native path separator and therefore use the host's native path separator
(``;`` on Windows and ``:`` on UNIX). (``;`` on Windows and ``:`` on UNIX).
@@ -269,26 +276,26 @@ enabled.
CMAKE_FRAMEWORK_PATH CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH CMAKE_APPBUNDLE_PATH
3. Search paths specified by the ``HINTS`` option. These should be paths 4. Search paths specified by the ``HINTS`` option. These should be paths
computed by system introspection, such as a hint provided by the computed by system introspection, such as a hint provided by the
location of another item already found. Hard-coded guesses should location of another item already found. Hard-coded guesses should
be specified with the ``PATHS`` option. be specified with the ``PATHS`` option.
4. Search the standard system environment variables. This can be 5. Search the standard system environment variables. This can be
skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is passed. Path entries skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is passed. Path entries
ending in ``/bin`` or ``/sbin`` are automatically converted to their ending in ``/bin`` or ``/sbin`` are automatically converted to their
parent directories:: parent directories::
PATH PATH
5. Search paths stored in the CMake :ref:`User Package Registry`. 6. Search paths stored in the CMake :ref:`User Package Registry`.
This can be skipped if ``NO_CMAKE_PACKAGE_REGISTRY`` is passed or by This can be skipped if ``NO_CMAKE_PACKAGE_REGISTRY`` is passed or by
setting the :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` setting the :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`
to ``TRUE``. to ``TRUE``.
See the :manual:`cmake-packages(7)` manual for details on the user See the :manual:`cmake-packages(7)` manual for details on the user
package registry. package registry.
6. Search cmake variables defined in the Platform files for the 7. Search cmake variables defined in the Platform files for the
current system. This can be skipped if ``NO_CMAKE_SYSTEM_PATH`` is current system. This can be skipped if ``NO_CMAKE_SYSTEM_PATH`` is
passed:: passed::
@@ -296,14 +303,14 @@ enabled.
CMAKE_SYSTEM_FRAMEWORK_PATH CMAKE_SYSTEM_FRAMEWORK_PATH
CMAKE_SYSTEM_APPBUNDLE_PATH CMAKE_SYSTEM_APPBUNDLE_PATH
7. Search paths stored in the CMake :ref:`System Package Registry`. 8. Search paths stored in the CMake :ref:`System Package Registry`.
This can be skipped if ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` is passed This can be skipped if ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` is passed
or by setting the or by setting the
:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` to ``TRUE``. :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` to ``TRUE``.
See the :manual:`cmake-packages(7)` manual for details on the system See the :manual:`cmake-packages(7)` manual for details on the system
package registry. package registry.
8. Search paths specified by the ``PATHS`` option. These are typically 9. Search paths specified by the ``PATHS`` option. These are typically
hard-coded guesses. hard-coded guesses.
.. |FIND_XXX| replace:: find_package .. |FIND_XXX| replace:: find_package

View File

@@ -8,6 +8,9 @@ find_path
.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/include`` .. |prefix_XXX_SUBDIR| replace:: ``<prefix>/include``
.. |entry_XXX_SUBDIR| replace:: ``<entry>/include`` .. |entry_XXX_SUBDIR| replace:: ``<entry>/include``
.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
is set, and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
.. |CMAKE_PREFIX_PATH_XXX| replace:: .. |CMAKE_PREFIX_PATH_XXX| replace::
``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
is set, and |CMAKE_PREFIX_PATH_XXX_SUBDIR| is set, and |CMAKE_PREFIX_PATH_XXX_SUBDIR|

View File

@@ -8,6 +8,8 @@ find_program
.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/[s]bin`` .. |prefix_XXX_SUBDIR| replace:: ``<prefix>/[s]bin``
.. |entry_XXX_SUBDIR| replace:: ``<entry>/[s]bin`` .. |entry_XXX_SUBDIR| replace:: ``<entry>/[s]bin``
.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
|FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
.. |CMAKE_PREFIX_PATH_XXX| replace:: .. |CMAKE_PREFIX_PATH_XXX| replace::
|CMAKE_PREFIX_PATH_XXX_SUBDIR| |CMAKE_PREFIX_PATH_XXX_SUBDIR|
.. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_PROGRAM_PATH` .. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_PROGRAM_PATH`

View File

@@ -0,0 +1,8 @@
PackageRoot search path group
-----------------------------
* All ``find_`` commands now have a `PACKAGE_ROOT` search path group that is
first in the search heuristics. If the ``find_`` command is called from
inside a find module, then the CMake and environment variables
``<PackageName>_ROOT`` are used as prefixes and are the first set of paths
that are searched.