SDL_ttf: Update PrivateSdlFunctions.cmake

From b0bc47b9b50e0f05d2d20fa77bc91f662f8aa756 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Thu, 8 Jan 2026 22:28:08 +0100
Subject: [PATCH] Update PrivateSdlFunctions.cmake

(cherry picked from commit 24990fdfd68936022d9b9f6158f80a48ad3c30ab)
---
 cmake/PrivateSdlFunctions.cmake | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/cmake/PrivateSdlFunctions.cmake b/cmake/PrivateSdlFunctions.cmake
index 5fde085f..b19e910e 100644
--- a/cmake/PrivateSdlFunctions.cmake
+++ b/cmake/PrivateSdlFunctions.cmake
@@ -3,6 +3,9 @@
 include(CheckCCompilerFlag)
 include(CheckCSourceCompiles)
 include(CMakePushCheckState)
+if(NOT CMAKE_VERSION VERSION_LESS "3.18")
+  include(CheckLinkerFlag)
+endif()
 
 macro(sdl_calculate_derived_version_variables MAJOR MINOR MICRO)
     set(SO_VERSION_MAJOR "0")
@@ -233,11 +236,14 @@ function(sdl_check_project_in_subfolder relative_subfolder name vendored_option)
 endfunction()
 
 macro(sdl_check_linker_flag flag var)
-    # FIXME: Use CheckLinkerFlag module once cmake minimum version >= 3.18
-    cmake_push_check_state(RESET)
-    set(CMAKE_REQUIRED_LINK_OPTIONS "${flag}")
-    check_c_source_compiles("int main() { return 0; }" ${var} FAIL_REGEX "(unsupported|syntax error|unrecognized option)")
-    cmake_pop_check_state()
+    if(NOT CMAKE_VERSION VERSION_LESS "3.18")
+        check_linker_flag(C "${flag}" "${var}")
+    else()
+        cmake_push_check_state(RESET)
+        set(CMAKE_REQUIRED_LINK_OPTIONS "${flag}")
+        check_c_source_compiles("int main() { return 0; }" ${var} FAIL_REGEX "(unsupported|syntax error|unrecognized option)")
+        cmake_pop_check_state()
+    endif()
 endmacro()
 
 function(SDL_detect_linker)
@@ -275,7 +281,6 @@ endfunction()
 function(sdl_target_link_options_no_undefined TARGET)
     if(NOT MSVC AND NOT CMAKE_SYSTEM_NAME MATCHES ".*OpenBSD.*")
         if(CMAKE_C_COMPILER_ID MATCHES "AppleClang")
-            target_link_options(${TARGET} PRIVATE "-Wl,-undefined,error")
         else()
             sdl_check_linker_flag("-Wl,--no-undefined" HAVE_WL_NO_UNDEFINED)
             if(HAVE_WL_NO_UNDEFINED AND NOT ((CMAKE_C_COMPILER_ID MATCHES "Clang") AND WIN32))
@@ -310,6 +315,15 @@ function(sdl_add_warning_options TARGET)
         else()
             target_compile_options(${TARGET} PRIVATE -Werror)
         endif()
+        get_property(target_type TARGET ${TARGET} PROPERTY TYPE)
+        if(NOT (APPLE OR MSVC))
+            if(target_type MATCHES "SHARED_LIBRARY|MODULE_LIBRARY")
+                sdl_check_linker_flag("-Wl,-fatal-warnings" HAVE_WL_FATAL_WARNINGS)
+                if(HAVE_WL_FATAL_WARNINGS)
+                    target_link_options(${TARGET} PRIVATE "-Wl,-fatal-warnings")
+                endif()
+            endif()
+        endif()
     endif()
 endfunction()