cmake: improve options summary with per-library values.
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Thu, 26 Jan 2017 17:50:05 +0000 (15:50 -0200)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Thu, 26 Jan 2017 17:53:14 +0000 (15:53 -0200)
segment the options based on libraries, makes it easier to read.

cmake/helpers/EflMacros.cmake

index 41ad0dc..7699db3 100644 (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")
-    else()
-      set(_i "default: ${_d}")
-    endif()
-    if(EFL_OPTION_MESSAGE_${_o})
-      set(_m " [${EFL_OPTION_MESSAGE_${_o}}]")
+    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(_m)
+      _EFL_OPTIONS_SUMMARY_INTERNAL("  " ${_o})
     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)