mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-23 07:28:51 -06:00
find_package: Optionally sort globbed directories in a meaningful order
Add `CMAKE_FIND_PACKAGE_SORT_{ORDER,DIRECTION}` variables to specify
sort order and direction.
When multiple package with the same name have been found in the same
location sorting option can be used to force a specific version to be
loaded (e.g. libA_1.12.0 instead of libA_1.1.0). Currently sorting by
NAME and by NATURAL order have been implemented.
Natural ordering makes use of the `strverscmp(3)` ordering.
This commit is contained in:
committed by
Brad King
parent
010140311a
commit
31be918b0b
16
Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst
Normal file
16
Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst
Normal file
@@ -0,0 +1,16 @@
|
||||
CMAKE_FIND_PACKAGE_SORT_DIRECTION
|
||||
---------------------------------
|
||||
|
||||
The sorting direction used by :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER`.
|
||||
It can assume one of the following values:
|
||||
|
||||
``DEC``
|
||||
Default. Ordering is done in descending mode.
|
||||
The highest folder found will be tested first.
|
||||
|
||||
``ASC``
|
||||
Ordering is done in ascending mode.
|
||||
The lowest folder found will be tested first.
|
||||
|
||||
If :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER` is not set or is set to ``NONE``
|
||||
this variable has no effect.
|
||||
36
Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst
Normal file
36
Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst
Normal file
@@ -0,0 +1,36 @@
|
||||
CMAKE_FIND_PACKAGE_SORT_ORDER
|
||||
-----------------------------
|
||||
|
||||
The default order for sorting packages found using :command:`find_package`.
|
||||
It can assume one of the following values:
|
||||
|
||||
``NONE``
|
||||
Default. No attempt is done to sort packages.
|
||||
The first valid package found will be selected.
|
||||
|
||||
``NAME``
|
||||
Sort packages lexicographically before selecting one.
|
||||
|
||||
``NATURAL``
|
||||
Sort packages using natural order (see ``strverscmp(3)`` manual),
|
||||
i.e. such that contiguous digits are compared as whole numbers.
|
||||
|
||||
Natural sorting can be employed to return the highest version when multiple
|
||||
versions of the same library are found by :command:`find_package`. For
|
||||
example suppose that the following libraries have been found:
|
||||
|
||||
* libX-1.1.0
|
||||
* libX-1.2.9
|
||||
* libX-1.2.10
|
||||
|
||||
By setting ``NATURAL`` order we can select the one with the highest
|
||||
version number ``libX-1.2.10``.
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
set(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
|
||||
find_package(libX CONFIG)
|
||||
|
||||
The sort direction can be controlled using the
|
||||
:variable:`CMAKE_FIND_PACKAGE_SORT_DIRECTION` variable
|
||||
(by default decrescent, e.g. lib-B will be tested before lib-A).
|
||||
Reference in New Issue
Block a user