f0e72be285
My goal is to reduce our need on sfml_find_package until it can finally be removed. It's preferred to simply use find_package to find 3rd party projects. I had to add IMPORTED targets to some of our find modules so that we could get away from using INTERFACE libraries for external code. That also implied that our find moduels need to be installed so that users have access to them when processing SFML's config module.
91 lines
3.7 KiB
CMake
91 lines
3.7 KiB
CMake
# in case of static linking, we must also define the list of all the dependencies of SFML libraries
|
|
if(SFML_STATIC_LIBRARIES)
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
|
|
|
include(CMakeFindDependencyMacro)
|
|
|
|
# detect the OS
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
|
set(FIND_SFML_OS_WINDOWS 1)
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|
set(FIND_SFML_OS_LINUX 1)
|
|
|
|
if(@SFML_USE_DRM@)
|
|
set(FIND_SFML_USE_DRM 1)
|
|
endif()
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
|
set(FIND_SFML_OS_FREEBSD 1)
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "iOS")
|
|
set(FIND_SFML_OS_IOS 1)
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
set(FIND_SFML_OS_MACOS 1)
|
|
endif()
|
|
|
|
# start with an empty list
|
|
set(FIND_SFML_DEPENDENCIES_NOTFOUND)
|
|
|
|
# macro that searches for a 3rd-party library
|
|
function(sfml_bind_dependency)
|
|
cmake_parse_arguments(THIS "" "TARGET;FRIENDLY_NAME" "SEARCH_NAMES" ${ARGN})
|
|
if(THIS_UNPARSED_ARGUMENTS)
|
|
message(FATAL_ERROR "Unknown arguments when calling sfml_bind_dependency: ${THIS_UNPARSED_ARGUMENTS}")
|
|
endif()
|
|
|
|
# No lookup in environment variables (PATH on Windows), as they may contain wrong library versions
|
|
find_library(${THIS_FRIENDLY_NAME}_LIB NAMES ${THIS_SEARCH_NAMES}
|
|
PATHS ${FIND_SFML_PATHS} PATH_SUFFIXES lib NO_SYSTEM_ENVIRONMENT_PATH)
|
|
mark_as_advanced(${THIS_FRIENDLY_NAME}_LIB)
|
|
if(${THIS_FRIENDLY_NAME}_LIB)
|
|
set_property(TARGET ${THIS_TARGET} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${${THIS_FRIENDLY_NAME}_LIB}")
|
|
else()
|
|
set(FIND_SFML_DEPENDENCIES_NOTFOUND "${FIND_SFML_DEPENDENCIES_NOTFOUND} ${THIS_FRIENDLY_NAME}" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
# SFML::Window
|
|
list(FIND SFML_FIND_COMPONENTS "Window" FIND_SFML_WINDOW_COMPONENT_INDEX)
|
|
if(FIND_SFML_WINDOW_COMPONENT_INDEX GREATER -1)
|
|
if(FIND_SFML_USE_DRM)
|
|
find_dependency(DRM)
|
|
find_dependency(GBM)
|
|
elseif(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD)
|
|
find_dependency(X11 REQUIRED COMPONENTS Xrandr Xcursor)
|
|
endif()
|
|
|
|
if(FIND_SFML_OS_LINUX)
|
|
find_dependency(UDev)
|
|
endif()
|
|
|
|
if(NOT FIND_SFML_OS_IOS)
|
|
if(NOT OpenGL_GL_PREFERENCE)
|
|
set(OpenGL_GL_PREFERENCE "LEGACY")
|
|
endif()
|
|
find_dependency(OpenGL COMPONENTS OpenGL)
|
|
endif()
|
|
endif()
|
|
|
|
# SFML::Graphics
|
|
list(FIND SFML_FIND_COMPONENTS "Graphics" FIND_SFML_GRAPHICS_COMPONENT_INDEX)
|
|
if(FIND_SFML_GRAPHICS_COMPONENT_INDEX GREATER -1)
|
|
sfml_bind_dependency(TARGET Freetype FRIENDLY_NAME "FreeType" SEARCH_NAMES "freetype")
|
|
endif()
|
|
|
|
# SFML::Audio
|
|
list(FIND SFML_FIND_COMPONENTS "Audio" FIND_SFML_AUDIO_COMPONENT_INDEX)
|
|
if(FIND_SFML_AUDIO_COMPONENT_INDEX GREATER -1)
|
|
sfml_bind_dependency(TARGET OpenAL FRIENDLY_NAME "OpenAL" SEARCH_NAMES "OpenAL" "openal" "openal32")
|
|
if(NOT FIND_SFML_OS_IOS)
|
|
sfml_bind_dependency(TARGET VORBIS FRIENDLY_NAME "VorbisFile" SEARCH_NAMES "vorbisfile")
|
|
sfml_bind_dependency(TARGET VORBIS FRIENDLY_NAME "VorbisEnc" SEARCH_NAMES "vorbisenc")
|
|
endif()
|
|
sfml_bind_dependency(TARGET VORBIS FRIENDLY_NAME "Vorbis" SEARCH_NAMES "vorbis")
|
|
sfml_bind_dependency(TARGET VORBIS FRIENDLY_NAME "Ogg" SEARCH_NAMES "ogg")
|
|
sfml_bind_dependency(TARGET FLAC FRIENDLY_NAME "FLAC" SEARCH_NAMES "FLAC")
|
|
endif()
|
|
|
|
if(FIND_SFML_DEPENDENCIES_NOTFOUND)
|
|
set(FIND_SFML_ERROR "SFML found but some of its dependencies are missing (${FIND_SFML_DEPENDENCIES_NOTFOUND})")
|
|
set(SFML_FOUND FALSE)
|
|
endif()
|
|
endif()
|