FeatureSummary.cmake 5.25 KB
Newer Older
Alexander Neundorf's avatar
 
Alexander Neundorf committed
1 2 3 4
# - Macros for generating a summary of enabled/disabled features
#
# PRINT_ENABLED_FEATURES()
#   Print a summary of all enabled features. By default all successfull
5 6 7 8
#   FIND_PACKAGE() calls will appear here, except the ones which used the
#   QUIET keyword. Additional features can be added by appending an entry
#   to the global ENABLED_FEATURES property. If SET_FEATURE_INFO() is
#   used for that feature, the output will be much more informative.
Alexander Neundorf's avatar
 
Alexander Neundorf committed
9 10
#
# PRINT_DISABLED_FEATURES()
11
#   Same as PRINT_ENABLED_FEATURES(), but for disabled features. It can
12
#   be extended the same way by adding to the global property
13
#   DISABLED_FEATURES.
Alexander Neundorf's avatar
 
Alexander Neundorf committed
14 15 16 17
#
# SET_FEATURE_INFO(NAME DESCRIPTION [URL [COMMENT] ] )
#    Use this macro to set up information about the named feature, which will
#    then be displayed by PRINT_ENABLED/DISABLED_FEATURES().
18
#    Example: SET_FEATURE_INFO(LibXml2 "XML processing library."
19
#    "http://xmlsoft.org/")
Alexander Neundorf's avatar
 
Alexander Neundorf committed
20 21
#

22 23 24 25 26 27 28 29 30 31
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
32
# (To distribute this file outside of CMake, substitute the full
33
#  License text for the above reference.)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
34

35 36
INCLUDE(CMakeParseArguments)

37
FUNCTION(SET_FEATURE_INFO _name _desc)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
38 39
  SET(_url "${ARGV2}")
  SET(_comment "${ARGV3}")
40
  SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" )
Alexander Neundorf's avatar
 
Alexander Neundorf committed
41
  IF(_url MATCHES ".+")
42
    SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_url}" )
Alexander Neundorf's avatar
 
Alexander Neundorf committed
43 44
  ENDIF(_url MATCHES ".+")
  IF(_comment MATCHES ".+")
45
    SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_COMMENT "${_comment}" )
Alexander Neundorf's avatar
 
Alexander Neundorf committed
46
  ENDIF(_comment MATCHES ".+")
47
ENDFUNCTION(SET_FEATURE_INFO)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
48 49


50 51
FUNCTION(_FS_GET_FEATURE_SUMMARY _property _var)
  SET(_currentFeatureText "")
52
  GET_PROPERTY(_EnabledFeatures  GLOBAL PROPERTY ${_property})
Alexander Neundorf's avatar
 
Alexander Neundorf committed
53 54
  FOREACH(_currentFeature ${_EnabledFeatures})
    SET(_currentFeatureText "${_currentFeatureText}\n${_currentFeature}")
55 56 57 58 59
    GET_PROPERTY(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_REQUIRED_VERSION)
    IF(_info)
      SET(_currentFeatureText "${_currentFeatureText} (required version ${_info})")
    ENDIF(_info)
    GET_PROPERTY(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_DESCRIPTION)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
60 61 62
    IF(_info)
      SET(_currentFeatureText "${_currentFeatureText} , ${_info}")
    ENDIF(_info)
63
    GET_PROPERTY(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_URL)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
64 65 66
    IF(_info)
      SET(_currentFeatureText "${_currentFeatureText} , <${_info}>")
    ENDIF(_info)
67
    GET_PROPERTY(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_COMMENT)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
68 69 70 71
    IF(_info)
      SET(_currentFeatureText "${_currentFeatureText} , ${_info}")
    ENDIF(_info)
  ENDFOREACH(_currentFeature)
72 73
  SET(${_var} "${_currentFeatureText}" PARENT_SCOPE)
ENDFUNCTION(_FS_GET_FEATURE_SUMMARY)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
74 75


76
FUNCTION(PRINT_ENABLED_FEATURES)
77
  FEATURE_SUMMARY(WHAT ENABLED_FEATURES  DESCRIPTION "Enabled features:")
78
ENDFUNCTION(PRINT_ENABLED_FEATURES)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
79 80


81
FUNCTION(PRINT_DISABLED_FEATURES)
82
  FEATURE_SUMMARY(WHAT DISABLED_FEATURES  DESCRIPTION "Disabled features:")
83
ENDFUNCTION(PRINT_DISABLED_FEATURES)
Alexander Neundorf's avatar
 
Alexander Neundorf committed
84

85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
# feature_summary(FILENAME foo.log
#                 APPEND TRUE
#                 VAR <variable_name>
#                 DESCRIPTION "Found packages:"
#                 WHAT [ALL PACKAGES_FOUND PACKAGES_NOT_FOUND ENABLED_FEATURES DISABLED_FEATURES]
#                 )


FUNCTION(FEATURE_SUMMARY)
# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
  SET(options APPEND)
  SET(oneValueArgs FILENAME VAR DESCRIPTION WHAT)
  SET(multiValueArgs ) # none

  CMAKE_PARSE_ARGUMENTS(_FS "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${_FIRST_ARG} ${ARGN})

  IF(_FS_UNPARSED_ARGUMENTS)
    MESSAGE(FATAL_ERROR "Unknown keywords given to FEATURE_SUMMARY(): \"${_FS_UNPARSED_ARGUMENTS}\"")
  ENDIF(_FS_UNPARSED_ARGUMENTS)

  IF(NOT _FS_WHAT)
    MESSAGE(FATAL_ERROR "The call to FEATURE_SUMMAY() doesn't set the required WHAT argument.")
  ENDIF(NOT _FS_WHAT)

  IF(   "${_FS_WHAT}" STREQUAL "ENABLED_FEATURES"
     OR "${_FS_WHAT}" STREQUAL "DISABLED_FEATURES"
     OR "${_FS_WHAT}" STREQUAL "PACKAGES_FOUND"
     OR "${_FS_WHAT}" STREQUAL "PACKAGES_NOT_FOUND")
    _FS_GET_FEATURE_SUMMARY( ${_FS_WHAT} _featureSummary)
  ELSEIF("${_FS_WHAT}" STREQUAL "ALL")
    _FS_GET_FEATURE_SUMMARY( PACKAGES_FOUND _tmp1)
    _FS_GET_FEATURE_SUMMARY( PACKAGES_NOT_FOUND _tmp2)
    SET(_featureSummary "${_tmp1}${_tmp2}")
  ELSE()
    MESSAGE(FATAL_ERROR "The WHAT argument of FEATURE_SUMMARY() is set to ${_FS_WHAT}, which is not a valid value.")
  ENDIF()

  SET(_fullText "${_FS_DESCRIPTION}${_featureSummary}\n")

  IF(_FS_FILENAME)
    IF(_FS_APPEND)
      FILE(WRITE  "${_FS_FILENAME}" "${_fullText}")
    ELSE(_FS_APPEND)
      FILE(APPEND "${_FS_FILENAME}" "${_fullText}")
    ENDIF(_FS_APPEND)

  ELSE(_FS_FILENAME)
    IF(NOT _FS_VAR)
      MESSAGE(STATUS "${_fullText}")
    ENDIF(NOT _FS_VAR)
  ENDIF(_FS_FILENAME)

  IF(_FS_VAR)
    SET(${_FS_VAR} "${_fullText}" PARENT_SCOPE)
  ENDIF(_FS_VAR)

ENDFUNCTION(FEATURE_SUMMARY)