SDL_mixer: cmake: add warning options using helper function

From a92cba218d463d83dc220a7c85fdfe09e0b0cd18 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 5 Jun 2023 03:22:45 +0200
Subject: [PATCH] cmake: add warning options using helper function

---
 CMakeLists.txt                  | 17 ++---------------
 cmake/PrivateSdlFunctions.cmake | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1b0533b..8251fcd1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -208,20 +208,6 @@ if(NOT TARGET ${sdl3_target_name})
     find_package(SDL3 ${SDL_REQUIRED_VERSION} REQUIRED)
 endif()
 
-add_library(sdl3mixer_build_options INTERFACE)
-if(MSVC)
-    target_compile_options(sdl3mixer_build_options INTERFACE /W2)
-else()
-    target_compile_options(sdl3mixer_build_options INTERFACE -Wall -Wextra)
-endif()
-if(SDL3MIXER_WERROR)
-    if(MSVC)
-        target_compile_options(sdl3mixer_build_options INTERFACE /WX)
-    else()
-        target_compile_options(sdl3mixer_build_options INTERFACE -Werror)
-    endif()
-endif()
-
 set(BUILD_SHARED_LIBS ${SDL3MIXER_BUILD_SHARED_LIBS})
 add_library(${sdl3_mixer_target_name}
     src/codecs/load_aiff.c
@@ -272,7 +258,7 @@ target_compile_definitions(${sdl3_mixer_target_name} PRIVATE
     SDL_BUILD_MICRO_VERSION=${MICRO_VERSION}
 )
 target_link_libraries(${sdl3_mixer_target_name} PRIVATE $<BUILD_INTERFACE:${sdl3_target_name}>)
-target_link_libraries(${sdl3_mixer_target_name} PRIVATE $<BUILD_INTERFACE:sdl3mixer_build_options>)
+sdl_add_warning_options(${sdl3_mixer_target_name} WARNING_AS_ERROR ${SDL3MIXER_WERROR})
 if(WIN32 AND BUILD_SHARED_LIBS)
     target_sources(${sdl3_mixer_target_name} PRIVATE
         version.rc
@@ -1009,6 +995,7 @@ if(SDL3MIXER_SAMPLES)
     add_executable(playwave playwave.c)
 
     foreach(prog playmus playwave)
+        sdl_add_warning_options(${prog} WARNING_AS_ERROR ${SDL3MIXER_WERROR})
         target_link_libraries(${prog} PRIVATE SDL3_mixer::${sdl3_mixer_target_name})
         target_link_libraries(${prog} PRIVATE ${sdl3_target_name})
         if(HAVE_SIGNAL_H)
diff --git a/cmake/PrivateSdlFunctions.cmake b/cmake/PrivateSdlFunctions.cmake
index 034f2cef..7c1dfc46 100644
--- a/cmake/PrivateSdlFunctions.cmake
+++ b/cmake/PrivateSdlFunctions.cmake
@@ -237,3 +237,19 @@ function(sdl_target_link_option_version_file TARGET VERSION_SCRIPT)
         endif()
     endif()
 endfunction()
+
+function(sdl_add_warning_options TARGET)
+    cmake_parse_arguments(ARGS "" "WARNING_AS_ERROR" "" ${ARGN})
+    if(MSVC)
+        target_compile_options(${TARGET} PRIVATE /W2)
+    else()
+        target_compile_options(${TARGET} PRIVATE -Wall -Wextra)
+    endif()
+    if(ARGS_WARNING_AS_ERROR)
+        if(MSVC)
+            target_compile_options(${TARGET} PRIVATE /WX)
+        else()
+            target_compile_options(${TARGET} PRIVATE -Werror)
+        endif()
+    endif()
+endfunction()