SDL: cmake: use target_compile_options to use -idirafter for khronos headers

From 5555284a70ec747ee82a79a1cc3a3bd85ecadd55 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 7 Jan 2023 16:55:32 +0100
Subject: [PATCH] cmake: use target_compile_options to use -idirafter for
 khronos headers

---
 CMakeLists.txt     |  9 ++++++---
 cmake/macros.cmake | 10 ++++++++++
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7a0e0b8b6794..7417aa5f89a3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -301,10 +301,13 @@ target_include_directories(sdl-build-options
 )
 # Note: The clang toolset for Visual Studio does not support the '-idirafter' option.
 if(USE_GCC OR (USE_CLANG AND NOT MSVC_CLANG))
-  # !!! FIXME: do we _need_ to mess with CMAKE_C_FLAGS here?
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter \"${SDL3_SOURCE_DIR}/src/video/khronos\"")
+  if(CMAKE_VERSION VERSION_LESS 3.12)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter \"${SDL3_SOURCE_DIR}/src/video/khronos\"")
+  else()
+    target_compile_options(sdl-global-options INTERFACE "SHELL:-idirafter \"${SDL3_SOURCE_DIR}/src/video/khronos\"")
+  endif()
 else()
-  target_include_directories(sdl-build-options INTERFACE "${SDL3_SOURCE_DIR}/src/video/khronos")
+  target_include_directories(sdl-global-options INTERFACE "${SDL3_SOURCE_DIR}/src/video/khronos")
 endif()
 
 # All these ENABLED_BY_DEFAULT vars will default to ON if not specified, so
diff --git a/cmake/macros.cmake b/cmake/macros.cmake
index 5e38a7b946af..a3ed37c62adc 100644
--- a/cmake/macros.cmake
+++ b/cmake/macros.cmake
@@ -78,10 +78,15 @@ function(listtostr LIST OUTPUT)
   # Do not use string(REPLACE ";" " ") here to avoid messing up list entries
   set(res)
   foreach(ITEM ${${LIST}})
+    string(SUBSTRING "${ITEM}" 0 6 start)
+    if(start STREQUAL "SHELL:")
+      string(SUBSTRING "${ITEM}" 6 -1 ITEM)
+    endif()
     if(ITEM)
       set(res "${res} ${LPREFIX}${ITEM}")
     endif()
   endforeach()
+  string(STRIP "${res}" res)
   set(${OUTPUT} "${res}" PARENT_SCOPE)
 endfunction()
 
@@ -96,8 +101,13 @@ function(listtostrrev _LIST _OUTPUT)
   # entries
   set(res)
   foreach(_ITEM ${${_LIST}})
+    string(SUBSTRING "${_ITEM}" 0 6 start)
+    if(start STREQUAL "SHELL:")
+      string(SUBSTRING "${_ITEM}" 6 -1 _ITEM)
+    endif()
     set(res "${res} ${_LPREFIX}${_ITEM}")
   endforeach()
+  string(STRIP "${res}" res)
   set($_OUTPUT} "${res}" PARENT_SCOPE)
 endfunction()