Prefer using IMPORTED targets where possible

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.
This commit is contained in:
Chris Thrasher 2023-08-15 01:39:53 -06:00
parent af7d6c2589
commit f0e72be285
8 changed files with 51 additions and 19 deletions

View File

@ -259,6 +259,9 @@ if(NOT SFML_BUILD_FRAMEWORKS)
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT devel COMPONENT devel
FILES_MATCHING PATTERN "*.hpp" PATTERN "*.inl") FILES_MATCHING PATTERN "*.hpp" PATTERN "*.inl")
install(DIRECTORY cmake/Modules/
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/SFML
COMPONENT devel)
if(SFML_GENERATE_PDB) if(SFML_GENERATE_PDB)
install(DIRECTORY ${PROJECT_BINARY_DIR}/lib/ install(DIRECTORY ${PROJECT_BINARY_DIR}/lib/

View File

@ -16,3 +16,8 @@ find_library(DRM_LIBRARY NAMES drm)
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(DRM DEFAULT_MSG DRM_LIBRARY DRM_INCLUDE_DIR) find_package_handle_standard_args(DRM DEFAULT_MSG DRM_LIBRARY DRM_INCLUDE_DIR)
add_library(DRM::DRM IMPORTED UNKNOWN)
set_target_properties(DRM::DRM PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${DRM_INCLUDE_DIR}/libdrm
IMPORTED_LOCATION ${DRM_LIBRARY})

View File

@ -12,3 +12,8 @@ find_library(EGL_LIBRARY NAMES EGL)
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR) find_package_handle_standard_args(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR)
add_library(EGL::EGL IMPORTED UNKNOWN)
set_target_properties(EGL::EGL PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${EGL_INCLUDE_DIR}
IMPORTED_LOCATION ${EGL_LIBRARY})

View File

@ -16,3 +16,8 @@ find_library(GBM_LIBRARY NAMES gbm)
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GBM DEFAULT_MSG GBM_LIBRARY GBM_INCLUDE_DIR) find_package_handle_standard_args(GBM DEFAULT_MSG GBM_LIBRARY GBM_INCLUDE_DIR)
add_library(GBM::GBM IMPORTED UNKNOWN)
set_target_properties(GBM::GBM PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${GBM_INCLUDE_DIR}
IMPORTED_LOCATION ${GBM_LIBRARY})

View File

@ -12,3 +12,8 @@ find_library(GLES_LIBRARY NAMES GLESv1_CM)
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GLES DEFAULT_MSG GLES_LIBRARY GLES_INCLUDE_DIR) find_package_handle_standard_args(GLES DEFAULT_MSG GLES_LIBRARY GLES_INCLUDE_DIR)
add_library(GLES::GLES IMPORTED UNKNOWN)
set_target_properties(GLES::GLES PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${GLES_INCLUDE_DIR}
IMPORTED_LOCATION ${GLES_LIBRARY})

View File

@ -50,4 +50,12 @@ else()
endif() endif()
endif() endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(UDev DEFAULT_MSG UDEV_INCLUDE_DIR UDEV_LIBRARIES)
mark_as_advanced(UDEV_INCLUDE_DIR UDEV_LIBRARIES) mark_as_advanced(UDEV_INCLUDE_DIR UDEV_LIBRARIES)
add_library(UDev::UDev IMPORTED UNKNOWN)
set_target_properties(UDev::UDev PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${UDEV_INCLUDE_DIR}
IMPORTED_LOCATION ${UDEV_LIBRARIES})

View File

@ -1,5 +1,7 @@
# in case of static linking, we must also define the list of all the dependencies of SFML libraries # in case of static linking, we must also define the list of all the dependencies of SFML libraries
if(SFML_STATIC_LIBRARIES) if(SFML_STATIC_LIBRARIES)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
include(CMakeFindDependencyMacro) include(CMakeFindDependencyMacro)
# detect the OS # detect the OS
@ -44,20 +46,21 @@ if(SFML_STATIC_LIBRARIES)
list(FIND SFML_FIND_COMPONENTS "Window" FIND_SFML_WINDOW_COMPONENT_INDEX) list(FIND SFML_FIND_COMPONENTS "Window" FIND_SFML_WINDOW_COMPONENT_INDEX)
if(FIND_SFML_WINDOW_COMPONENT_INDEX GREATER -1) if(FIND_SFML_WINDOW_COMPONENT_INDEX GREATER -1)
if(FIND_SFML_USE_DRM) if(FIND_SFML_USE_DRM)
sfml_bind_dependency(TARGET DRM FRIENDLY_NAME "drm" SEARCH_NAMES "drm") find_dependency(DRM)
sfml_bind_dependency(TARGET GBM FRIENDLY_NAME "gbm" SEARCH_NAMES "gbm") find_dependency(GBM)
elseif(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD) elseif(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD)
find_dependency(X11 REQUIRED COMPONENTS Xrandr Xcursor) find_dependency(X11 REQUIRED COMPONENTS Xrandr Xcursor)
endif() endif()
if(FIND_SFML_OS_LINUX) if(FIND_SFML_OS_LINUX)
sfml_bind_dependency(TARGET UDev FRIENDLY_NAME "UDev" SEARCH_NAMES "udev" "libudev") find_dependency(UDev)
endif() endif()
if(FIND_SFML_OS_WINDOWS) if(NOT FIND_SFML_OS_IOS)
set_property(TARGET OpenGL APPEND PROPERTY INTERFACE_LINK_LIBRARIES "OpenGL32") if(NOT OpenGL_GL_PREFERENCE)
elseif(NOT FIND_SFML_OS_IOS) set(OpenGL_GL_PREFERENCE "LEGACY")
sfml_bind_dependency(TARGET OpenGL FRIENDLY_NAME "OpenGL" SEARCH_NAMES "OpenGL" "GL") endif()
find_dependency(OpenGL COMPONENTS OpenGL)
endif() endif()
endif() endif()

View File

@ -278,10 +278,9 @@ sfml_add_library(Window
# DRM libraries # DRM libraries
if(SFML_OS_LINUX OR SFML_OS_FREEBSD OR SFML_OS_OPENBSD OR SFML_OS_NETBSD) if(SFML_OS_LINUX OR SFML_OS_FREEBSD OR SFML_OS_OPENBSD OR SFML_OS_NETBSD)
if(SFML_USE_DRM) if(SFML_USE_DRM)
sfml_find_package(DRM DRM_INCLUDE_DIR DRM_LIBRARY) find_package(DRM REQUIRED)
target_include_directories(sfml-window PRIVATE ${DRM_INCLUDE_DIR}/libdrm) find_package(GBM REQUIRED)
sfml_find_package(GBM GBM_INCLUDE_DIR GBM_LIBRARY) target_link_libraries(sfml-window PRIVATE DRM::DRM GBM::GBM EGL)
target_link_libraries(sfml-window PRIVATE drm gbm EGL)
else() else()
find_package(X11 REQUIRED COMPONENTS Xrandr Xcursor) find_package(X11 REQUIRED COMPONENTS Xrandr Xcursor)
target_link_libraries(sfml-window PRIVATE X11::X11 X11::Xrandr X11::Xcursor) target_link_libraries(sfml-window PRIVATE X11::X11 X11::Xrandr X11::Xcursor)
@ -311,13 +310,12 @@ endif()
if(SFML_OS_IOS) if(SFML_OS_IOS)
target_link_libraries(sfml-window PRIVATE "-framework OpenGLES") target_link_libraries(sfml-window PRIVATE "-framework OpenGLES")
elseif(SFML_OS_ANDROID) elseif(SFML_OS_ANDROID)
sfml_find_package(GLES GLES_INCLUDE_DIR GLES_LIBRARY) find_package(EGL REQUIRED)
sfml_find_package(EGL EGL_INCLUDE_DIR EGL_LIBRARY) find_package(GLES REQUIRED)
target_link_libraries(sfml-window PRIVATE EGL) target_link_libraries(sfml-window PRIVATE EGL::EGL GLES::GLES)
target_link_libraries(sfml-window PRIVATE GLES)
else() else()
sfml_find_package(OpenGL OPENGL_INCLUDE_DIR OPENGL_gl_LIBRARY) find_package(OpenGL REQUIRED COMPONENTS OpenGL)
target_link_libraries(sfml-window PRIVATE OpenGL) target_link_libraries(sfml-window PRIVATE OpenGL::GL)
endif() endif()
if(SFML_OS_WINDOWS AND NOT SFML_COMPILER_MSVC) if(SFML_OS_WINDOWS AND NOT SFML_COMPILER_MSVC)
@ -329,8 +327,8 @@ if(SFML_OS_WINDOWS AND NOT SFML_COMPILER_MSVC)
endif() endif()
if(SFML_OS_LINUX) if(SFML_OS_LINUX)
sfml_find_package(UDev UDEV_INCLUDE_DIR UDEV_LIBRARIES) find_package(UDev REQUIRED)
target_link_libraries(sfml-window PRIVATE UDev dl) target_link_libraries(sfml-window PRIVATE UDev::UDev dl)
elseif(SFML_OS_WINDOWS) elseif(SFML_OS_WINDOWS)
target_link_libraries(sfml-window PRIVATE winmm gdi32) target_link_libraries(sfml-window PRIVATE winmm gdi32)
elseif(SFML_OS_FREEBSD) elseif(SFML_OS_FREEBSD)