https://github.com/libsdl-org/SDL/commit/329794daf3f58088b56a64bdfa36b2021903be20 https://github.com/libsdl-org/SDL/commit/62302d08f13ca5303135505c6b355afbbf069745 From: Anonymous Maarten Date: Sun, 21 Aug 2022 04:03:32 +0200 Subject: [PATCH] cmake: add library directories & pthread to imported targets of sdl2-config.cmake This fixes linking to SDL2::SDL2-static on systems where external libraries such as X11 are not in a standard location. Pthread also needs special care. --- a/sdl2-config.cmake.in +++ b/sdl2-config.cmake.in @@ -39,18 +39,25 @@ unset(bindir) unset(libdir) unset(includedir) -set(_sdl2_libraries "@SDL_LIBS@") -set(_sdl2_static_private_libs "@SDL_STATIC_LIBS@") +set(_sdl2_libraries_in "@SDL_LIBS@") +set(_sdl2_static_private_libs_in "@SDL_STATIC_LIBS@") -# Convert _sdl2_libraries to list and keep only libraries -string(REGEX MATCHALL "-[lm]([-a-zA-Z0-9._]+)" _sdl2_libraries "${_sdl2_libraries}") +# Convert _sdl2_libraries to list and keep only libraries + library directories +string(REGEX MATCHALL "-[lm]([-a-zA-Z0-9._]+)" _sdl2_libraries "${_sdl2_libraries_in}") string(REGEX REPLACE "^-l" "" _sdl2_libraries "${_sdl2_libraries}") string(REGEX REPLACE ";-l" ";" _sdl2_libraries "${_sdl2_libraries}") +string(REGEX MATCHALL "-L([-a-zA-Z0-9._/]+)" _sdl2_libdirs "${_sdl2_libraries_in}") +string(REGEX REPLACE "^-L" "" _sdl2_libdirs "${_sdl2_libdirs}") +string(REGEX REPLACE ";-L" ";" _sdl2_libdirs "${_sdl2_libdirs}") +list(APPEND _sdl2_libdirs "${SDL2_LIBDIR}") -# Convert _sdl2_static_private_libs to list and keep only libraries -string(REGEX MATCHALL "(-[lm]([-a-zA-Z0-9._]+))|(-Wl,[^ ]*framework[^ ]*)" _sdl2_static_private_libs "${_sdl2_static_private_libs}") +# Convert _sdl2_static_private_libs to list and keep only libraries + library directories +string(REGEX MATCHALL "(-[lm]([-a-zA-Z0-9._]+))|(-Wl,[^ ]*framework[^ ]*)|(-pthread)" _sdl2_static_private_libs "${_sdl2_static_private_libs_in}") string(REGEX REPLACE "^-l" "" _sdl2_static_private_libs "${_sdl2_static_private_libs}") string(REGEX REPLACE ";-l" ";" _sdl2_static_private_libs "${_sdl2_static_private_libs}") +string(REGEX MATCHALL "-L([-a-zA-Z0-9._/]+)" _sdl2_static_private_libdirs "${_sdl2_static_private_libs_in}") +string(REGEX REPLACE "^-L" "" _sdl2_static_private_libdirs "${_sdl2_static_private_libdirs}") +string(REGEX REPLACE ";-L" ";" _sdl2_static_private_libdirs "${_sdl2_static_private_libdirs}") if(_sdl2_libraries MATCHES ".*SDL2main.*") list(INSERT SDL2_LIBRARIES 0 SDL2::SDL2main) @@ -103,6 +110,7 @@ if(WIN32) set_target_properties(SDL2::SDL2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${_sdl2_link_libraries}" + INTERFACE_LINK_DIRECTORIES "${_sdl2_libdirs}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_IMPLIB "${_sdl2_implib}" IMPORTED_LOCATION "${_sdl2_dll}" @@ -122,6 +130,7 @@ else() set_target_properties(SDL2::SDL2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${_sdl2_link_libraries}" + INTERFACE_LINK_DIRECTORIES "${_sdl2_libdirs}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${_sdl2_shared}" ) @@ -142,6 +151,7 @@ if(EXISTS "${_sdl2_static}") IMPORTED_LOCATION "${_sdl2_static}" INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${_sdl2_link_libraries};${_sdl2_static_private_libs}" + INTERFACE_LINK_DIRECTORIES "${_sdl2_libdirs};${_sdl2_static_private_libdirs}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" ) endif() From: Anonymous Maarten Date: Wed, 24 Aug 2022 04:14:52 +0200 Subject: [PATCH] cmake: always create SDL2::SDL2main target in autotools' cmake config script --- a/sdl2-config.cmake.in +++ b/sdl2-config.cmake.in @@ -62,38 +62,39 @@ string(REGEX REPLACE ";-L" ";" _sdl2_static_private_libdirs "${_sdl2_static_priv if(_sdl2_libraries MATCHES ".*SDL2main.*") list(INSERT SDL2_LIBRARIES 0 SDL2::SDL2main) list(INSERT SDL2_STATIC_LIBRARIES 0 SDL2::SDL2main) - set(_sdl2main_library ${SDL2_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2main${CMAKE_STATIC_LIBRARY_SUFFIX}) - if(EXISTS "${_sdl2main_library}") - set(SDL2MAIN_LIBRARY SDL2::SDL2main) - if(NOT TARGET SDL2::SDL2main) - add_library(SDL2::SDL2main STATIC IMPORTED) - set_target_properties(SDL2::SDL2main - PROPERTIES - IMPORTED_LOCATION "${_sdl2main_library}" - ) - if(WIN32) - # INTERFACE_LINK_OPTIONS needs CMake 3.13 - cmake_minimum_required(VERSION 3.13) - # Mark WinMain/WinMain@16 as undefined, such that it will be withheld by the linker. - if(CMAKE_SIZEOF_VOID_P EQUAL 4) - set_target_properties(SDL2::SDL2main - PROPERTIES - INTERFACE_LINK_OPTIONS "-Wl,--undefined=_WinMain@16" - ) - else() - set_target_properties(SDL2::SDL2main - PROPERTIES - INTERFACE_LINK_OPTIONS "-Wl,--undefined=WinMain" - ) - endif() +endif() + +set(_sdl2main_library ${SDL2_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2main${CMAKE_STATIC_LIBRARY_SUFFIX}) +if(EXISTS "${_sdl2main_library}") + set(SDL2MAIN_LIBRARY SDL2::SDL2main) + if(NOT TARGET SDL2::SDL2main) + add_library(SDL2::SDL2main STATIC IMPORTED) + set_target_properties(SDL2::SDL2main + PROPERTIES + IMPORTED_LOCATION "${_sdl2main_library}" + ) + if(WIN32) + # INTERFACE_LINK_OPTIONS needs CMake 3.13 + cmake_minimum_required(VERSION 3.13) + # Mark WinMain/WinMain@16 as undefined, such that it will be withheld by the linker. + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set_target_properties(SDL2::SDL2main + PROPERTIES + INTERFACE_LINK_OPTIONS "-Wl,--undefined=_WinMain@16" + ) + else() + set_target_properties(SDL2::SDL2main + PROPERTIES + INTERFACE_LINK_OPTIONS "-Wl,--undefined=WinMain" + ) endif() endif() - set(SDL2_SDL2main_FOUND TRUE) - else() - set(SDL2_SDL2main_FOUND FALSE) endif() - unset(_sdl2main_library) + set(SDL2_SDL2main_FOUND TRUE) +else() + set(SDL2_SDL2main_FOUND FALSE) endif() +unset(_sdl2main_library) # Remove SDL2 since this is the "central" library # Remove SDL2main since this will be provided by SDL2::SDL2main (if available)