cmake: only link SDL2 against test executables
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c927ae7..a2b8b11 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2064,6 +2064,7 @@
endif()
endif()
+ enable_language(RC)
file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc)
file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.c)
if(MINGW OR CYGWIN)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 54912ff..93ea43b 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -9,8 +9,23 @@
set(SDL_TESTS_NONINTERACTIVE)
set(SDL_TESTS_NEEDS_RESOURCES)
+set(SDLTEST_TARGETS )
+
+macro(sdltest_link_librararies)
+ foreach(TARGET ${SDLTEST_TARGETS})
+ target_link_libraries(${TARGET} PRIVATE ${ARGN})
+ endforeach()
+endmacro()
+
+macro(sdltest_add_definitions)
+ foreach(TARGET ${SDLTEST_TARGETS})
+ target_compile_definitions(${TARGET} PRIVATE ${ARGN})
+ endforeach()
+endmacro()
+
macro(add_sdl_test_executable TARGET)
cmake_parse_arguments(AST "NONINTERACTIVE;NEEDS_RESOURCES" "" "" ${ARGN})
+ list(APPEND SDLTEST_TARGETS ${TARGET})
if(ANDROID)
add_library(${TARGET} SHARED ${AST_UNPARSED_ARGUMENTS})
else()
@@ -69,57 +84,6 @@
include(GNUInstallDirs)
endif()
-if(N3DS)
- link_libraries(SDL2::SDL2main)
-endif()
-
-if(PSP)
- link_libraries(
- SDL2::SDL2main
- SDL2::SDL2test
- SDL2::SDL2-static
- GL
- pspvram
- pspvfpu
- pspdisplay
- pspgu
- pspge
- pspaudio
- pspctrl
- psphprm
- psppower
- )
-elseif(PS2)
- link_libraries(
- SDL2main
- SDL2_test
- SDL2-static
- patches
- gskit
- dmakit
- ps2_drivers
- )
-else()
- link_libraries(SDL2::SDL2test SDL2::SDL2-static)
-endif()
-
-if(WINDOWS)
- # mingw32 must come before SDL2main to link successfully
- if(MINGW OR CYGWIN)
- link_libraries(mingw32)
- endif()
-
- # CET support was added in VS 16.7
- if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64")
- link_libraries(-CETCOMPAT)
- endif()
-
- # FIXME: Parent directory CMakeLists.txt only sets these for mingw/cygwin,
- # but we need them for VS as well.
- link_libraries(SDL2main)
- add_definitions(-Dmain=SDL_main)
-endif()
-
# CMake incorrectly detects opengl32.lib being present on MSVC ARM64
if(NOT MSVC OR NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64")
# Prefer GLVND, if present
@@ -196,7 +160,7 @@
add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativew32.c testutils.c)
elseif(HAVE_X11)
add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativex11.c testutils.c)
- target_link_libraries(testnative X11)
+ target_link_libraries(testnative PRIVATE X11)
elseif(OS2)
add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativeos2.c testutils.c)
endif()
@@ -234,6 +198,57 @@
add_sdl_test_executable(testvulkan testvulkan.c)
add_sdl_test_executable(testoffscreen testoffscreen.c)
+if(N3DS)
+ sdltest_link_librararies(SDL2::SDL2main)
+endif()
+
+if(PSP)
+ sdltest_link_librararies(
+ SDL2::SDL2main
+ SDL2::SDL2test
+ SDL2::SDL2-static
+ GL
+ pspvram
+ pspvfpu
+ pspdisplay
+ pspgu
+ pspge
+ pspaudio
+ pspctrl
+ psphprm
+ psppower
+ )
+elseif(PS2)
+ sdltest_link_librararies(
+ SDL2main
+ SDL2_test
+ SDL2-static
+ patches
+ gskit
+ dmakit
+ ps2_drivers
+ )
+else()
+ sdltest_link_librararies(SDL2::SDL2test SDL2::SDL2-static)
+endif()
+
+if(WINDOWS)
+ # mingw32 must come before SDL2main to link successfully
+ if(MINGW OR CYGWIN)
+ sdltest_link_librararies(mingw32)
+ endif()
+
+ # CET support was added in VS 16.7
+ if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64")
+ sdltest_link_librararies(-CETCOMPAT)
+ endif()
+
+ # FIXME: Parent directory CMakeLists.txt only sets these for mingw/cygwin,
+ # but we need them for VS as well.
+ sdltest_link_librararies(SDL2main)
+ sdltest_add_definitions(-Dmain=SDL_main)
+endif()
+
cmake_push_check_state(RESET)
check_c_compiler_flag(-Wformat-overflow HAVE_WFORMAT_OVERFLOW)
@@ -270,19 +285,19 @@
if(OPENGL_FOUND)
if(TARGET OpenGL::GL)
- target_link_libraries(testshader OpenGL::GL)
- target_link_libraries(testgl2 OpenGL::GL)
+ target_link_libraries(testshader PRIVATE OpenGL::GL)
+ target_link_libraries(testgl2 PRIVATE OpenGL::GL)
else()
if(EMSCRIPTEN AND OPENGL_gl_LIBRARY STREQUAL "nul")
set(OPENGL_gl_LIBRARY GL)
endif()
# emscripten's FindOpenGL.cmake does not create OpenGL::GL
- target_link_libraries(testshader ${OPENGL_gl_LIBRARY})
- target_link_libraries(testgl2 ${OPENGL_gl_LIBRARY})
+ target_link_libraries(testshader PRIVATE ${OPENGL_gl_LIBRARY})
+ target_link_libraries(testgl2 PRIVATE ${OPENGL_gl_LIBRARY})
endif()
endif()
if(EMSCRIPTEN)
- target_link_libraries(testshader -sLEGACY_GL_EMULATION)
+ target_link_libraries(testshader PRIVATE -sLEGACY_GL_EMULATION)
endif()
file(GLOB RESOURCE_FILES *.bmp *.wav *.hex moose.dat utf8.txt)