mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-23 15:15:39 +00:00
7321537971
When SDL is built with Wayland support on Linux, and Wayland libraries are linked as dependencies instead of being loaded with dlopen(), its dependencies will include libraries whose names contain a dash, like `-lwayland-client` and `-ldecor-0`. Don't replace such libraries with `-lwayland` and `-ldecor`: those don't exist and linking them will fail. Signed-off-by: Simon McVittie <smcv@collabora.com>
195 lines
6.7 KiB
CMake
195 lines
6.7 KiB
CMake
# sdl2 cmake project-config input for ./configure script
|
|
|
|
include(FeatureSummary)
|
|
set_package_properties(SDL2 PROPERTIES
|
|
URL "https://www.libsdl.org/"
|
|
DESCRIPTION "low level access to audio, keyboard, mouse, joystick, and graphics hardware"
|
|
)
|
|
|
|
# Copied from `configure_package_config_file`
|
|
macro(set_and_check _var _file)
|
|
set(${_var} "${_file}")
|
|
if(NOT EXISTS "${_file}")
|
|
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
|
|
endif()
|
|
endmacro()
|
|
|
|
# Copied from `configure_package_config_file`
|
|
macro(check_required_components _NAME)
|
|
foreach(comp ${${_NAME}_FIND_COMPONENTS})
|
|
if(NOT ${_NAME}_${comp}_FOUND)
|
|
if(${_NAME}_FIND_REQUIRED_${comp})
|
|
set(${_NAME}_FOUND FALSE)
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endmacro()
|
|
|
|
get_filename_component(prefix "${CMAKE_CURRENT_LIST_DIR}@cmake_prefix_relpath@" ABSOLUTE)
|
|
set(exec_prefix "@exec_prefix@")
|
|
set(bindir "@bindir@")
|
|
set(libdir "@libdir@")
|
|
set(includedir "@includedir@")
|
|
|
|
set_and_check(SDL2_PREFIX "${prefix}")
|
|
set_and_check(SDL2_EXEC_PREFIX "${exec_prefix}")
|
|
set_and_check(SDL2_BINDIR "${bindir}")
|
|
set_and_check(SDL2_INCLUDE_DIR "${includedir}/SDL2")
|
|
set_and_check(SDL2_LIBDIR "${libdir}")
|
|
set(SDL2_INCLUDE_DIRS "${includedir};${SDL2_INCLUDE_DIR}")
|
|
|
|
set(SDL2_LIBRARIES SDL2::SDL2)
|
|
set(SDL2_STATIC_LIBRARIES SDL2::SDL2-static)
|
|
set(SDL2MAIN_LIBRARY)
|
|
set(SDL2TEST_LIBRARY SDL2::SDL2test)
|
|
|
|
unset(prefix)
|
|
unset(exec_prefix)
|
|
unset(bindir)
|
|
unset(libdir)
|
|
unset(includedir)
|
|
|
|
set(_sdl2_libraries "@SDL_LIBS@")
|
|
set(_sdl2_static_private_libs "@SDL_STATIC_LIBS@")
|
|
|
|
# Convert _sdl2_libraries to list and keep only libraries
|
|
string(REGEX MATCHALL "-[lm]([-a-zA-Z0-9._]+)" _sdl2_libraries "${_sdl2_libraries}")
|
|
string(REGEX REPLACE "^-l" "" _sdl2_libraries "${_sdl2_libraries}")
|
|
string(REGEX REPLACE ";-l" ";" _sdl2_libraries "${_sdl2_libraries}")
|
|
|
|
# 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}")
|
|
string(REGEX REPLACE "^-l" "" _sdl2_static_private_libs "${_sdl2_static_private_libs}")
|
|
string(REGEX REPLACE ";-l" ";" _sdl2_static_private_libs "${_sdl2_static_private_libs}")
|
|
|
|
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()
|
|
endif()
|
|
set(SDL2_SDL2main_FOUND TRUE)
|
|
else()
|
|
set(SDL2_SDL2main_FOUND FALSE)
|
|
endif()
|
|
unset(_sdl2main_library)
|
|
endif()
|
|
|
|
# Remove SDL2 since this is the "central" library
|
|
# Remove SDL2main since this will be provided by SDL2::SDL2main (if available)
|
|
# Remove mingw32 and cygwin since these are not needed when using `-Wl,--undefined,WinMain`
|
|
set(_sdl2_link_libraries ${_sdl2_libraries})
|
|
list(REMOVE_ITEM _sdl2_link_libraries SDL2 SDL2main mingw32 cygwin)
|
|
|
|
if(WIN32)
|
|
set(_sdl2_implib "${SDL2_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
|
set(_sdl2_dll "${SDL2_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
|
if(EXISTS "${_sdl2_implib}" AND EXISTS "${_sdl2_dll}")
|
|
if(NOT TARGET SDL2::SDL2)
|
|
add_library(SDL2::SDL2 SHARED IMPORTED)
|
|
set_target_properties(SDL2::SDL2 PROPERTIES
|
|
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}"
|
|
INTERFACE_LINK_LIBRARIES "${_sdl2_link_libraries}"
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
IMPORTED_IMPLIB "${_sdl2_implib}"
|
|
IMPORTED_LOCATION "${_sdl2_dll}"
|
|
)
|
|
endif()
|
|
set(SDL2_SDL2_FOUND TRUE)
|
|
else()
|
|
set(SDL2_SDL2_FOUND FALSE)
|
|
endif()
|
|
unset(_sdl2_implib)
|
|
unset(_sdl2_dll)
|
|
else()
|
|
set(_sdl2_shared "${SDL2_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
|
if(EXISTS "${_sdl2_shared}")
|
|
if(NOT TARGET SDL2::SDL2)
|
|
add_library(SDL2::SDL2 SHARED IMPORTED)
|
|
set_target_properties(SDL2::SDL2 PROPERTIES
|
|
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}"
|
|
INTERFACE_LINK_LIBRARIES "${_sdl2_link_libraries}"
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
IMPORTED_LOCATION "${_sdl2_shared}"
|
|
)
|
|
endif()
|
|
set(SDL2_SDL2_FOUND TRUE)
|
|
else()
|
|
set(SDL2_SDL2_FOUND FALSE)
|
|
endif()
|
|
unset(_sdl2_shared)
|
|
endif()
|
|
|
|
set(_sdl2_static "${SDL2_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
|
if(EXISTS "${_sdl2_static}")
|
|
if(NOT TARGET SDL2::SDL2-static)
|
|
add_library(SDL2::SDL2-static STATIC IMPORTED)
|
|
set_target_properties(SDL2::SDL2-static
|
|
PROPERTIES
|
|
IMPORTED_LOCATION "${_sdl2_static}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}"
|
|
INTERFACE_LINK_LIBRARIES "${_sdl2_link_libraries};${_sdl2_static_private_libs}"
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
)
|
|
endif()
|
|
set(SDL2_SDL2-static_FOUND TRUE)
|
|
else()
|
|
set(SDL2_SDL2-static_FOUND FALSE)
|
|
endif()
|
|
unset(_sdl2_static)
|
|
|
|
unset(_sdl2_link_libraries)
|
|
|
|
set(_sdl2test_library "${SDL2_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2_test${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
|
if(EXISTS "${_sdl2test_library}")
|
|
if(NOT TARGET SDL2::SDL2test)
|
|
add_library(SDL2::SDL2test STATIC IMPORTED)
|
|
set_target_properties(SDL2::SDL2test
|
|
PROPERTIES
|
|
IMPORTED_LOCATION "_sdl2test_library"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}"
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
)
|
|
endif()
|
|
set(SDL2_SDL2test_FOUND TRUE)
|
|
else()
|
|
set(SDL2_SDL2test_FOUND FALSE)
|
|
endif()
|
|
unset(_sdl2test_library)
|
|
|
|
# Copied from `configure_package_config_file`
|
|
macro(check_required_components _NAME)
|
|
foreach(comp ${${_NAME}_FIND_COMPONENTS})
|
|
if(NOT ${_NAME}_${comp}_FOUND)
|
|
if(${_NAME}_FIND_REQUIRED_${comp})
|
|
set(${_NAME}_FOUND FALSE)
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endmacro()
|
|
|
|
check_required_components(SDL2)
|