mirror of
https://github.com/reactos/CMake.git
synced 2025-03-04 09:57:12 +00:00
Merge topic 'FeatureSummary_enhancement'
560574b0 FeatureSummary: Update release notes 3cfde818 FeatureSummary: Refactor to use global properties for package types f0165eb6 FeatureSummary: Allow lists of dependencies in ADD_FEATURE_INFO 9da7bf08 FeatureSummary: Add QUIET_ON_EMPTY option to feature_summary 4cf4aceb FeatureSummary: Add unit tests 614a97a5 FeatureSummary: Do not force OPTIONAL type in SET_PACKAGE_PROPERTIES 65a0bfd8 FeatureSummary: Add deprecation warnings to deprecated commands 4da3cae9 FeatureSummary: Clean printed output
This commit is contained in:
commit
8df12fc9d4
22
Help/release/dev/FeatureSummary_enhancement.rst
Normal file
22
Help/release/dev/FeatureSummary_enhancement.rst
Normal file
@ -0,0 +1,22 @@
|
||||
FeatureSummary_enhancement
|
||||
--------------------------
|
||||
|
||||
* The :command:`set_package_info`, :command:`set_feature_info`,
|
||||
:command:`print_enabled_features` and :command:`print_disabled_features`
|
||||
commands from the the :module:`FeatureSummary` module are now deprecated.
|
||||
|
||||
* The :command:`set_package_properties` command no longer forces the package
|
||||
type to ``OPTIONAL`` when the type is not explicitly set.
|
||||
|
||||
* The :command:`feature_summary` command in the :module:`FeatureSummary` module
|
||||
accepts the new ``QUIET_ON_EMPTY`` option that will suppresses the output when
|
||||
the list of packages that belong to the selected category is empty.
|
||||
|
||||
* The :command:`add_feature_info` in the :module:`FeatureSummary` module learned
|
||||
to accept lists of dependencies for deciding whether a feature is enabled or
|
||||
not.
|
||||
|
||||
* The package types accepted by the the :module:`FeatureSummary` module can now
|
||||
be tweaked by changing the :variable:`FeatureSummary_PKG_TYPES`,
|
||||
:variable:`FeatureSummary_REQUIRED_PKG_TYPES` and
|
||||
:variable:`FeatureSummary_DEFAULT_PKG_TYPE` global properties.
|
@ -14,30 +14,93 @@ packages and/or feature for a build tree such as::
|
||||
LibXml2 (required version >= 2.4), XML processing lib, <http://xmlsoft.org>
|
||||
* Enables HTML-import in MyWordProcessor
|
||||
* Enables odt-export in MyWordProcessor
|
||||
PNG , A PNG image library. , <http://www.libpng.org/pub/png/>
|
||||
PNG, A PNG image library., <http://www.libpng.org/pub/png/>
|
||||
* Enables saving screenshots
|
||||
-- The following OPTIONAL packages have not been found:
|
||||
Lua51 , The Lua scripting language. , <http://www.lua.org>
|
||||
Lua51, The Lua scripting language., <http://www.lua.org>
|
||||
* Enables macros in MyWordProcessor
|
||||
Foo , Foo provides cool stuff.
|
||||
Foo, Foo provides cool stuff.
|
||||
|
||||
Global Properties
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. variable:: FeatureSummary_PKG_TYPES
|
||||
|
||||
The global property :variable:`FeatureSummary_PKG_TYPES` defines the type of
|
||||
packages used by `FeatureSummary`.
|
||||
|
||||
The order in this list is important, the first package type in the list is the
|
||||
least important, the last is the most important. the of a package can only be
|
||||
changed to higher types.
|
||||
|
||||
The default package types are , ``RUNTIME``, ``OPTIONAL``, ``RECOMMENDED`` and
|
||||
``REQUIRED``, and their importance is
|
||||
``RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED``.
|
||||
|
||||
|
||||
.. variable:: FeatureSummary_REQUIRED_PKG_TYPES
|
||||
|
||||
The global property :variable:`FeatureSummary_REQUIRED_PKG_TYPES` defines which
|
||||
package types are required.
|
||||
|
||||
If one or more package in this categories has not been found, CMake will abort
|
||||
when calling :cmd;`feature_summary` with the
|
||||
'FATAL_ON_MISSING_REQUIRED_PACKAGES' option enabled.
|
||||
|
||||
The default value for this global property is ``REQUIRED``.
|
||||
|
||||
|
||||
.. variable:: FeatureSummary_DEFAULT_PKG_TYPE
|
||||
|
||||
The global property :variable:`FeatureSummary_DEFAULT_PKG_TYPE` defines which
|
||||
package type is the default one.
|
||||
When calling :cmd;`feature_summary`, if the user did not set the package type
|
||||
explicitly, the package will be assigned to this category.
|
||||
|
||||
This value must be one of the types defined in the
|
||||
:variable:`FeatureSummary_PKG_TYPES` global property unless the package type
|
||||
is set for all the packages.
|
||||
|
||||
The default value for this global property is ``OPTIONAL``.
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
get_property(_fsPkgTypeIsSet GLOBAL PROPERTY FeatureSummary_PKG_TYPES SET)
|
||||
if(NOT _fsPkgTypeIsSet)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_PKG_TYPES RUNTIME OPTIONAL RECOMMENDED REQUIRED)
|
||||
endif()
|
||||
|
||||
get_property(_fsReqPkgTypesIsSet GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES SET)
|
||||
if(NOT _fsReqPkgTypesIsSet)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES REQUIRED)
|
||||
endif()
|
||||
|
||||
get_property(_fsDefaultPkgTypeIsSet GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE SET)
|
||||
if(NOT _fsDefaultPkgTypeIsSet)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE OPTIONAL)
|
||||
endif()
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
|
||||
Functions
|
||||
^^^^^^^^^
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
include(CMakeParseArguments)
|
||||
|
||||
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)
|
||||
|
||||
set(_type "ANY")
|
||||
if("${_property}" MATCHES "REQUIRED_")
|
||||
set(_type "REQUIRED")
|
||||
elseif("${_property}" MATCHES "RECOMMENDED_")
|
||||
set(_type "RECOMMENDED")
|
||||
elseif("${_property}" MATCHES "RUNTIME_")
|
||||
set(_type "RUNTIME")
|
||||
elseif("${_property}" MATCHES "OPTIONAL_")
|
||||
set(_type "OPTIONAL")
|
||||
endif()
|
||||
foreach(_fsPkgType ${_fsPkgTypes})
|
||||
if("${_property}" MATCHES "${_fsPkgType}_PACKAGES_(NOT_)?FOUND")
|
||||
set(_type "${_fsPkgType}")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if("${_property}" MATCHES "PACKAGES_FOUND")
|
||||
set(_property "PACKAGES_FOUND")
|
||||
@ -57,15 +120,30 @@ function(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
|
||||
# does this package belong to the type we currently want to list ?
|
||||
get_property(_currentType GLOBAL PROPERTY _CMAKE_${_currentFeature}_TYPE)
|
||||
if(NOT _currentType)
|
||||
set(_currentType OPTIONAL)
|
||||
list(FIND _fsPkgTypes "${_fsDefaultPkgType}" _defaultInPkgTypes)
|
||||
if("${_defaultInPkgTypes}" STREQUAL "-1")
|
||||
string(REGEX REPLACE ";([^;]+)$" " and \\1" _fsPkgTypes_msg "${_fsPkgTypes}")
|
||||
string(REPLACE ";" ", " _fsPkgTypes_msg "${_fsPkgTypes_msg}")
|
||||
message(FATAL_ERROR "Bad package property type ${_fsDefaultPkgType} used in global property FeatureSummary_DEFAULT_PKG_TYPE. "
|
||||
"Valid types are ${_fsPkgTypes_msg}. "
|
||||
"Either update FeatureSummary_DEFAULT_PKG_TYPE or add ${_fsDefaultPkgType} to the FeatureSummary_PKG_TYPES global property.")
|
||||
endif()
|
||||
set(_currentType ${_fsDefaultPkgType})
|
||||
endif()
|
||||
|
||||
if("${_type}" STREQUAL ANY OR "${_type}" STREQUAL "${_currentType}")
|
||||
|
||||
# check whether the current feature/package should be in the output depending on whether it was QUIET or not
|
||||
set(includeThisOne TRUE)
|
||||
set(_required FALSE)
|
||||
# skip QUIET packages, except if they are REQUIRED or INCLUDE_QUIET_PACKAGES has been set
|
||||
if((NOT "${_currentType}" STREQUAL "REQUIRED") AND NOT _includeQuiet)
|
||||
get_property(_fsReqPkgTypes GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES)
|
||||
foreach(_fsReqPkgType ${_fsReqPkgTypes})
|
||||
if("${_currentType}" STREQUAL "${_fsReqPkgType}")
|
||||
set(_required TRUE)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
if(NOT _required AND NOT _includeQuiet)
|
||||
get_property(_isQuiet GLOBAL PROPERTY _CMAKE_${_currentFeature}_QUIET)
|
||||
if(_isQuiet)
|
||||
set(includeThisOne FALSE)
|
||||
@ -87,11 +165,11 @@ function(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
|
||||
endif()
|
||||
get_property(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_DESCRIPTION)
|
||||
if(_info)
|
||||
string(APPEND _currentFeatureText " , ${_info}")
|
||||
string(APPEND _currentFeatureText ", ${_info}")
|
||||
endif()
|
||||
get_property(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_URL)
|
||||
if(_info)
|
||||
string(APPEND _currentFeatureText " , <${_info}>")
|
||||
string(APPEND _currentFeatureText ", <${_info}>")
|
||||
endif()
|
||||
|
||||
get_property(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_PURPOSE)
|
||||
@ -119,6 +197,7 @@ endfunction()
|
||||
[INCLUDE_QUIET_PACKAGES]
|
||||
[FATAL_ON_MISSING_REQUIRED_PACKAGES]
|
||||
[DESCRIPTION "Found packages:"]
|
||||
[QUIET_ON_EMPTY]
|
||||
WHAT (ALL | PACKAGES_FOUND | PACKAGES_NOT_FOUND
|
||||
| ENABLED_FEATURES | DISABLED_FEATURES)
|
||||
)
|
||||
@ -143,22 +222,15 @@ endfunction()
|
||||
the list of all packages which have been found
|
||||
``PACKAGES_NOT_FOUND``
|
||||
the list of all packages which have not been found
|
||||
``OPTIONAL_PACKAGES_FOUND``
|
||||
only those packages which have been found which have the type OPTIONAL
|
||||
``OPTIONAL_PACKAGES_NOT_FOUND``
|
||||
only those packages which have not been found which have the type OPTIONAL
|
||||
``RECOMMENDED_PACKAGES_FOUND``
|
||||
only those packages which have been found which have the type RECOMMENDED
|
||||
``RECOMMENDED_PACKAGES_NOT_FOUND``
|
||||
only those packages which have not been found which have the type RECOMMENDED
|
||||
``REQUIRED_PACKAGES_FOUND``
|
||||
only those packages which have been found which have the type REQUIRED
|
||||
``REQUIRED_PACKAGES_NOT_FOUND``
|
||||
only those packages which have not been found which have the type REQUIRED
|
||||
``RUNTIME_PACKAGES_FOUND``
|
||||
only those packages which have been found which have the type RUNTIME
|
||||
``RUNTIME_PACKAGES_NOT_FOUND``
|
||||
only those packages which have not been found which have the type RUNTIME
|
||||
|
||||
For each package type ``<TYPE>`` defined by the
|
||||
:variable:`FeatureSummary_PKG_TYPES` global property, the following
|
||||
information can also be used:
|
||||
|
||||
``<TYPE>_PACKAGES_FOUND``
|
||||
only those packages which have been found which have the type <TYPE>
|
||||
``<TYPE>_PACKAGES_NOT_FOUND``
|
||||
only those packages which have not been found which have the type <TYPE>
|
||||
|
||||
With the exception of the ``ALL`` value, these values can be combined
|
||||
in order to customize the output. For example:
|
||||
@ -177,7 +249,20 @@ endfunction()
|
||||
packages which have been searched with ``find_package(... QUIET)`` will
|
||||
also be listed. By default they are skipped. If
|
||||
``FATAL_ON_MISSING_REQUIRED_PACKAGES`` is given, CMake will abort if a
|
||||
package which is marked as ``REQUIRED`` has not been found.
|
||||
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 default value for the :variable:`FeatureSummary_REQUIRED_PKG_TYPES` global
|
||||
property is ``REQUIRED``.
|
||||
|
||||
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.
|
||||
|
||||
If the ``QUIET_ON_EMPTY`` option is used, if only one type of package was
|
||||
requested, and no packages belonging to that category were found, then no
|
||||
output (including the ``DESCRIPTION``) is printed or added to the ``VAR``
|
||||
variable.
|
||||
|
||||
Example 1, append everything to a file:
|
||||
|
||||
@ -198,11 +283,28 @@ endfunction()
|
||||
DESCRIPTION "Enabled Features:"
|
||||
VAR enabledFeaturesText)
|
||||
message(STATUS "${enabledFeaturesText}")
|
||||
|
||||
Example 3, change default package types 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 INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
set(options APPEND INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES QUIET_ON_EMPTY)
|
||||
set(oneValueArgs FILENAME VAR DESCRIPTION)
|
||||
set(multiValueArgs WHAT)
|
||||
|
||||
@ -219,40 +321,42 @@ function(FEATURE_SUMMARY)
|
||||
set(validWhatParts "ENABLED_FEATURES"
|
||||
"DISABLED_FEATURES"
|
||||
"PACKAGES_FOUND"
|
||||
"PACKAGES_NOT_FOUND"
|
||||
"OPTIONAL_PACKAGES_FOUND"
|
||||
"OPTIONAL_PACKAGES_NOT_FOUND"
|
||||
"RECOMMENDED_PACKAGES_FOUND"
|
||||
"RECOMMENDED_PACKAGES_NOT_FOUND"
|
||||
"REQUIRED_PACKAGES_FOUND"
|
||||
"REQUIRED_PACKAGES_NOT_FOUND"
|
||||
"RUNTIME_PACKAGES_FOUND"
|
||||
"RUNTIME_PACKAGES_NOT_FOUND")
|
||||
"PACKAGES_NOT_FOUND")
|
||||
|
||||
get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
|
||||
get_property(_fsReqPkgTypes GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES)
|
||||
foreach(_fsPkgType ${_fsPkgTypes})
|
||||
list(APPEND validWhatParts "${_fsPkgType}_PACKAGES_FOUND"
|
||||
"${_fsPkgType}_PACKAGES_NOT_FOUND")
|
||||
endforeach()
|
||||
|
||||
list(FIND validWhatParts "${_FS_WHAT}" indexInList)
|
||||
if(NOT "${indexInList}" STREQUAL "-1")
|
||||
_FS_GET_FEATURE_SUMMARY( ${_FS_WHAT} _featureSummary ${_FS_INCLUDE_QUIET_PACKAGES} )
|
||||
set(_fullText "${_FS_DESCRIPTION}${_featureSummary}\n")
|
||||
if (("${_FS_WHAT}" STREQUAL "REQUIRED_PACKAGES_NOT_FOUND") AND _featureSummary)
|
||||
set(requiredPackagesNotFound TRUE)
|
||||
if(_featureSummary OR NOT _FS_QUIET_ON_EMPTY)
|
||||
set(_fullText "${_FS_DESCRIPTION}${_featureSummary}\n")
|
||||
endif()
|
||||
|
||||
if(_featureSummary)
|
||||
foreach(_fsReqPkgType ${_fsReqPkgTypes})
|
||||
if("${_FS_WHAT}" STREQUAL "${_fsReqPkgType}_PACKAGES_NOT_FOUND")
|
||||
set(requiredPackagesNotFound TRUE)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
else()
|
||||
if("${_FS_WHAT}" STREQUAL "ALL")
|
||||
|
||||
set(allWhatParts "ENABLED_FEATURES"
|
||||
"RUNTIME_PACKAGES_FOUND"
|
||||
"OPTIONAL_PACKAGES_FOUND"
|
||||
"RECOMMENDED_PACKAGES_FOUND"
|
||||
"REQUIRED_PACKAGES_FOUND"
|
||||
|
||||
"DISABLED_FEATURES"
|
||||
"RUNTIME_PACKAGES_NOT_FOUND"
|
||||
"OPTIONAL_PACKAGES_NOT_FOUND"
|
||||
"RECOMMENDED_PACKAGES_NOT_FOUND"
|
||||
"REQUIRED_PACKAGES_NOT_FOUND"
|
||||
)
|
||||
|
||||
set(allWhatParts "ENABLED_FEATURES")
|
||||
foreach(_fsPkgType ${_fsPkgTypes})
|
||||
list(APPEND allWhatParts "${_fsPkgType}_PACKAGES_FOUND")
|
||||
endforeach()
|
||||
list(APPEND allWhatParts "DISABLED_FEATURES")
|
||||
foreach(_fsPkgType ${_fsPkgTypes})
|
||||
list(APPEND allWhatParts "${_fsPkgType}_PACKAGES_NOT_FOUND")
|
||||
endforeach()
|
||||
else()
|
||||
set(allWhatParts)
|
||||
foreach(part ${_FS_WHAT})
|
||||
@ -273,45 +377,49 @@ function(FEATURE_SUMMARY)
|
||||
set(title_DISABLED_FEATURES "The following features have been disabled:")
|
||||
set(title_PACKAGES_FOUND "The following packages have been found:")
|
||||
set(title_PACKAGES_NOT_FOUND "The following packages have not been found:")
|
||||
set(title_OPTIONAL_PACKAGES_FOUND "The following OPTIONAL packages have been found:")
|
||||
set(title_OPTIONAL_PACKAGES_NOT_FOUND "The following OPTIONAL packages have not been found:")
|
||||
set(title_RECOMMENDED_PACKAGES_FOUND "The following RECOMMENDED packages have been found:")
|
||||
set(title_RECOMMENDED_PACKAGES_NOT_FOUND "The following RECOMMENDED packages have not been found:")
|
||||
set(title_REQUIRED_PACKAGES_FOUND "The following REQUIRED packages have been found:")
|
||||
set(title_REQUIRED_PACKAGES_NOT_FOUND "The following REQUIRED packages have not been found:")
|
||||
set(title_RUNTIME_PACKAGES_FOUND "The following RUNTIME packages have been found:")
|
||||
set(title_RUNTIME_PACKAGES_NOT_FOUND "The following RUNTIME packages have not been found:")
|
||||
foreach(_fsPkgType ${_fsPkgTypes})
|
||||
set(title_${_fsPkgType}_PACKAGES_FOUND "The following ${_fsPkgType} packages have been found:")
|
||||
set(title_${_fsPkgType}_PACKAGES_NOT_FOUND "The following ${_fsPkgType} packages have not been found:")
|
||||
endforeach()
|
||||
|
||||
set(_fullText "${_FS_DESCRIPTION}")
|
||||
foreach(part ${allWhatParts})
|
||||
set(_tmp)
|
||||
_FS_GET_FEATURE_SUMMARY( ${part} _tmp ${_FS_INCLUDE_QUIET_PACKAGES})
|
||||
if(_tmp)
|
||||
string(APPEND _fullText "\n-- ${title_${part}}\n${_tmp}\n")
|
||||
if("${part}" STREQUAL "REQUIRED_PACKAGES_NOT_FOUND")
|
||||
set(requiredPackagesNotFound TRUE)
|
||||
if(_fullText)
|
||||
string(APPEND _fullText "\n-- ")
|
||||
endif()
|
||||
string(APPEND _fullText "${title_${part}}\n${_tmp}\n")
|
||||
foreach(_fsReqPkgType ${_fsReqPkgTypes})
|
||||
if("${part}" STREQUAL "${_fsReqPkgType}_PACKAGES_NOT_FOUND")
|
||||
set(requiredPackagesNotFound TRUE)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(_FS_FILENAME)
|
||||
if(_FS_APPEND)
|
||||
file(APPEND "${_FS_FILENAME}" "${_fullText}")
|
||||
if(_fullText OR NOT _FS_QUIET_ON_EMPTY)
|
||||
if(_FS_FILENAME)
|
||||
if(_FS_APPEND)
|
||||
file(APPEND "${_FS_FILENAME}" "${_fullText}")
|
||||
else()
|
||||
file(WRITE "${_FS_FILENAME}" "${_fullText}")
|
||||
endif()
|
||||
|
||||
else()
|
||||
file(WRITE "${_FS_FILENAME}" "${_fullText}")
|
||||
if(NOT _FS_VAR)
|
||||
message(STATUS "${_fullText}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
else()
|
||||
if(NOT _FS_VAR)
|
||||
message(STATUS "${_fullText}")
|
||||
if(_FS_VAR)
|
||||
set(${_FS_VAR} "${_fullText}" PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(_FS_VAR)
|
||||
set(${_FS_VAR} "${_fullText}" PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
if(requiredPackagesNotFound AND _FS_FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
message(FATAL_ERROR "feature_summary() Error: REQUIRED package(s) are missing, aborting CMake run.")
|
||||
endif()
|
||||
@ -362,7 +470,8 @@ endfunction()
|
||||
TYPEs (``RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED``), lower TYPEs are
|
||||
ignored. The ``TYPE`` property is project-specific, so it cannot be set
|
||||
by the Find-module, but must be set in the project.
|
||||
|
||||
Type accepted can be changed by setting the
|
||||
:variable:`FeatureSummary_PKG_TYPES` global property.
|
||||
|
||||
``PURPOSE <purpose>``
|
||||
This describes which features this package enables in the
|
||||
@ -435,25 +544,28 @@ function(SET_PACKAGE_PROPERTIES _name _props)
|
||||
set_property(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_SPP_PURPOSE}" )
|
||||
endif()
|
||||
|
||||
get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
|
||||
get_property(_fsDefaultPkgType GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE)
|
||||
|
||||
# handle the TYPE
|
||||
if(NOT _SPP_TYPE)
|
||||
set(_SPP_TYPE OPTIONAL)
|
||||
endif()
|
||||
if(DEFINED _SPP_TYPE)
|
||||
# Supported types are listed in FeatureSummary_PKG_TYPES according to their priority
|
||||
get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
|
||||
list(FIND _fsPkgTypes ${_SPP_TYPE} _typeIndexInList)
|
||||
if("${_typeIndexInList}" STREQUAL "-1" )
|
||||
string(REGEX REPLACE ";([^;]+)$" " and \\1" _fsPkgTypes_msg "${_fsPkgTypes}")
|
||||
string(REPLACE ";" ", " _fsPkgTypes_msg "${_fsPkgTypes_msg}")
|
||||
message(FATAL_ERROR "Bad package property type ${_SPP_TYPE} used in SET_PACKAGE_PROPERTIES(). "
|
||||
"Valid types are ${_fsPkgTypes_msg}." )
|
||||
endif()
|
||||
|
||||
# List the supported types, according to their priority
|
||||
set(validTypes "RUNTIME" "OPTIONAL" "RECOMMENDED" "REQUIRED" )
|
||||
list(FIND validTypes ${_SPP_TYPE} _typeIndexInList)
|
||||
if("${_typeIndexInList}" STREQUAL "-1" )
|
||||
message(FATAL_ERROR "Bad package property type ${_SPP_TYPE} used in SET_PACKAGE_PROPERTIES(). "
|
||||
"Valid types are OPTIONAL, RECOMMENDED, REQUIRED and RUNTIME." )
|
||||
endif()
|
||||
get_property(_previousType GLOBAL PROPERTY _CMAKE_${_name}_TYPE)
|
||||
list(FIND _fsPkgTypes "${_previousType}" _prevTypeIndexInList)
|
||||
|
||||
get_property(_previousType GLOBAL PROPERTY _CMAKE_${_name}_TYPE)
|
||||
list(FIND validTypes "${_previousType}" _prevTypeIndexInList)
|
||||
|
||||
# make sure a previously set TYPE is not overridden with a lower new TYPE:
|
||||
if("${_typeIndexInList}" GREATER "${_prevTypeIndexInList}")
|
||||
set_property(GLOBAL PROPERTY _CMAKE_${_name}_TYPE "${_SPP_TYPE}" )
|
||||
# make sure a previously set TYPE is not overridden with a lower new TYPE:
|
||||
if("${_typeIndexInList}" GREATER "${_prevTypeIndexInList}")
|
||||
set_property(GLOBAL PROPERTY _CMAKE_${_name}_TYPE "${_SPP_TYPE}" )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
@ -466,7 +578,8 @@ endfunction()
|
||||
add_feature_info(<name> <enabled> <description>)
|
||||
|
||||
Use this macro to add information about a feature with the given ``<name>``.
|
||||
``<enabled>`` contains whether this feature is enabled or not.
|
||||
``<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 ``feature_summary()`` for ``ENABLED_FEATURES`` and
|
||||
``DISABLED_FEATURES`` respectively.
|
||||
@ -478,7 +591,16 @@ endfunction()
|
||||
option(WITH_FOO "Help for foo" ON)
|
||||
add_feature_info(Foo WITH_FOO "The Foo feature provides very cool stuff.")
|
||||
#]=======================================================================]
|
||||
function(ADD_FEATURE_INFO _name _enabled _desc)
|
||||
function(ADD_FEATURE_INFO _name _depends _desc)
|
||||
set(_enabled 1)
|
||||
foreach(_d ${_depends})
|
||||
string(REGEX REPLACE " +" ";" _d "${_d}")
|
||||
if(${_d})
|
||||
else()
|
||||
set(_enabled 0)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
if (${_enabled})
|
||||
set_property(GLOBAL APPEND PROPERTY ENABLED_FEATURES "${_name}")
|
||||
else ()
|
||||
@ -511,6 +633,7 @@ CMake versions:
|
||||
can be set are added automatically by the ``find_package()`` command.
|
||||
#]=======================================================================]
|
||||
function(SET_PACKAGE_INFO _name _desc)
|
||||
message(DEPRECATION "SET_PACKAGE_INFO is deprecated. Use SET_PACKAGE_PROPERTIES instead.")
|
||||
unset(_url)
|
||||
unset(_purpose)
|
||||
if(ARGC GREATER 2)
|
||||
@ -540,6 +663,7 @@ endfunction()
|
||||
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()
|
||||
|
||||
@ -557,6 +681,8 @@ endfunction()
|
||||
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()
|
||||
|
||||
@ -574,5 +700,7 @@ endfunction()
|
||||
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:\")")
|
||||
FEATURE_SUMMARY(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
|
||||
endfunction()
|
||||
|
@ -0,0 +1 @@
|
||||
1
|
@ -0,0 +1,9 @@
|
||||
CMake Error at .*/Modules/FeatureSummary\.cmake:[0-9]+. \(message\):
|
||||
Bad package property type OPTIONAL used in global property
|
||||
FeatureSummary_DEFAULT_PKG_TYPE. Valid types are TYPE1, TYPE2 and TYPE3.
|
||||
Either update FeatureSummary_DEFAULT_PKG_TYPE or add OPTIONAL to the
|
||||
FeatureSummary_PKG_TYPES global property.
|
||||
Call Stack \(most recent call first\):
|
||||
.*/Modules/FeatureSummary\.cmake:[0-9]+. \(_FS_GET_FEATURE_SUMMARY\)
|
||||
FeatureSummaryCustomBadDefault.cmake:[0-9]+ \(feature_summary\)
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
@ -0,0 +1,8 @@
|
||||
include(FeatureSummary)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_PKG_TYPES TYPE1 TYPE2 TYPE3)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
find_package(Foo)
|
||||
|
||||
feature_summary(WHAT ALL)
|
@ -0,0 +1 @@
|
||||
1
|
@ -0,0 +1,6 @@
|
||||
CMake Error at .*/Modules/FeatureSummary\.cmake:[0-9]+. \(message\):
|
||||
feature_summary\(\) Error: REQUIRED package\(s\) are missing, aborting CMake
|
||||
run.
|
||||
Call Stack \(most recent call first\):
|
||||
FeatureSummaryCustomRequired.cmake:[0-9]+ \(feature_summary\)
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
@ -0,0 +1,17 @@
|
||||
-- The following TYPE3 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE2 packages have not been found:
|
||||
|
||||
\* Bar
|
||||
|
||||
-- The following TYPE3 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE3 packages have not been found:
|
||||
|
||||
\* Bar
|
||||
|
||||
-- Configuring incomplete, errors occurred!
|
@ -0,0 +1,16 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_PKG_TYPES TYPE1 TYPE2 TYPE3)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES TYPE3)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE TYPE2)
|
||||
|
||||
find_package(Foo)
|
||||
find_package(Bar)
|
||||
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE3)
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
set_package_properties(Bar PROPERTIES TYPE TYPE3)
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
@ -0,0 +1 @@
|
||||
1
|
@ -0,0 +1,6 @@
|
||||
CMake Error at .*/Modules/FeatureSummary\.cmake:[0-9]+. \(message\):
|
||||
feature_summary\(\) Error: REQUIRED package\(s\) are missing, aborting CMake
|
||||
run.
|
||||
Call Stack \(most recent call first\):
|
||||
FeatureSummaryCustomRequiredListA.cmake:[0-9]+ \(feature_summary\)
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
@ -0,0 +1,17 @@
|
||||
-- The following TYPE2 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE1 packages have not been found:
|
||||
|
||||
\* Bar
|
||||
|
||||
-- The following TYPE2 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE2 packages have not been found:
|
||||
|
||||
\* Bar
|
||||
|
||||
-- Configuring incomplete, errors occurred!
|
@ -0,0 +1,16 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_PKG_TYPES TYPE1 TYPE2 TYPE3)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES TYPE2 TYPE3)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE TYPE1)
|
||||
|
||||
find_package(Foo)
|
||||
find_package(Bar)
|
||||
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE2)
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
set_package_properties(Bar PROPERTIES TYPE TYPE2)
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
@ -0,0 +1 @@
|
||||
1
|
@ -0,0 +1,6 @@
|
||||
CMake Error at .*/Modules/FeatureSummary\.cmake:[0-9]+. \(message\):
|
||||
feature_summary\(\) Error: REQUIRED package\(s\) are missing, aborting CMake
|
||||
run.
|
||||
Call Stack \(most recent call first\):
|
||||
FeatureSummaryCustomRequiredListB.cmake:[0-9]+ \(feature_summary\)
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
@ -0,0 +1,17 @@
|
||||
-- The following TYPE3 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE1 packages have not been found:
|
||||
|
||||
\* Bar
|
||||
|
||||
-- The following TYPE3 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE3 packages have not been found:
|
||||
|
||||
\* Bar
|
||||
|
||||
-- Configuring incomplete, errors occurred!
|
@ -0,0 +1,16 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_PKG_TYPES TYPE1 TYPE2 TYPE3)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES TYPE2 TYPE3)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE TYPE1)
|
||||
|
||||
find_package(Foo)
|
||||
find_package(Bar)
|
||||
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE3)
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
set_package_properties(Bar PROPERTIES TYPE TYPE3)
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
@ -0,0 +1,29 @@
|
||||
-- The following TYPE2 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE1 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE2 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE2 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE3 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE3 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following TYPE3 packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- Configuring done
|
@ -0,0 +1,36 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_PKG_TYPES TYPE1 TYPE2 TYPE3)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES TYPE3)
|
||||
set_property(GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE TYPE2)
|
||||
|
||||
find_package(Foo)
|
||||
|
||||
# Type not set => TYPE2
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# TYPE1 > not set => TYPE1
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE1)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# TYPE2 > TYPE1 => TYPE2
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE2)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# TYPE1 < TYPE2 => TYPE2
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE2)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# TYPE3 > TYPE2 => TYPE3
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE3)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# TYPE2 < TYPE3 => TYPE3
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE2)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# TYPE1 < TYPE3 => TYPE3
|
||||
set_package_properties(Foo PROPERTIES TYPE TYPE1)
|
||||
feature_summary(WHAT ALL)
|
@ -0,0 +1 @@
|
||||
1
|
@ -0,0 +1,6 @@
|
||||
CMake Error at .*/Modules/FeatureSummary\.cmake:[0-9]+. \(message\):
|
||||
feature_summary\(\) Error: REQUIRED package\(s\) are missing, aborting CMake
|
||||
run.
|
||||
Call Stack \(most recent call first\):
|
||||
FeatureSummaryFatalOnMissingRequiredPackages.cmake:[0-9]+ \(feature_summary\)
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
@ -0,0 +1,17 @@
|
||||
-- The following REQUIRED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following OPTIONAL packages have not been found:
|
||||
|
||||
\* Bar
|
||||
|
||||
-- The following REQUIRED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following REQUIRED packages have not been found:
|
||||
|
||||
\* Bar
|
||||
|
||||
-- Configuring incomplete, errors occurred!
|
@ -0,0 +1,12 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
find_package(Foo)
|
||||
find_package(Bar)
|
||||
|
||||
set_package_properties(Foo PROPERTIES TYPE REQUIRED)
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
set_package_properties(Bar PROPERTIES TYPE REQUIRED)
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
@ -0,0 +1,14 @@
|
||||
-- The following OPTIONAL packages have not been found:
|
||||
|
||||
\* Baz
|
||||
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following OPTIONAL packages have not been found:
|
||||
|
||||
\* Bar
|
||||
\* Baz
|
||||
|
||||
-- Configuring done
|
@ -0,0 +1,11 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
find_package(Foo QUIET)
|
||||
find_package(Bar QUIET)
|
||||
find_package(Baz)
|
||||
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES)
|
@ -0,0 +1,10 @@
|
||||
-- The following features have been enabled:
|
||||
|
||||
\* Bar, Bar\.
|
||||
\* Baz, Baz\.
|
||||
\* Goo, Goo\.
|
||||
|
||||
-- The following features have been disabled:
|
||||
|
||||
\* Foo, Foo\.
|
||||
\* Fez, Fez\.
|
@ -0,0 +1,12 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
set(WITH_FOO 1)
|
||||
set(WITH_BAR 0)
|
||||
|
||||
add_feature_info(Foo "WITH_FOO;WITH_BAR" "Foo.")
|
||||
add_feature_info(Bar "WITH_FOO;NOT WITH_BAR" "Bar.")
|
||||
add_feature_info(Baz "WITH_FOO AND NOT WITH_BAR" "Baz.")
|
||||
add_feature_info(Goo "WITH_FOO OR WITH_BAR" "Goo.")
|
||||
add_feature_info(Fez "NOT WITH_FOO OR WITH_BAR" "Fez.")
|
||||
|
||||
feature_summary(WHAT ALL)
|
@ -0,0 +1,16 @@
|
||||
The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
Because everyone needs some Foo.
|
||||
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
Because everyone needs some Foo.
|
||||
Because Foo is better than Bar.
|
||||
|
||||
-- Configuring done
|
16
Tests/RunCMake/FeatureSummary/FeatureSummaryPurpose.cmake
Normal file
16
Tests/RunCMake/FeatureSummary/FeatureSummaryPurpose.cmake
Normal file
@ -0,0 +1,16 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
find_package(Foo)
|
||||
|
||||
# Purpose not set
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# Purpose set once
|
||||
set_package_properties(Foo PROPERTIES PURPOSE "Because everyone needs some Foo.")
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# Purpose set twice
|
||||
set_package_properties(Foo PROPERTIES PURPOSE "Because Foo is better than Bar.")
|
||||
feature_summary(WHAT ALL)
|
@ -0,0 +1,5 @@
|
||||
-- Enabled features:
|
||||
\* Foo, Foo\.
|
||||
\* Bar, Bar\.
|
||||
|
||||
-- Configuring done
|
@ -0,0 +1,14 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
set(WITH_FOO 1)
|
||||
set(WITH_BAR 1)
|
||||
|
||||
add_feature_info(Foo WITH_FOO "Foo.")
|
||||
add_feature_info(Bar WITH_BAR "Bar.")
|
||||
|
||||
feature_summary(WHAT ENABLED_FEATURES
|
||||
DESCRIPTION "Enabled features:"
|
||||
QUIET_ON_EMPTY)
|
||||
feature_summary(WHAT DISABLED_FEATURES
|
||||
DESCRIPTION "Disabled features:"
|
||||
QUIET_ON_EMPTY)
|
45
Tests/RunCMake/FeatureSummary/FeatureSummaryTypes-stdout.txt
Normal file
45
Tests/RunCMake/FeatureSummary/FeatureSummaryTypes-stdout.txt
Normal file
@ -0,0 +1,45 @@
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following RUNTIME packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following RECOMMENDED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following RECOMMENDED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following RECOMMENDED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following REQUIRED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following REQUIRED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following REQUIRED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following REQUIRED packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- Configuring done
|
48
Tests/RunCMake/FeatureSummary/FeatureSummaryTypes.cmake
Normal file
48
Tests/RunCMake/FeatureSummary/FeatureSummaryTypes.cmake
Normal file
@ -0,0 +1,48 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
find_package(Foo)
|
||||
|
||||
# Type not set => OPTIONAL
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# RUNTIME > not set => RUNTIME
|
||||
set_package_properties(Foo PROPERTIES TYPE RUNTIME)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# OPTIONAL > RUNTIME => OPTIONAL
|
||||
set_package_properties(Foo PROPERTIES TYPE OPTIONAL)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# RUNTIME < OPTIONAL => OPTIONAL
|
||||
set_package_properties(Foo PROPERTIES TYPE OPTIONAL)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# RECOMMENDED > OPTIONAL => RECOMMENDED
|
||||
set_package_properties(Foo PROPERTIES TYPE RECOMMENDED)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# OPTIONAL < RECOMMENDED => RECOMMENDED
|
||||
set_package_properties(Foo PROPERTIES TYPE OPTIONAL)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# RUNTIME < RECOMMENDED => RECOMMENDED
|
||||
set_package_properties(Foo PROPERTIES TYPE RUNTIME)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# REQUIRED > RECOMMENDED => REQUIRED
|
||||
set_package_properties(Foo PROPERTIES TYPE REQUIRED)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# RECOMMENDED < REQUIRED => REQUIRED
|
||||
set_package_properties(Foo PROPERTIES TYPE RECOMMENDED)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# OPTIONAL < REQUIRED => REQUIRED
|
||||
set_package_properties(Foo PROPERTIES TYPE OPTIONAL)
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# RUNTIME < REQUIRED => REQUIRED
|
||||
set_package_properties(Foo PROPERTIES TYPE RUNTIME)
|
||||
feature_summary(WHAT ALL)
|
@ -0,0 +1,32 @@
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following OPTIONAL packages have not been found:
|
||||
|
||||
\* Bar
|
||||
\* Baz
|
||||
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, The Foo package, <https://foo.example/>
|
||||
|
||||
-- The following OPTIONAL packages have not been found:
|
||||
|
||||
\* Bar, <https://bar.net/>
|
||||
\* Baz, A Baz package
|
||||
|
||||
-- Warning: Property DESCRIPTION for package Foo already set to "The Foo package", overriding it with "A Foo package"
|
||||
-- Warning: Property URL already set to "https://foo.example/", overriding it with "https://foo.net/"
|
||||
-- Warning: Property URL already set to "https://bar.net/", overriding it with "https://bar.example/"
|
||||
-- Warning: Property DESCRIPTION for package Baz already set to "A Baz package", overriding it with "The Baz package"
|
||||
-- The following OPTIONAL packages have been found:
|
||||
|
||||
\* Foo, A Foo package, <https://foo.net/>
|
||||
|
||||
-- The following OPTIONAL packages have not been found:
|
||||
|
||||
\* Bar, The Bar package, <https://bar.example/>
|
||||
\* Baz, The Baz package, <https://baz.example/>
|
||||
|
||||
-- Configuring done
|
@ -0,0 +1,28 @@
|
||||
include(FeatureSummary)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
find_package(Foo) # URL and DESCRIPTION are set in the FindFoo.cmake file
|
||||
find_package(Bar) # URL and DESCRIPTION are not set
|
||||
find_package(Baz) # URL and DESCRIPTION are not set
|
||||
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
set_package_properties(Bar PROPERTIES URL "https://bar.net/") # URL and no DESCRIPTION
|
||||
set_package_properties(Baz PROPERTIES DESCRIPTION "A Baz package") # DESCRIPTION and no URL
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
# Overwrite with the same value (no warning)
|
||||
set_package_properties(Foo PROPERTIES URL "https://foo.example/"
|
||||
DESCRIPTION "The Foo package")
|
||||
set_package_properties(Bar PROPERTIES URL "https://bar.net/")
|
||||
set_package_properties(Baz PROPERTIES DESCRIPTION "A Baz package")
|
||||
|
||||
# Overwrite with different values (warnings)
|
||||
set_package_properties(Foo PROPERTIES URL "https://foo.net/"
|
||||
DESCRIPTION "A Foo package") # Overwrite URL and DESCRIPTION
|
||||
set_package_properties(Bar PROPERTIES URL "https://bar.example/"
|
||||
DESCRIPTION "The Bar package") # Overwrite URL and add DESCRIPTION
|
||||
set_package_properties(Baz PROPERTIES URL "https://baz.example/"
|
||||
DESCRIPTION "The Baz package") # Overwrite URL and add DESCRIPTION
|
||||
feature_summary(WHAT ALL)
|
@ -1,7 +1,7 @@
|
||||
-- The following features have been enabled:
|
||||
|
||||
\* Foo , Foo\.
|
||||
\* Foo, Foo\.
|
||||
|
||||
-- The following features have been disabled:
|
||||
|
||||
\* Bar , Bar\.
|
||||
\* Bar, Bar\.
|
||||
|
@ -1,7 +1,7 @@
|
||||
-- The following features have been disabled:
|
||||
|
||||
\* Bar , Bar\.
|
||||
\* Bar, Bar\.
|
||||
|
||||
-- The following features have been enabled:
|
||||
|
||||
\* Foo , Foo\.
|
||||
\* Foo, Foo\.
|
||||
|
@ -1,4 +1,4 @@
|
||||
--( )
|
||||
\* Foo , Foo decscription\.
|
||||
\* Foo, Foo description\.
|
||||
+
|
||||
--
|
||||
|
@ -2,7 +2,7 @@ include(FeatureSummary)
|
||||
|
||||
set(WITH_FOO 1)
|
||||
|
||||
add_feature_info(Foo WITH_FOO "Foo decscription.")
|
||||
add_feature_info(Foo WITH_FOO "Foo decscription.")
|
||||
add_feature_info(Foo WITH_FOO "Foo description.")
|
||||
add_feature_info(Foo WITH_FOO "Foo description.")
|
||||
|
||||
feature_summary(WHAT ENABLED_FEATURES)
|
||||
|
@ -1 +1 @@
|
||||
\* Foo , Foo\.
|
||||
\* Foo, Foo\.
|
||||
|
2
Tests/RunCMake/FeatureSummary/FindBar.cmake
Normal file
2
Tests/RunCMake/FeatureSummary/FindBar.cmake
Normal file
@ -0,0 +1,2 @@
|
||||
include(FeatureSummary)
|
||||
set(Bar_FOUND 0)
|
2
Tests/RunCMake/FeatureSummary/FindBaz.cmake
Normal file
2
Tests/RunCMake/FeatureSummary/FindBaz.cmake
Normal file
@ -0,0 +1,2 @@
|
||||
include(FeatureSummary)
|
||||
set(Baz_FOUND 0)
|
4
Tests/RunCMake/FeatureSummary/FindFoo.cmake
Normal file
4
Tests/RunCMake/FeatureSummary/FindFoo.cmake
Normal file
@ -0,0 +1,4 @@
|
||||
include(FeatureSummary)
|
||||
set_package_properties(Foo PROPERTIES URL "https://foo.example/"
|
||||
DESCRIPTION "The Foo package")
|
||||
set(Foo_FOUND 1)
|
@ -7,3 +7,15 @@ run_cmake(FeatureSummaryWhatList)
|
||||
run_cmake(FeatureSummaryWhatListUnknown)
|
||||
run_cmake(FeatureSummaryWhatListAll)
|
||||
run_cmake(FeatureSummaryWhatOnce)
|
||||
run_cmake(FeatureSummaryPurpose)
|
||||
run_cmake(FeatureSummaryURLDescription)
|
||||
run_cmake(FeatureSummaryTypes)
|
||||
run_cmake(FeatureSummaryFatalOnMissingRequiredPackages)
|
||||
run_cmake(FeatureSummaryIncludeQuietPackages)
|
||||
run_cmake(FeatureSummaryQuietOnEmpty)
|
||||
run_cmake(FeatureSummaryMultipleDepends)
|
||||
run_cmake(FeatureSummaryCustomTypes)
|
||||
run_cmake(FeatureSummaryCustomBadDefault)
|
||||
run_cmake(FeatureSummaryCustomRequired)
|
||||
run_cmake(FeatureSummaryCustomRequiredListA)
|
||||
run_cmake(FeatureSummaryCustomRequiredListB)
|
||||
|
Loading…
x
Reference in New Issue
Block a user