cmake: improve options summary with per-library values.

segment the options based on libraries, makes it easier to read.
This commit is contained in:
Gustavo Sverzut Barbieri 2017-01-26 15:50:05 -02:00
parent 85a095f0a8
commit ba9938b950
1 changed files with 43 additions and 15 deletions

View File

@ -124,7 +124,14 @@ function(EFL_OPTION _name _help _defval)
endif()
endif()
LIST_APPEND_GLOBAL(EFL_ALL_OPTIONS ${_name})
if(EFL_LIB_CURRENT)
if(NOT DEFINED EFL_ALL_OPTIONS_${EFL_LIB_CURRENT})
LIST_APPEND_GLOBAL(EFL_ALL_OPTIONS EFL_ALL_OPTIONS_${EFL_LIB_CURRENT})
endif()
LIST_APPEND_GLOBAL(EFL_ALL_OPTIONS_${EFL_LIB_CURRENT} ${_name})
else()
LIST_APPEND_GLOBAL(EFL_ALL_OPTIONS ${_name})
endif()
SET_GLOBAL(EFL_OPTION_DEFAULT_${_name} "${_defval}" "Default value for ${_name}")
SET_GLOBAL(EFL_OPTION_TYPE_${_name} "${_vartype}" "Type of ${_name}")
@ -183,29 +190,47 @@ function(EFL_OPTION_SET_MESSAGE _name _message)
SET_GLOBAL(EFL_OPTION_MESSAGE_${_name} "${_message}")
endfunction()
# _EFL_OPTIONS_SUMMARY_INTERNAL(Prefix Option)
#
# Internal function for EFL_OPTIONS_SUMMARY().
function(_EFL_OPTIONS_SUMMARY_INTERNAL _prefix _o)
set(_v ${${_o}})
set(_d ${EFL_OPTION_DEFAULT_${_o}})
if(EFL_OPTION_DEPENDS_MISSING_${_o})
set(_i "requires: ${EFL_OPTION_DEPENDS_MISSING_${_o}}, was: ${EFL_OPTION_ORIGINAL_VALUE_${_o}}")
elseif("${_v}" STREQUAL "${_d}")
set(_i "default")
else()
set(_i "default: ${_d}")
endif()
if(EFL_OPTION_MESSAGE_${_o})
set(_m " [${EFL_OPTION_MESSAGE_${_o}}]")
else()
set(_m)
endif()
message(STATUS "${_prefix}${_o}=${_v} (${_i})${_m}")
endfunction()
# EFL_OPTIONS_SUMMARY()
# Shows the summary of options, their values and related messages.
function(EFL_OPTIONS_SUMMARY)
message(STATUS "EFL Options Summary:")
message(STATUS "EFL ${PROJECT_VERSION} Options Summary:")
message(STATUS " CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}")
message(STATUS " CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
foreach(_o ${EFL_ALL_OPTIONS})
set(_v ${${_o}})
set(_d ${EFL_OPTION_DEFAULT_${_o}})
if(EFL_OPTION_DEPENDS_MISSING_${_o})
set(_i "requires: ${EFL_OPTION_DEPENDS_MISSING_${_o}}, was: ${EFL_OPTION_ORIGINAL_VALUE_${_o}}")
elseif("${_v}" STREQUAL "${_d}")
set(_i "default")
if(_o MATCHES "^EFL_ALL_OPTIONS_")
string(REGEX REPLACE "^EFL_ALL_OPTIONS_" "" _name "${_o}")
message(STATUS "")
message(STATUS " ${_name} options:")
foreach(_so ${${_o}})
_EFL_OPTIONS_SUMMARY_INTERNAL(" " ${_so})
endforeach()
else()
set(_i "default: ${_d}")
_EFL_OPTIONS_SUMMARY_INTERNAL(" " ${_o})
endif()
if(EFL_OPTION_MESSAGE_${_o})
set(_m " [${EFL_OPTION_MESSAGE_${_o}}]")
else()
set(_m)
endif()
message(STATUS " ${_o}=${_v} (${_i})${_m}")
endforeach()
message(STATUS "")
message(STATUS "EFL Libraries:")
foreach(_o ${EFL_ALL_LIBS})
message(STATUS " ${_o}${_mods}")
@ -221,6 +246,7 @@ function(EFL_OPTIONS_SUMMARY)
endforeach()
if(EFL_PKG_CONFIG_MISSING_OPTIONAL)
message(STATUS "")
message(STATUS "The following pkg-config optional modules are missing:")
foreach(_m ${EFL_PKG_CONFIG_MISSING_OPTIONAL})
message(STATUS " ${_m}")
@ -835,6 +861,8 @@ function(EFL_LIB _target)
set(EFL_TESTS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/tests/${_target})
set(EFL_TESTS_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/tests/${_target})
unset(EFL_ALL_OPTIONS_${EFL_LIB_CURRENT} CACHE)
set(DESCRIPTION)
set(PKG_CONFIG_REQUIRES)
set(PKG_CONFIG_REQUIRES_PRIVATE)