FLTK logo

[master] 265e5cd - Improve CMake build configuration summary

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 265e5cd - Improve CMake build configuration summary "Albrecht Schlosser" 10:02 Apr 08  
 
commit 265e5cd77b30581e7701927930d8fa887e0361df
Author:     Albrecht Schlosser <albrechts.fltk@online.de>
AuthorDate: Mon Apr 8 18:56:40 2024 +0200
Commit:     Albrecht Schlosser <albrechts.fltk@online.de>
CommitDate: Mon Apr 8 18:56:40 2024 +0200

    Improve CMake build configuration summary
    
    - simplify and unify build option output
    - alignment can be changed in only 2 macros in CMake/fl_summary.cmake
    - output system library location of image libraries if applicable

 CMake/fl_debug_var.cmake |   2 +
 CMake/fl_summary.cmake   |  89 ++++++++++++++++++++++++++++++++
 CMakeLists.txt           | 129 +++++++++++++----------------------------------
 3 files changed, 127 insertions(+), 93 deletions(-)

diff --git CMake/fl_debug_var.cmake CMake/fl_debug_var.cmake
index e3423b2..8f42988 100644
--- CMake/fl_debug_var.cmake
+++ CMake/fl_debug_var.cmake
@@ -43,6 +43,8 @@ function(fl_expand_name out in min_len)
     set(temp "${in}${spaces}${spaces}")
     string(SUBSTRING "${temp}" 0 ${min_len} temp)
     set(${out} "${temp}" PARENT_SCOPE)
+  else()
+    set(${out} "${in}" PARENT_SCOPE)
   endif()
 endfunction(fl_expand_name)
 
diff --git CMake/fl_summary.cmake CMake/fl_summary.cmake
new file mode 100644
index 0000000..33490a0
--- /dev/null
+++ CMake/fl_summary.cmake
@@ -0,0 +1,89 @@
+#
+# Macros used by the CMake build system for the Fast Light Tool Kit (FLTK).
+#
+# Copyright 2024 by Bill Spitzak and others.
+#
+# This library is free software. Distribution and use rights are outlined in
+# the file "COPYING" which should have been included with this file.  If this
+# file is missing or damaged, see the license at:
+#
+#     https://www.fltk.org/COPYING.php
+#
+# Please see the following page on how to report bugs and issues:
+#
+#     https://www.fltk.org/bugs.php
+#
+
+########################################################################
+# The macros in this file are used to generate the CMake build summary.
+# Fixed widths of title fields are intentionally hard coded in two of
+# these macros so we can easily change the alignment.
+########################################################################
+
+include(${CMAKE_CURRENT_LIST_DIR}/fl_debug_var.cmake)
+
+########################################################################
+# Output a summary line like "<title> <value>"
+########################################################################
+# <title>  will be expanded to a fixed width (can be empty)
+# <value>  text to be displayed
+########################################################################
+
+macro(fl_summary title value)
+  fl_expand_name(label "${title}" 24)
+  message(STATUS "${label} ${value}")
+endmacro(fl_summary title value)
+
+########################################################################
+# Output a summary line like "<title>   will be built ..."
+#                         or "<title>   will not be built ..."
+########################################################################
+# title   will be expanded to a fixed width (must not be empty)
+# subdir  = relative build directory (e.g. lib or bin/test)
+# build   = CMake variable name (bool): whether <title> is built
+# option  = option name the user can set to build <title>
+########################################################################
+
+macro(fl_summary_build title subdir build option)
+  if(${build})
+    set(value "will be built in: ${CMAKE_CURRENT_BINARY_DIR}/${subdir}")
+  else()
+    set(value "will not be built (set ${option}=ON to build)")
+  endif()
+  fl_expand_name(label "${title}" 19)
+  message(STATUS "${label} ${value}")
+endmacro(fl_summary_build title var subdir)
+
+########################################################################
+# Output a simple summary line like "<title>   {Yes|No}"
+########################################################################
+# title   will be expanded to a fixed width (must not be empty)
+# var     = CMake variable name, must evaluate to true or false
+########################################################################
+
+macro(fl_summary_yn title var)
+  if(${var})
+    set(value "Yes")
+  else()
+    set(value "No")
+  endif()
+  fl_summary("${title}" ${value})
+endmacro(fl_summary_yn title var)
+
+########################################################################
+# Output summary line for image libs (bundled or system libs)
+########################################################################
+# title = "Image Libraries" or empty
+# name  = displayed name = { JPEG | PNG | ZLIB }
+# lib   = CMake library name (system library, if it was found)
+########################################################################
+
+macro(fl_summary_image title name lib)
+  fl_expand_name(name4 "${name}" 4)
+  if(FLTK_USE_BUNDLED_${name})
+    set(value "${name4} = Bundled")
+  else()
+    set(value "${name4} = System: ${${lib}}")
+  endif()
+  fl_summary("${title}" "${value}")
+endmacro(fl_summary_image title name lib)
diff --git CMakeLists.txt CMakeLists.txt
index 68ae7e9..8e07881 100644
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -227,136 +227,79 @@ if(FLTK_BUILD_SHARED_LIBS AND GENERATE_EXPORT_HEADERS)
 endif(FLTK_BUILD_SHARED_LIBS AND GENERATE_EXPORT_HEADERS)
 
 #######################################################################
-# Output Configuration Summary
+# Output Build Configuration Summary
 #######################################################################
 
-include(FeatureSummary)
+include(FeatureSummary)         # CMake Feature Summary
+include(CMake/fl_summary.cmake) # special FLTK summary macros
+
+# CMake Feature Summary
 
 message("")
 set(_descr "${PROJECT_NAME} ${FLTK_VERSION} generated by CMake ${CMAKE_VERSION}")
 feature_summary(WHAT ALL DESCRIPTION "Configuration Summary for ${_descr} --\n")
 
-message(STATUS "Static libraries   will be built in ${CMAKE_CURRENT_BINARY_DIR}/lib")
-
-if(FLTK_BUILD_SHARED_LIBS)
-  message(STATUS "Shared libraries   will be built in ${CMAKE_CURRENT_BINARY_DIR}/lib")
-else()
-  message(STATUS "Shared libraries   will not be built (set FLTK_BUILD_SHARED_LIBS=ON to build)")
-endif()
-
-if(FLTK_BUILD_FORMS)
-  message(STATUS "The forms library  will be built in ${CMAKE_CURRENT_BINARY_DIR}/lib")
-else()
-  message(STATUS "The forms library  will not be built (set FLTK_BUILD_FORMS=ON to build)")
-endif()
-
-if(FLTK_USE_GL)
-  message(STATUS "The OpenGL library will be built in ${CMAKE_CURRENT_BINARY_DIR}/lib")
-else()
-  message(STATUS "The OpenGL library will not be built (set FLTK_BUILD_GL=ON to build)")
-endif()
-
-if(FLTK_BUILD_FLUID)
-  message(STATUS "fluid              will be built in ${CMAKE_CURRENT_BINARY_DIR}/bin/fluid")
-else()
-  message(STATUS "fluid              will not be built (set FLTK_BUILD_FLUID=ON to build)")
-endif()
+# FLTK specific build configuration and options (see macros in fl_summary.cmake)
 
-if(FLTK_BUILD_FLTK_OPTIONS)
-  message(STATUS "fltk-options       will be built in ${CMAKE_CURRENT_BINARY_DIR}/bin/fltk-options")
-else()
-  message(STATUS "fltk-options       will not be built (set FLTK_BUILD_FLTK_OPTIONS=ON to build)")
-endif()
+#                "title"               dir  build (bool)             option to set
+fl_summary_build("Static libraries"    lib  TRUE                     "n/a")
+fl_summary_build("Shared libraries"    lib  FLTK_BUILD_SHARED_LIBS   FLTK_BUILD_SHARED_LIBS)
+fl_summary_build("The forms library"   lib  FLTK_BUILD_FORMS         FLTK_BUILD_FORMS)
+fl_summary_build("The OpenGL library"  lib  FLTK_USE_GL              FLTK_BUILD_GL)
+fl_summary_build("fluid"               bin  FLTK_BUILD_FLUID         FLTK_BUILD_FLUID)
+fl_summary_build("fltk-options"        bin  FLTK_BUILD_FLTK_OPTIONS  FLTK_BUILD_FLTK_OPTIONS)
 
-if(FLTK_BUILD_TEST)
-  message(STATUS "Test programs      will be built in ${CMAKE_CURRENT_BINARY_DIR}/bin/test")
-else()
-  message(STATUS "Test programs      will not be built (set FLTK_BUILD_TEST=ON to build)")
-endif()
-
-if(FLTK_BUILD_EXAMPLES)
-  message(STATUS "Example programs   will be built in ${CMAKE_CURRENT_BINARY_DIR}/bin/examples")
-else()
-  message(STATUS "Example programs   will not be built (set FLTK_BUILD_EXAMPLES=ON to build)")
-endif()
+fl_summary_build("Test programs"     bin/test      FLTK_BUILD_TEST      FLTK_BUILD_TEST)
+fl_summary_build("Example programs"  bin/examples  FLTK_BUILD_EXAMPLES  FLTK_BUILD_EXAMPLES)
 
 message(STATUS "")
 
 if(CMAKE_BUILD_TYPE STREQUAL "")
-  message(STATUS "Build configuration     : <unspecified>")
+  fl_summary("Build configuration" "<unspecified>")
 else()
-  message(STATUS "Build configuration     : ${CMAKE_BUILD_TYPE}")
+  fl_summary("Build configuration" "${CMAKE_BUILD_TYPE}")
 endif()
 
-message(STATUS "")
-
-if(FLTK_USE_BUNDLED_JPEG)
-  message(STATUS "Image Libraries         : JPEG = Builtin")
-else()
-  message(STATUS "Image Libraries         : JPEG = System")
-endif()
-
-if(FLTK_USE_BUNDLED_PNG)
-  message(STATUS "                        : PNG  = Builtin")
-else()
-  message(STATUS "                        : PNG  = System")
-endif()
+message("")
+#                "title"           name  system library if used
+fl_summary_image("Image Libraries" JPEG  LIB_jpeg)
+fl_summary_image(""                PNG   LIB_png)
+fl_summary_image(""                ZLIB  LIB_zlib)
 
-if(FLTK_USE_BUNDLED_ZLIB)
-  message(STATUS "                        : ZLIB = Builtin")
-else()
-  message(STATUS "                        : ZLIB = System")
-endif()
+message("")
 
 if(UNIX AND NOT (APPLE AND NOT FLTK_BACKEND_X11))
 
   if(FLTK_BACKEND_WAYLAND)
     if(FLTK_BACKEND_X11)
-      message(STATUS "Use Wayland             : Yes (can also run as X11 client)")
+      fl_summary("Use Wayland" "Yes (can also run as X11 client)")
     else()
-      message(STATUS "Use Wayland             : Yes (cannot run as X11 client)")
+      fl_summary("Use Wayland" "Yes (cannot run as X11 client)")
     endif(FLTK_BACKEND_X11)
-    if(USE_SYSTEM_LIBDECOR)
-      message(STATUS "Use system libdecor     : Yes")
-    else()
-      message(STATUS "Use system libdecor     : No")
-    endif(USE_SYSTEM_LIBDECOR)
+    fl_summary_yn("Use system libdecor" USE_SYSTEM_LIBDECOR)
   else()
-    message(STATUS "Use Wayland             : No (therefore, X11 is used)")
+    fl_summary("Use Wayland" "No (X11 is used)")
   endif(FLTK_BACKEND_WAYLAND)
 
-  if(FLTK_USE_CAIRO)
-    message(STATUS "All drawing uses Cairo  : Yes")
-  else()
-    message(STATUS "All drawing uses Cairo  : No")
-  endif()
+  fl_summary_yn("All drawing uses Cairo" FLTK_USE_CAIRO)
 
-  if(USE_PANGO)
-    message(STATUS "Use Pango               : Yes")
-  else()
-    message(STATUS "Use Pango               : No")
-    if(USE_XFT)
-      message(STATUS "Use Xft                 : Yes")
-    else()
-      message(STATUS "Use Xft                 : No")
-    endif()
+  fl_summary_yn("Use Pango" USE_PANGO)
+  if(NOT USE_PANGO)
+    fl_summary_yn("Use Xft" USE_XFT)
   endif()
 
 endif()
 
+set(title "Fl_Cairo_Window support")
 if(FLTK_HAVE_CAIROEXT)
-  message(STATUS "Fl_Cairo_Window support : Yes (extended)")
+  fl_summary("${title}" "Yes (extended)")
 elseif(FLTK_HAVE_CAIRO)
-  message(STATUS "Fl_Cairo_Window support : Yes (standard)")
+  fl_summary("${title}" "Yes (standard)")
 else()
-  message(STATUS "Fl_Cairo_Window support : No")
+  fl_summary("${title}" "No")
 endif()
 
-if(FLTK_USE_STD)
-  message(STATUS "Use std::               : Yes")
-else()
-  message(STATUS "Use std::               : No")
-endif()
+fl_summary_yn("Use std::" FLTK_USE_STD)
 
 message("")
 message(STATUS "End of Configuration Summary --\n")
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.