|
@@ -7,32 +7,45 @@ include_guard(GLOBAL)
|
|
|
FeatureSummary
|
|
|
--------------
|
|
|
|
|
|
-Functions for generating a summary of enabled/disabled features.
|
|
|
+.. only:: html
|
|
|
|
|
|
-These functions can be used to generate a summary of enabled and disabled
|
|
|
-packages and/or features for a build tree such as::
|
|
|
+ .. contents::
|
|
|
|
|
|
- -- The following features have been enabled:
|
|
|
+This module provides commands for generating a summary of enabled/disabled
|
|
|
+features.
|
|
|
|
|
|
- * Example, usage example
|
|
|
+Load this module in CMake with:
|
|
|
|
|
|
- -- The following OPTIONAL packages have been found:
|
|
|
+.. code-block:: cmake
|
|
|
|
|
|
- * LibXml2 (required version >= 2.4), XML library, <http://xmlsoft.org>
|
|
|
- Enables HTML-import in MyWordProcessor
|
|
|
- Enables odt-export in MyWordProcessor
|
|
|
- * PNG, image library, <http://www.libpng.org/pub/png/>
|
|
|
- Enables saving screenshots
|
|
|
+ include(FeatureSummary)
|
|
|
|
|
|
- -- The following OPTIONAL packages have not been found:
|
|
|
+Commands provided by this module can be used to generate a summary of enabled
|
|
|
+and disabled packages and/or features for a build tree such as::
|
|
|
|
|
|
- * Lua, the Lua scripting language, <https://www.lua.org>
|
|
|
- Enables macros in MyWordProcessor
|
|
|
- * OpenGL, Open Graphics Library
|
|
|
+ -- The following features have been enabled:
|
|
|
+
|
|
|
+ * Example, usage example
|
|
|
+
|
|
|
+ -- The following OPTIONAL packages have been found:
|
|
|
+
|
|
|
+ * LibXml2 (required version >= 2.4), XML library, <http://xmlsoft.org>
|
|
|
+ Enables HTML-import in MyWordProcessor
|
|
|
+ Enables odt-export in MyWordProcessor
|
|
|
+ * PNG, image library, <http://www.libpng.org/pub/png/>
|
|
|
+ Enables saving screenshots
|
|
|
+
|
|
|
+ -- The following OPTIONAL packages have not been found:
|
|
|
+
|
|
|
+ * Lua, the Lua scripting language, <https://www.lua.org>
|
|
|
+ Enables macros in MyWordProcessor
|
|
|
+ * OpenGL, Open Graphics Library
|
|
|
|
|
|
Global Properties
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
+The following global properties are used by this module:
|
|
|
+
|
|
|
.. variable:: FeatureSummary_PKG_TYPES
|
|
|
|
|
|
.. versionadded:: 3.8
|
|
@@ -69,8 +82,9 @@ Global Properties
|
|
|
|
|
|
This global property defines the default package type.
|
|
|
|
|
|
- When the :command:`feature_summary()` command is called, and the user has not
|
|
|
- explicitly set a type of some package, its type will be set to this value.
|
|
|
+ When the :command:`feature_summary()` command is called, and the user has
|
|
|
+ not explicitly set a type of some package, its type will be set to the
|
|
|
+ value of this property.
|
|
|
|
|
|
This value must be one of the types defined in the
|
|
|
:variable:`FeatureSummary_PKG_TYPES` global property.
|
|
@@ -88,6 +102,519 @@ Global Properties
|
|
|
The following <FeatureSummary_<TYPE>_DESCRIPTION> have been found:
|
|
|
|
|
|
If not set, default string ``<TYPE> packages`` is used.
|
|
|
+
|
|
|
+Commands
|
|
|
+^^^^^^^^
|
|
|
+
|
|
|
+This module provides the following commands:
|
|
|
+
|
|
|
+* :command:`feature_summary`
|
|
|
+* :command:`set_package_properties`
|
|
|
+* :command:`add_feature_info`
|
|
|
+
|
|
|
+Printing Feature Summary
|
|
|
+""""""""""""""""""""""""
|
|
|
+
|
|
|
+.. command:: feature_summary
|
|
|
+
|
|
|
+ Prints information about enabled or disabled packages and features of a
|
|
|
+ project:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ feature_summary(
|
|
|
+ WHAT (ALL
|
|
|
+ | PACKAGES_FOUND | PACKAGES_NOT_FOUND
|
|
|
+ | <TYPE>_PACKAGES_FOUND | <TYPE>_PACKAGES_NOT_FOUND
|
|
|
+ | ENABLED_FEATURES | DISABLED_FEATURES)
|
|
|
+ [FILENAME <file>]
|
|
|
+ [APPEND]
|
|
|
+ [VAR <variable-name>]
|
|
|
+ [INCLUDE_QUIET_PACKAGES]
|
|
|
+ [FATAL_ON_MISSING_REQUIRED_PACKAGES]
|
|
|
+ [DESCRIPTION <description> | DEFAULT_DESCRIPTION]
|
|
|
+ [QUIET_ON_EMPTY]
|
|
|
+ )
|
|
|
+
|
|
|
+ This command can be used to print information about enabled or disabled
|
|
|
+ packages and features of a project. By default, only the names of the
|
|
|
+ features/packages will be printed and their required version when one was
|
|
|
+ specified. Use :command:`set_package_properties()` to add more useful
|
|
|
+ information, e.g., a homepage URL for the respective package or their
|
|
|
+ purpose in the project.
|
|
|
+
|
|
|
+ .. rubric:: The arguments are:
|
|
|
+
|
|
|
+ ``WHAT``
|
|
|
+ This is the only mandatory option. It specifies what information will be
|
|
|
+ printed:
|
|
|
+
|
|
|
+ ``ALL``
|
|
|
+ Print everything.
|
|
|
+ ``ENABLED_FEATURES``
|
|
|
+ The list of all features which are enabled.
|
|
|
+ ``DISABLED_FEATURES``
|
|
|
+ The list of all features which are disabled.
|
|
|
+ ``PACKAGES_FOUND``
|
|
|
+ The list of all packages which have been found.
|
|
|
+ ``PACKAGES_NOT_FOUND``
|
|
|
+ The list of all packages which have not been found.
|
|
|
+
|
|
|
+ For each package type ``<TYPE>`` defined by the
|
|
|
+ :variable:`FeatureSummary_PKG_TYPES` global property, the following
|
|
|
+ information can also be used:
|
|
|
+
|
|
|
+ ``<TYPE>_PACKAGES_FOUND``
|
|
|
+ The list of only packages of type ``<TYPE>`` which have been found.
|
|
|
+ ``<TYPE>_PACKAGES_NOT_FOUND``
|
|
|
+ The list of only packages of type ``<TYPE>`` which have not been found.
|
|
|
+
|
|
|
+ .. versionchanged:: 3.1
|
|
|
+ The ``WHAT`` option is now a multi-value keyword, so that these values can
|
|
|
+ be combined, with the exception of the ``ALL`` value, in order to
|
|
|
+ customize the output. For example:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
|
|
|
+
|
|
|
+ ``FILENAME <file>``
|
|
|
+ If this option is given, the information is printed into this file instead
|
|
|
+ of the terminal. Relative ``<file>`` path is interpreted as being relative
|
|
|
+ to the current source directory (i.e. :variable:`CMAKE_CURRENT_SOURCE_DIR`).
|
|
|
+
|
|
|
+ ``APPEND``
|
|
|
+ If this option is given, the output is appended to the ``<file>`` provided
|
|
|
+ by the ``FILENAME`` option, otherwise the file is overwritten if it already
|
|
|
+ exists.
|
|
|
+
|
|
|
+ ``VAR <variable-name>``
|
|
|
+ If this option is given, the information is stored into the specified
|
|
|
+ variable ``<variable-name>`` instead of the terminal.
|
|
|
+
|
|
|
+ ``INCLUDE_QUIET_PACKAGES``
|
|
|
+ If this option is given, packages which have been searched with
|
|
|
+ :command:`find_package(... QUIET)` will also be listed. By default they are
|
|
|
+ skipped.
|
|
|
+
|
|
|
+ ``FATAL_ON_MISSING_REQUIRED_PACKAGES``
|
|
|
+ If this option is given, CMake will abort with fatal error if a package
|
|
|
+ which is marked as one of the package types listed in the
|
|
|
+ :variable:`FeatureSummary_REQUIRED_PKG_TYPES` global property has not been
|
|
|
+ found.
|
|
|
+
|
|
|
+ ``DESCRIPTION <description>``
|
|
|
+ A description or headline which will be printed above the actual content.
|
|
|
+ Without this option, if only one package type was requested, no title is
|
|
|
+ printed, unless a custom string is explicitly set using this option or
|
|
|
+ ``DEFAULT_DESCRIPTION`` option is used that outputs a default title for the
|
|
|
+ requested type.
|
|
|
+
|
|
|
+ ``DEFAULT_DESCRIPTION``
|
|
|
+ .. versionadded:: 3.9
|
|
|
+
|
|
|
+ The default description or headline to be printed above the content as
|
|
|
+ opposed to the customizable ``DESCRIPTION <description>``.
|
|
|
+
|
|
|
+ ``QUIET_ON_EMPTY``
|
|
|
+ .. versionadded:: 3.8
|
|
|
+
|
|
|
+ If this option is given, when only one package type was requested, and no
|
|
|
+ packages belonging to that category were found, then no output (including
|
|
|
+ the ``DESCRIPTION``) is printed nor added to the ``FILENAME``, or the
|
|
|
+ ``VAR`` variable.
|
|
|
+
|
|
|
+Package Properties
|
|
|
+""""""""""""""""""
|
|
|
+
|
|
|
+.. command:: set_package_properties
|
|
|
+
|
|
|
+ Sets package properties:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ set_package_properties(
|
|
|
+ <PackageName>
|
|
|
+ PROPERTIES
|
|
|
+ [URL <url>]
|
|
|
+ [DESCRIPTION <description>]
|
|
|
+ [TYPE (RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED)]
|
|
|
+ [PURPOSE <purpose>]
|
|
|
+ )
|
|
|
+
|
|
|
+ Use this command to configure and provide information about the package
|
|
|
+ named ``<PackageName>``, which can then be displayed using the
|
|
|
+ :command:`feature_summary()` command. This command can be called either
|
|
|
+ directly within the corresponding :ref:`Find module <Find Modules>` or in
|
|
|
+ the project that uses the module after invoking the :command:`find_package()`
|
|
|
+ call. The features for which information can be set are determined
|
|
|
+ automatically after the :command:`find_package()` command.
|
|
|
+
|
|
|
+ .. rubric:: The arguments are:
|
|
|
+
|
|
|
+ ``<PackageName>``
|
|
|
+ The name of the package. For example, as specified in the
|
|
|
+ :command:`find_package(<PackageName>)` argument.
|
|
|
+
|
|
|
+ ``PROPERTIES``
|
|
|
+ Specifies the properties to set:
|
|
|
+
|
|
|
+ ``URL <url>``
|
|
|
+ This should be the homepage of the package, or something similar.
|
|
|
+ Ideally this is set already directly in the
|
|
|
+ :ref:`Find module <Find Modules>`.
|
|
|
+
|
|
|
+ ``DESCRIPTION <description>``
|
|
|
+ A short description what that package is, at most one sentence.
|
|
|
+ Ideally this is set already directly in the
|
|
|
+ :ref:`Find module <Find Modules>`.
|
|
|
+
|
|
|
+ ``TYPE <type>``
|
|
|
+ What type of dependency has the using project on that package.
|
|
|
+
|
|
|
+ Default ``<type>`` is ``OPTIONAL``. In this case it is a package
|
|
|
+ which can be used by the project when available at buildtime, but the
|
|
|
+ project also works without it.
|
|
|
+
|
|
|
+ ``RECOMMENDED`` package type is similar to ``OPTIONAL``, i.e. the
|
|
|
+ project will build if the package is not present, but the
|
|
|
+ functionality of the resulting binaries will be severely limited. If
|
|
|
+ a ``REQUIRED`` package is not available at buildtime, the project may
|
|
|
+ not even build. This can be combined with the
|
|
|
+ :command:`feature_summary(FATAL_ON_MISSING_REQUIRED_PACKAGES)` command
|
|
|
+ option.
|
|
|
+
|
|
|
+ Last, a ``RUNTIME`` package is a package which is actually not used
|
|
|
+ at all during the build, but which is required for actually running
|
|
|
+ the resulting binaries. So if such a package is missing, the project
|
|
|
+ can still be built, but it may not work later on.
|
|
|
+
|
|
|
+ If ``set_package_properties()`` is called multiple times for the same
|
|
|
+ package with different TYPEs, the ``TYPE`` is only changed to higher
|
|
|
+ TYPEs (``RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED``), lower TYPEs
|
|
|
+ are ignored. The ``TYPE`` property is project-specific, so it cannot
|
|
|
+ be set by the :ref:`Find module <Find Modules>`, but must be set in
|
|
|
+ the project.
|
|
|
+
|
|
|
+ The accepted types can be changed by setting the
|
|
|
+ :variable:`FeatureSummary_PKG_TYPES` global property.
|
|
|
+
|
|
|
+ ``PURPOSE <purpose>``
|
|
|
+ This describes which features this package enables in the project,
|
|
|
+ i.e. it tells the user what functionality they get in the resulting
|
|
|
+ binaries. If ``set_package_properties()`` is called multiple times
|
|
|
+ for a package, all ``PURPOSE`` properties are appended to a list of
|
|
|
+ purposes of the package in the project. As the ``TYPE`` property,
|
|
|
+ also the ``PURPOSE`` property is project-specific, so it cannot be
|
|
|
+ set by the :ref:`Find module <Find Modules>`, but must be set in the
|
|
|
+ project.
|
|
|
+
|
|
|
+Adding Feature Info
|
|
|
+"""""""""""""""""""
|
|
|
+
|
|
|
+.. command:: add_feature_info
|
|
|
+
|
|
|
+ Adds feature information:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ add_feature_info(<name> <condition> <description>)
|
|
|
+
|
|
|
+ Use this command to add information about a feature identified with a given
|
|
|
+ ``<name>``.
|
|
|
+
|
|
|
+ .. rubric:: The arguments are:
|
|
|
+
|
|
|
+ ``<name>``
|
|
|
+ Identification name for a feature being added.
|
|
|
+
|
|
|
+ ``<condition>``
|
|
|
+ Specifies the conditions that determine whether this feature is enabled
|
|
|
+ or disabled.
|
|
|
+
|
|
|
+ The ``<condition>`` argument can be:
|
|
|
+
|
|
|
+ * A single condition (such as a variable name).
|
|
|
+
|
|
|
+ * .. versionadded:: 3.8
|
|
|
+ A :ref:`semicolon-separated list <CMake Language Lists>` of multiple
|
|
|
+ conditions.
|
|
|
+
|
|
|
+ * .. versionadded:: 4.0
|
|
|
+ A full :ref:`Condition Syntax` as used in an ``if(<condition>)``
|
|
|
+ clause. See policy :policy:`CMP0183`. This enables using entire
|
|
|
+ condition syntax (such as grouping conditions with parens and
|
|
|
+ similar).
|
|
|
+
|
|
|
+ ``<description>``
|
|
|
+ A text describing the feature. This information can be displayed using
|
|
|
+ :command:`feature_summary()` for ``ENABLED_FEATURES`` and
|
|
|
+ ``DISABLED_FEATURES`` respectively.
|
|
|
+
|
|
|
+Deprecated Commands
|
|
|
+"""""""""""""""""""
|
|
|
+
|
|
|
+The following legacy and deprecated commands are provided for backward
|
|
|
+compatibility with previous CMake versions:
|
|
|
+
|
|
|
+.. command:: set_package_info
|
|
|
+
|
|
|
+ .. deprecated:: 3.8
|
|
|
+ Use the :command:`set_package_properties`, and :command:`add_feature_info`
|
|
|
+ commands instead.
|
|
|
+
|
|
|
+ Sets up information about the specified package, which can then be displayed
|
|
|
+ via :command:`feature_summary()`:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ set_package_info(<PackageName> <description> [<url> [<purpose>]])
|
|
|
+
|
|
|
+ ``<PackageName>``
|
|
|
+ Name of the package.
|
|
|
+
|
|
|
+ ``<description>``
|
|
|
+ A short description of the package.
|
|
|
+
|
|
|
+ ``<url>``
|
|
|
+ Homepage of the package.
|
|
|
+
|
|
|
+ ``<purpose>``
|
|
|
+ The purpose of the package.
|
|
|
+
|
|
|
+ This command can be used either directly in the
|
|
|
+ :ref:`Find module <Find Modules>` or in the project which uses the
|
|
|
+ ``FeatureSummary`` module after the :command:`find_package()` call. The
|
|
|
+ features for which information can be set are added automatically by the
|
|
|
+ ``find_package()`` command.
|
|
|
+
|
|
|
+.. command:: set_feature_info
|
|
|
+
|
|
|
+ .. deprecated:: 3.8
|
|
|
+
|
|
|
+ Sets feature info for a package:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ set_feature_info(<name> <description> [<url>])
|
|
|
+
|
|
|
+ Does the same as:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ set_package_info(<name> <description> [<url>])
|
|
|
+
|
|
|
+.. command:: print_enabled_features
|
|
|
+
|
|
|
+ .. deprecated:: 3.8
|
|
|
+
|
|
|
+ Prints enabled features:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ print_enabled_features()
|
|
|
+
|
|
|
+ Does the same as:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
|
|
|
+
|
|
|
+.. command:: print_disabled_features
|
|
|
+
|
|
|
+ .. deprecated:: 3.8
|
|
|
+
|
|
|
+ Prints disabled features:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ print_disabled_features()
|
|
|
+
|
|
|
+ Does the same as:
|
|
|
+
|
|
|
+ .. code-block:: cmake
|
|
|
+
|
|
|
+ feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
|
|
|
+
|
|
|
+Examples
|
|
|
+^^^^^^^^
|
|
|
+
|
|
|
+Example: Appending Feature Summary to a File
|
|
|
+""""""""""""""""""""""""""""""""""""""""""""
|
|
|
+
|
|
|
+In the following example, the feature summary output will be appended to
|
|
|
+a specified file instead of printing:
|
|
|
+
|
|
|
+.. code-block:: cmake
|
|
|
+
|
|
|
+ include(FeatureSummary)
|
|
|
+ feature_summary(WHAT ALL FILENAME ${CMAKE_BINARY_DIR}/all.log APPEND)
|
|
|
+
|
|
|
+Example: Storing Feature Summary in a Variable
|
|
|
+""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
+
|
|
|
+In the following example, the feature summary of enabled features is stored
|
|
|
+in a specified variable ``enabledFeaturesText``, including the ``QUIET``
|
|
|
+packages:
|
|
|
+
|
|
|
+.. code-block:: cmake
|
|
|
+
|
|
|
+ include(FeatureSummary)
|
|
|
+
|
|
|
+ feature_summary(
|
|
|
+ WHAT ENABLED_FEATURES
|
|
|
+ INCLUDE_QUIET_PACKAGES
|
|
|
+ DESCRIPTION "Enabled Features:"
|
|
|
+ VAR enabledFeaturesText
|
|
|
+ )
|
|
|
+
|
|
|
+ message(STATUS "${enabledFeaturesText}")
|
|
|
+
|
|
|
+Example: Adding a Custom Package Type
|
|
|
+"""""""""""""""""""""""""""""""""""""
|
|
|
+
|
|
|
+In the following example a custom package type is added and printed only
|
|
|
+the categories that are not empty:
|
|
|
+
|
|
|
+.. code-block:: cmake
|
|
|
+
|
|
|
+ include(FeatureSummary)
|
|
|
+
|
|
|
+ set_property(GLOBAL APPEND PROPERTY FeatureSummary_PKG_TYPES BUILD)
|
|
|
+
|
|
|
+ find_package(FOO)
|
|
|
+ set_package_properties(FOO PROPERTIES TYPE BUILD)
|
|
|
+
|
|
|
+ feature_summary(
|
|
|
+ WHAT BUILD_PACKAGES_FOUND
|
|
|
+ DESCRIPTION "Build tools found:"
|
|
|
+ QUIET_ON_EMPTY
|
|
|
+ )
|
|
|
+
|
|
|
+ feature_summary(
|
|
|
+ WHAT BUILD_PACKAGES_NOT_FOUND
|
|
|
+ DESCRIPTION "Build tools not found:"
|
|
|
+ QUIET_ON_EMPTY
|
|
|
+ )
|
|
|
+
|
|
|
+Example: Setting Package Info
|
|
|
+"""""""""""""""""""""""""""""
|
|
|
+
|
|
|
+Example for setting the info for a package:
|
|
|
+
|
|
|
+.. code-block:: cmake
|
|
|
+
|
|
|
+ include(FeatureSummary)
|
|
|
+
|
|
|
+ find_package(LibXml2)
|
|
|
+ set_package_properties(
|
|
|
+ LibXml2
|
|
|
+ PROPERTIES
|
|
|
+ DESCRIPTION "XML library"
|
|
|
+ URL "http://xmlsoft.org"
|
|
|
+ )
|
|
|
+ # or
|
|
|
+ set_package_properties(
|
|
|
+ LibXml2
|
|
|
+ PROPERTIES
|
|
|
+ TYPE RECOMMENDED
|
|
|
+ PURPOSE "Enables HTML-import in MyWordProcessor"
|
|
|
+ )
|
|
|
+ # or
|
|
|
+ set_package_properties(
|
|
|
+ LibXml2
|
|
|
+ PROPERTIES
|
|
|
+ TYPE OPTIONAL
|
|
|
+ PURPOSE "Enables odt-export in MyWordProcessor"
|
|
|
+ )
|
|
|
+
|
|
|
+ find_package(DBUS)
|
|
|
+ set_package_properties(
|
|
|
+ DBUS
|
|
|
+ PROPERTIES
|
|
|
+ TYPE RUNTIME
|
|
|
+ PURPOSE "Necessary to disable the screensaver during a presentation"
|
|
|
+ )
|
|
|
+
|
|
|
+Example: Printing Feature Summary
|
|
|
+"""""""""""""""""""""""""""""""""
|
|
|
+
|
|
|
+In the following example, this module is used to output feature summary at
|
|
|
+the end of the configuration. If any required package is not found,
|
|
|
+processing stops with an error message at the end of the configuration
|
|
|
+phase.
|
|
|
+
|
|
|
+.. code-block:: cmake
|
|
|
+
|
|
|
+ cmake_minimum_required(VERSION 3.15)
|
|
|
+ project(Example)
|
|
|
+
|
|
|
+ add_library(example example.c)
|
|
|
+
|
|
|
+ include(FeatureSummary)
|
|
|
+
|
|
|
+ find_package(CURL)
|
|
|
+ set_package_properties(CURL PROPERTIES TYPE REQUIRED)
|
|
|
+ target_link_libraries(example PRIVATE CURL::libcurl)
|
|
|
+
|
|
|
+ find_package(LibXml2 QUIET)
|
|
|
+ set_package_properties(LibXml2 PROPERTIES TYPE RECOMMENDED)
|
|
|
+ if(LibXml2_FOUND)
|
|
|
+ target_link_libraries(example PRIVATE LibXml2::LibXml2)
|
|
|
+ endif()
|
|
|
+
|
|
|
+ feature_summary(
|
|
|
+ WHAT ALL
|
|
|
+ INCLUDE_QUIET_PACKAGES
|
|
|
+ DESCRIPTION "Feature summary:"
|
|
|
+ FATAL_ON_MISSING_REQUIRED_PACKAGES
|
|
|
+ )
|
|
|
+
|
|
|
+Examples: Setting Feature Info
|
|
|
+""""""""""""""""""""""""""""""
|
|
|
+
|
|
|
+Example for setting the info for a feature:
|
|
|
+
|
|
|
+.. code-block:: cmake
|
|
|
+
|
|
|
+ include(FeatureSummary)
|
|
|
+
|
|
|
+ option(WITH_FOO "Help for foo" ON)
|
|
|
+
|
|
|
+ add_feature_info(Foo WITH_FOO "this feature provides very cool stuff")
|
|
|
+
|
|
|
+Example for setting feature info based on a list of conditions:
|
|
|
+
|
|
|
+.. code-block:: cmake
|
|
|
+
|
|
|
+ include(FeatureSummary)
|
|
|
+
|
|
|
+ option(WITH_FOO "Help for foo" ON)
|
|
|
+ option(WITH_BAR "Help for bar" OFF)
|
|
|
+
|
|
|
+ add_feature_info(
|
|
|
+ FooBar
|
|
|
+ "WITH_FOO;NOT WITH_BAR"
|
|
|
+ "this feature is enabled when WITH_FOO is ON and WITH_BAR turned OFF"
|
|
|
+ )
|
|
|
+
|
|
|
+In the next example feature info are set depending on a full condition
|
|
|
+syntax. Unlike semicolon-separated list of conditions, this enables using
|
|
|
+entire condition syntax as being the ``if`` clause argument:
|
|
|
+
|
|
|
+.. code-block:: cmake
|
|
|
+
|
|
|
+ include(FeatureSummary)
|
|
|
+
|
|
|
+ option(WITH_FOO "Help for foo" ON)
|
|
|
+ option(WITH_BAR "Help for bar" ON)
|
|
|
+ option(WITH_BAZ "Help for baz" OFF)
|
|
|
+
|
|
|
+ add_feature_info(
|
|
|
+ FooBarBaz
|
|
|
+ "WITH_FOO AND (WITH_BAR OR WITH_BAZ)"
|
|
|
+ "this feature is enabled when the entire condition is true"
|
|
|
+ )
|
|
|
#]=======================================================================]
|
|
|
|
|
|
get_property(_fsPkgTypeIsSet GLOBAL PROPERTY FeatureSummary_PKG_TYPES SET)
|
|
@@ -105,15 +632,7 @@ if(NOT _fsDefaultPkgTypeIsSet)
|
|
|
set_property(GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE OPTIONAL)
|
|
|
endif()
|
|
|
|
|
|
-#[=======================================================================[.rst:
|
|
|
-
|
|
|
-Functions
|
|
|
-^^^^^^^^^
|
|
|
-
|
|
|
-#]=======================================================================]
|
|
|
-
|
|
|
function(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
|
|
|
-
|
|
|
get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
|
|
|
get_property(_fsDefaultPkgType GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE)
|
|
|
|
|
@@ -208,155 +727,6 @@ function(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
|
|
|
set(${_var} "${_currentFeatureText}" PARENT_SCOPE)
|
|
|
endfunction()
|
|
|
|
|
|
-
|
|
|
-#[=======================================================================[.rst:
|
|
|
-.. command:: feature_summary
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- feature_summary([FILENAME <file>]
|
|
|
- [APPEND]
|
|
|
- [VAR <variable_name>]
|
|
|
- [INCLUDE_QUIET_PACKAGES]
|
|
|
- [FATAL_ON_MISSING_REQUIRED_PACKAGES]
|
|
|
- [DESCRIPTION <description> | DEFAULT_DESCRIPTION]
|
|
|
- [QUIET_ON_EMPTY]
|
|
|
- WHAT (ALL
|
|
|
- | PACKAGES_FOUND | PACKAGES_NOT_FOUND
|
|
|
- | <TYPE>_PACKAGES_FOUND | <TYPE>_PACKAGES_NOT_FOUND
|
|
|
- | ENABLED_FEATURES | DISABLED_FEATURES)
|
|
|
- )
|
|
|
-
|
|
|
- This function can be used to print information about
|
|
|
- enabled or disabled packages and features of a project. By default,
|
|
|
- only the names of the features/packages will be printed and their
|
|
|
- required version when one was specified. Use
|
|
|
- :command:`set_package_properties()` to add more useful information, like e.g.
|
|
|
- a homepage URL for the respective package or their purpose in the project.
|
|
|
-
|
|
|
- The options are:
|
|
|
-
|
|
|
- ``WHAT``
|
|
|
- This is the only mandatory option. It specifies what information will be
|
|
|
- printed:
|
|
|
-
|
|
|
- ``ALL``
|
|
|
- Print everything.
|
|
|
- ``ENABLED_FEATURES``
|
|
|
- The list of all features which are enabled.
|
|
|
- ``DISABLED_FEATURES``
|
|
|
- The list of all features which are disabled.
|
|
|
- ``PACKAGES_FOUND``
|
|
|
- The list of all packages which have been found.
|
|
|
- ``PACKAGES_NOT_FOUND``
|
|
|
- The list of all packages which have not been found.
|
|
|
-
|
|
|
- For each package type ``<TYPE>`` defined by the
|
|
|
- :variable:`FeatureSummary_PKG_TYPES` global property, the following
|
|
|
- information can also be used:
|
|
|
-
|
|
|
- ``<TYPE>_PACKAGES_FOUND``
|
|
|
- The list of only packages of type ``<TYPE>`` which have been found.
|
|
|
- ``<TYPE>_PACKAGES_NOT_FOUND``
|
|
|
- The list of only packages of type ``<TYPE>`` which have not been found.
|
|
|
-
|
|
|
- .. versionchanged:: 3.1
|
|
|
- The ``WHAT`` option is now a multi-value keyword, so that these values can
|
|
|
- be combined, with the exception of the ``ALL`` value, in order to
|
|
|
- customize the output. For example:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
|
|
|
-
|
|
|
- ``FILENAME <file>``
|
|
|
- If this option is given, the information is printed into this file instead
|
|
|
- of the terminal. Relative ``<file>`` path is interpreted as being relative
|
|
|
- to the current source directory (i.e. :variable:`CMAKE_CURRENT_SOURCE_DIR`).
|
|
|
-
|
|
|
- ``APPEND``
|
|
|
- If this option is given, the output is appended to the ``<file>`` provided
|
|
|
- by the ``FILENAME`` option, otherwise the file is overwritten if it already
|
|
|
- exists.
|
|
|
-
|
|
|
- ``VAR <variable_name>``
|
|
|
- If this option is given, the information is stored into the specified
|
|
|
- variable ``<variable_name>`` instead of the terminal.
|
|
|
-
|
|
|
- ``DESCRIPTION <description>``
|
|
|
- A description or headline which will be printed above the actual content.
|
|
|
- Without this option, if only one package type was requested, no title is
|
|
|
- printed, unless a custom string is explicitly set using this option or
|
|
|
- ``DEFAULT_DESCRIPTION`` option is used that outputs a default title for the
|
|
|
- requested type.
|
|
|
-
|
|
|
- ``DEFAULT_DESCRIPTION``
|
|
|
- .. versionadded:: 3.9
|
|
|
-
|
|
|
- The default description or headline to be printed above the content as
|
|
|
- opposed to the customizable ``DESCRIPTION <description>``.
|
|
|
-
|
|
|
- ``INCLUDE_QUIET_PACKAGES``
|
|
|
- If this option is given, packages which have been searched with
|
|
|
- :command:`find_package(... QUIET)` will also be listed. By default they are
|
|
|
- skipped.
|
|
|
-
|
|
|
- ``FATAL_ON_MISSING_REQUIRED_PACKAGES``
|
|
|
- If this option is given, CMake will abort with fatal error if a package
|
|
|
- which is marked as one of the package types listed in the
|
|
|
- :variable:`FeatureSummary_REQUIRED_PKG_TYPES` global property has not been
|
|
|
- found.
|
|
|
-
|
|
|
- The :variable:`FeatureSummary_DEFAULT_PKG_TYPE` global property can be
|
|
|
- modified to change the default package type assigned when not explicitly
|
|
|
- assigned by the user.
|
|
|
-
|
|
|
- ``QUIET_ON_EMPTY``
|
|
|
- .. versionadded:: 3.8
|
|
|
-
|
|
|
- If this option is given, when only one package type was requested, and no
|
|
|
- packages belonging to that category were found, then no output (including
|
|
|
- the ``DESCRIPTION``) is printed nor added to the ``FILENAME``, or the
|
|
|
- ``VAR`` variable.
|
|
|
-
|
|
|
- Example 1, append everything to a file:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- include(FeatureSummary)
|
|
|
- feature_summary(WHAT ALL
|
|
|
- FILENAME ${CMAKE_BINARY_DIR}/all.log APPEND)
|
|
|
-
|
|
|
- Example 2, print the enabled features into the variable
|
|
|
- ``enabledFeaturesText``, including the ``QUIET`` packages:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- include(FeatureSummary)
|
|
|
- feature_summary(WHAT ENABLED_FEATURES
|
|
|
- INCLUDE_QUIET_PACKAGES
|
|
|
- DESCRIPTION "Enabled Features:"
|
|
|
- VAR enabledFeaturesText)
|
|
|
- message(STATUS "${enabledFeaturesText}")
|
|
|
-
|
|
|
- Example 3, add custom package type and print only the categories that are not
|
|
|
- empty:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- include(FeatureSummary)
|
|
|
- set_property(GLOBAL APPEND PROPERTY FeatureSummary_PKG_TYPES BUILD)
|
|
|
- find_package(FOO)
|
|
|
- set_package_properties(FOO PROPERTIES TYPE BUILD)
|
|
|
- feature_summary(WHAT BUILD_PACKAGES_FOUND
|
|
|
- DESCRIPTION "Build tools found:"
|
|
|
- QUIET_ON_EMPTY)
|
|
|
- feature_summary(WHAT BUILD_PACKAGES_NOT_FOUND
|
|
|
- DESCRIPTION "Build tools not found:"
|
|
|
- QUIET_ON_EMPTY)
|
|
|
-
|
|
|
-#]=======================================================================]
|
|
|
-
|
|
|
function(FEATURE_SUMMARY)
|
|
|
# cmake_parse_arguments(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
|
|
|
set(options APPEND
|
|
@@ -498,93 +868,8 @@ function(FEATURE_SUMMARY)
|
|
|
if(requiredPackagesNotFound AND _FS_FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
|
|
message(FATAL_ERROR "feature_summary() Error: REQUIRED package(s) are missing, aborting CMake run.")
|
|
|
endif()
|
|
|
-
|
|
|
endfunction()
|
|
|
|
|
|
-#[=======================================================================[.rst:
|
|
|
-.. command:: set_package_properties
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- set_package_properties(<name> PROPERTIES
|
|
|
- [URL <url>]
|
|
|
- [DESCRIPTION <description>]
|
|
|
- [TYPE (RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED)]
|
|
|
- [PURPOSE <purpose>]
|
|
|
- )
|
|
|
-
|
|
|
- Use this function to configure and provide information about the package named
|
|
|
- ``<name>``, which can then be displayed using the
|
|
|
- :command:`feature_summary()` command. This can be performed either directly
|
|
|
- within the corresponding :ref:`Find module <Find Modules>` or in the project
|
|
|
- that uses the module after invoking the :command:`find_package()` call. The
|
|
|
- features for which information can be set are determined automatically after
|
|
|
- the :command:`find_package()` command.
|
|
|
-
|
|
|
- ``URL <url>``
|
|
|
- This should be the homepage of the package, or something similar.
|
|
|
- Ideally this is set already directly in the
|
|
|
- :ref:`Find module <Find Modules>`.
|
|
|
-
|
|
|
- ``DESCRIPTION <description>``
|
|
|
- A short description what that package is, at most one sentence.
|
|
|
- Ideally this is set already directly in the
|
|
|
- :ref:`Find module <Find Modules>`.
|
|
|
-
|
|
|
- ``TYPE <type>``
|
|
|
- What type of dependency has the using project on that package.
|
|
|
- Default is ``OPTIONAL``. In this case it is a package which can be used
|
|
|
- by the project when available at buildtime, but it also work without.
|
|
|
- ``RECOMMENDED`` is similar to ``OPTIONAL``, i.e. the project will build if
|
|
|
- the package is not present, but the functionality of the resulting
|
|
|
- binaries will be severely limited. If a ``REQUIRED`` package is not
|
|
|
- available at buildtime, the project may not even build. This can be
|
|
|
- combined with the
|
|
|
- :command:`feature_summary(FATAL_ON_MISSING_REQUIRED_PACKAGES)` command
|
|
|
- option. Last, a ``RUNTIME`` package is a package which is actually not used
|
|
|
- at all during the build, but which is required for actually running the
|
|
|
- resulting binaries. So if such a package is
|
|
|
- missing, the project can still be built, but it may not work later on.
|
|
|
- If ``set_package_properties()`` is called multiple times for the same
|
|
|
- package with different TYPEs, the ``TYPE`` is only changed to higher
|
|
|
- TYPEs (``RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED``), lower TYPEs are
|
|
|
- ignored. The ``TYPE`` property is project-specific, so it cannot be set
|
|
|
- by the :ref:`Find module <Find Modules>`, but must be set in the project.
|
|
|
- The accepted types can be changed by setting the
|
|
|
- :variable:`FeatureSummary_PKG_TYPES` global property.
|
|
|
-
|
|
|
- ``PURPOSE <purpose>``
|
|
|
- This describes which features this package enables in the
|
|
|
- project, i.e. it tells the user what functionality they get in the
|
|
|
- resulting binaries. If ``set_package_properties()`` is called multiple
|
|
|
- times for a package, all ``PURPOSE`` properties are appended to a list of
|
|
|
- purposes of the package in the project. As the ``TYPE`` property, also
|
|
|
- the ``PURPOSE`` property is project-specific, so it cannot be set by the
|
|
|
- :ref:`Find module <Find Modules>`, but must be set in the project.
|
|
|
-
|
|
|
- Example for setting the info for a package:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- include(FeatureSummary)
|
|
|
- find_package(LibXml2)
|
|
|
- set_package_properties(LibXml2 PROPERTIES
|
|
|
- DESCRIPTION "XML library"
|
|
|
- URL "http://xmlsoft.org")
|
|
|
- # or
|
|
|
- set_package_properties(LibXml2 PROPERTIES
|
|
|
- TYPE RECOMMENDED
|
|
|
- PURPOSE "Enables HTML-import in MyWordProcessor")
|
|
|
- # or
|
|
|
- set_package_properties(LibXml2 PROPERTIES
|
|
|
- TYPE OPTIONAL
|
|
|
- PURPOSE "Enables odt-export in MyWordProcessor")
|
|
|
-
|
|
|
- find_package(DBUS)
|
|
|
- set_package_properties(DBUS PROPERTIES
|
|
|
- TYPE RUNTIME
|
|
|
- PURPOSE "Necessary to disable the screensaver during a presentation")
|
|
|
-#]=======================================================================]
|
|
|
function(SET_PACKAGE_PROPERTIES _name _props)
|
|
|
if(NOT "${_props}" STREQUAL "PROPERTIES")
|
|
|
message(FATAL_ERROR "PROPERTIES keyword is missing in SET_PACKAGE_PROPERTIES() call.")
|
|
@@ -609,7 +894,6 @@ function(SET_PACKAGE_PROPERTIES _name _props)
|
|
|
set_property(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_SPP_DESCRIPTION}" )
|
|
|
endif()
|
|
|
|
|
|
-
|
|
|
if(_SPP_URL)
|
|
|
get_property(_info GLOBAL PROPERTY _CMAKE_${_name}_URL)
|
|
|
if(_info AND NOT "${_info}" STREQUAL "${_SPP_URL}")
|
|
@@ -619,7 +903,6 @@ function(SET_PACKAGE_PROPERTIES _name _props)
|
|
|
set_property(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_SPP_URL}" )
|
|
|
endif()
|
|
|
|
|
|
-
|
|
|
# handle the PURPOSE: use APPEND, since there can be multiple purposes for one package inside a project
|
|
|
if(_SPP_PURPOSE)
|
|
|
set_property(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_SPP_PURPOSE}" )
|
|
@@ -648,68 +931,8 @@ function(SET_PACKAGE_PROPERTIES _name _props)
|
|
|
set_property(GLOBAL PROPERTY _CMAKE_${_name}_TYPE "${_SPP_TYPE}" )
|
|
|
endif()
|
|
|
endif()
|
|
|
-
|
|
|
endfunction()
|
|
|
|
|
|
-#[=======================================================================[.rst:
|
|
|
-.. command:: add_feature_info
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- add_feature_info(<name> <enabled> <description>)
|
|
|
-
|
|
|
- Use this function to add information about a feature identified with a given
|
|
|
- ``<name>``. The ``<enabled>`` contains whether this feature is enabled or
|
|
|
- not. It can be a variable or a list of conditions.
|
|
|
- ``<description>`` is a text describing the feature. The information can
|
|
|
- be displayed using :command:`feature_summary()` for ``ENABLED_FEATURES`` and
|
|
|
- ``DISABLED_FEATURES`` respectively.
|
|
|
-
|
|
|
- .. versionchanged:: 3.8
|
|
|
- ``<enabled>`` can be a list of conditions.
|
|
|
-
|
|
|
- .. versionchanged:: 4.0
|
|
|
- Full :ref:`Condition Syntax` is now supported for ``<enabled>``.
|
|
|
- See policy :policy:`CMP0183`.
|
|
|
-
|
|
|
- Example for setting the info for a feature:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- include(FeatureSummary)
|
|
|
-
|
|
|
- option(WITH_FOO "Help for foo" ON)
|
|
|
- add_feature_info(Foo WITH_FOO "this feature provides very cool stuff")
|
|
|
-
|
|
|
- Example for setting feature info based on a list of conditions:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- option(WITH_FOO "Help for foo" ON)
|
|
|
- option(WITH_BAR "Help for bar" OFF)
|
|
|
- add_feature_info(
|
|
|
- FooBar
|
|
|
- "WITH_FOO;NOT WITH_BAR"
|
|
|
- "this feature is enabled when WITH_FOO is ON and WITH_BAR turned OFF"
|
|
|
- )
|
|
|
-
|
|
|
- Example for setting feature info depending on a full condition syntax:
|
|
|
-
|
|
|
- Unlike semicolon-separated list of conditions, this enables using entire
|
|
|
- condition syntax as being the ``if`` clause argument, such as grouping
|
|
|
- conditions with parens and similar.
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- option(WITH_FOO "Help for foo" ON)
|
|
|
- option(WITH_BAR "Help for bar" ON)
|
|
|
- option(WITH_BAZ "Help for baz" OFF)
|
|
|
- add_feature_info(
|
|
|
- FooBarBaz
|
|
|
- "WITH_FOO AND (WITH_BAR OR WITH_BAZ)"
|
|
|
- "this feature is enabled when the entire condition is true"
|
|
|
- )
|
|
|
-#]=======================================================================]
|
|
|
function(ADD_FEATURE_INFO _name _depends _desc)
|
|
|
cmake_policy(GET CMP0183 _CDO_CMP0183
|
|
|
PARENT_SCOPE # undocumented, do not use outside of CMake
|
|
@@ -749,34 +972,8 @@ function(ADD_FEATURE_INFO _name _depends _desc)
|
|
|
unset(_CDO_CMP0183)
|
|
|
endfunction()
|
|
|
|
|
|
-
|
|
|
# The stuff below is only kept for compatibility
|
|
|
|
|
|
-#[=======================================================================[.rst:
|
|
|
-Deprecated Functions
|
|
|
-^^^^^^^^^^^^^^^^^^^^
|
|
|
-
|
|
|
-The following legacy and deprecated functions are provided for backward
|
|
|
-compatibility with previous CMake versions:
|
|
|
-
|
|
|
-.. command:: set_package_info
|
|
|
-
|
|
|
- .. deprecated:: 3.8
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- set_package_info(<name> <description> [ <url> [<purpose>] ])
|
|
|
-
|
|
|
- Set up information about the package ``<name>``, which can then be displayed
|
|
|
- via :command:`feature_summary()`. This can be done either directly in the
|
|
|
- :ref:`Find module <Find Modules>` or in the project which uses the
|
|
|
- ``FeatureSummary`` module after the :command:`find_package()` call. The
|
|
|
- features for which information can be set are added automatically by the
|
|
|
- ``find_package()`` command.
|
|
|
-
|
|
|
- This function is deprecated. Use the :command:`set_package_properties()`, and
|
|
|
- :command:`add_feature_info()` functions instead.
|
|
|
-#]=======================================================================]
|
|
|
function(SET_PACKAGE_INFO _name _desc)
|
|
|
message(DEPRECATION "SET_PACKAGE_INFO is deprecated. Use SET_PACKAGE_PROPERTIES instead.")
|
|
|
unset(_url)
|
|
@@ -796,62 +993,17 @@ function(SET_PACKAGE_INFO _name _desc)
|
|
|
endif()
|
|
|
endfunction()
|
|
|
|
|
|
-#[=======================================================================[.rst:
|
|
|
-.. command:: set_feature_info
|
|
|
-
|
|
|
- .. deprecated:: 3.8
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- set_feature_info(<name> <description> [<url>])
|
|
|
-
|
|
|
- Does the same as:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- set_package_info(<name> <description> [<url>])
|
|
|
-#]=======================================================================]
|
|
|
function(SET_FEATURE_INFO)
|
|
|
message(DEPRECATION "SET_FEATURE_INFO is deprecated. Use ADD_FEATURE_INFO instead.")
|
|
|
set_package_info(${ARGN})
|
|
|
endfunction()
|
|
|
|
|
|
-#[=======================================================================[.rst:
|
|
|
-.. command:: print_enabled_features
|
|
|
-
|
|
|
- .. deprecated:: 3.8
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- print_enabled_features()
|
|
|
-
|
|
|
- Does the same as:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
|
|
|
-#]=======================================================================]
|
|
|
function(PRINT_ENABLED_FEATURES)
|
|
|
message(DEPRECATION "PRINT_ENABLED_FEATURES is deprecated. Use
|
|
|
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION \"Enabled features:\")")
|
|
|
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
|
|
|
endfunction()
|
|
|
|
|
|
-#[=======================================================================[.rst:
|
|
|
-.. command:: print_disabled_features
|
|
|
-
|
|
|
- .. deprecated:: 3.8
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- print_disabled_features()
|
|
|
-
|
|
|
- Does the same as:
|
|
|
-
|
|
|
- .. code-block:: cmake
|
|
|
-
|
|
|
- feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
|
|
|
-#]=======================================================================]
|
|
|
function(PRINT_DISABLED_FEATURES)
|
|
|
message(DEPRECATION "PRINT_DISABLED_FEATURES is deprecated. Use
|
|
|
feature_summary(WHAT DISABLED_FEATURES DESCRIPTION \"Disabled features:\")")
|