SDL: cmake: add function to print dict list

From 289b024715d473d3558fb5d908337fb71096823c Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 22 Aug 2022 04:11:39 +0200
Subject: [PATCH] cmake: add function to print dict list

---
 CMakeLists.txt     | 17 ++++++++---------
 cmake/macros.cmake | 30 ++++++++++++++++++++++++++++--
 2 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6cfa064f1a10..dba551ea2fe9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3058,20 +3058,19 @@ message(STATUS "Compiler: ${CMAKE_C_COMPILER}")
 message(STATUS "Revision: ${SDL_REVISION}")
 message(STATUS "")
 message(STATUS "Subsystems:")
-foreach(_SUB ${SDL_SUBSYSTEMS})
+
+find_stringlength_longest_item(SDL_SUBSYSTEMS maxLength)
+foreach(_SUB IN LISTS SDL_SUBSYSTEMS)
+  string(LENGTH ${_SUB} _SUBLEN)
+  math(EXPR _PADLEN "(${maxLength} + 1) - ${_SUBLEN}")
+  string(RANDOM LENGTH ${_PADLEN} ALPHABET " " _PADDING)
   string(TOUPPER ${_SUB} _OPT)
-  message_bool_option(${_SUB} SDL_${_OPT})
+  message_bool_option(${_SUB} SDL_${_OPT} ${_PADDING})
 endforeach()
 message(STATUS "")
 message(STATUS "Options:")
 list(SORT ALLOPTIONS)
-foreach(_OPT ${ALLOPTIONS})
-  # Get the padding
-  string(LENGTH ${_OPT} _OPTLEN)
-  math(EXPR _PADLEN "(${LONGESTOPTIONNAME} + 1) - ${_OPTLEN}")
-  string(RANDOM LENGTH ${_PADLEN} ALPHABET " " _PADDING)
-  message_tested_option(${_OPT} ${_PADDING})
-endforeach()
+message_dictlist(ALLOPTIONS)
 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
   message(STATUS "")
   message(STATUS " CMAKE_C_FLAGS_DEBUG:   ${CMAKE_C_FLAGS_DEBUG}")
diff --git a/cmake/macros.cmake b/cmake/macros.cmake
index f148810e1040..8ef44445cfc5 100644
--- a/cmake/macros.cmake
+++ b/cmake/macros.cmake
@@ -37,10 +37,14 @@ macro(MESSAGE_ERROR _TEXT)
 endmacro()
 
 macro(MESSAGE_BOOL_OPTION _NAME _VALUE)
+  set(_PAD "\t")
+  if(${ARGC} EQUAL 3)
+    set(_PAD ${ARGV2})
+  endif()
   if(${_VALUE})
-    message(STATUS "  ${_NAME}:\tON")
+    message(STATUS "  ${_NAME}:${_PAD}ON")
   else()
-    message(STATUS "  ${_NAME}:\tOFF")
+    message(STATUS "  ${_NAME}:${_PAD}OFF")
   endif()
 endmacro()
 
@@ -94,6 +98,28 @@ function(LISTTOSTRREV _LIST _OUTPUT)
   set($_OUTPUT} "${res}" PARENT_SCOPE)
 endfunction()
 
+function(find_stringlength_longest_item inList outLength)
+  set(maxLength 0)
+  foreach(item IN LISTS ${inList})
+    string(LENGTH "${item}" slen)
+    if(slen GREATER maxLength)
+      set(maxLength ${slen})
+    endif()
+  endforeach()
+  set("${outLength}" ${maxLength} PARENT_SCOPE)
+endfunction()
+
+function(message_dictlist inList)
+  find_stringlength_longest_item(${inList} maxLength)
+  foreach(name IN LISTS ${inList})
+    # Get the padding
+    string(LENGTH ${name} nameLength)
+    math(EXPR padLength "(${maxLength} + 1) - ${nameLength}")
+    string(RANDOM LENGTH ${padLength} ALPHABET " " padding)
+    message_tested_option(${name} ${padding})
+  endforeach()
+endfunction()
+
 if(CMAKE_VERSION VERSION_LESS 3.16.0 OR SDL3_SUBPROJECT)
   # - CMake versions <3.16 do not support the OBJC language
   # - When SDL is built as a subproject and when the main project does not enable OBJC,