SDL_ttf: cmake: support find_package(SDL3_ttf) using SDL3_ttf from a build directory

From f5eae1cf3b76670554d4409191f493f6bb9f7042 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 1 Mar 2025 18:42:46 +0100
Subject: [PATCH] cmake: support find_package(SDL3_ttf) using SDL3_ttf from a
 build directory

---
 CMakeLists.txt                |  3 +++
 cmake/SDL3_ttfConfig.cmake.in | 11 ++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6af148fa..5cdedaf7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -417,6 +417,7 @@ if(SDLTTF_INSTALL)
     endif()
 
     configure_package_config_file(cmake/SDL3_ttfConfig.cmake.in SDL3_ttfConfig.cmake
+        NO_SET_AND_CHECK_MACRO
         INSTALL_DESTINATION "${SDLTTF_INSTALL_CMAKEDIR}"
     )
     write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL3_ttfConfigVersion.cmake"
@@ -446,6 +447,8 @@ if(SDLTTF_INSTALL)
         COMPONENT devel
     )
 
+    export(TARGETS ${sdl3_ttf_target_name} NAMESPACE "SDL3_ttf::" FILE "${sdl3_ttf_target_name}-targets.cmake")
+
     if(SDLTTF_RELOCATABLE)
       file(RELATIVE_PATH SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${CMAKE_INSTALL_PREFIX}/${SDLTTF_PKGCONFIG_INSTALLDIR}" "${CMAKE_INSTALL_PREFIX}")
       string(REGEX REPLACE "[/]+$" "" SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
diff --git a/cmake/SDL3_ttfConfig.cmake.in b/cmake/SDL3_ttfConfig.cmake.in
index fc575e02..4600afd8 100644
--- a/cmake/SDL3_ttfConfig.cmake.in
+++ b/cmake/SDL3_ttfConfig.cmake.in
@@ -17,10 +17,13 @@ set(SDLTTF_FREETYPE @SDLTTF_FREETYPE_ENABLED@)
 set(SDLTTF_HARFBUZZ_REQUIRED_VERSION    @HARFBUZZ_REQUIRED_VERSION@)
 set(SDLTTF_SDL3_REQUIRED_VERSION        @SDL_REQUIRED_VERSION@)
 
+set(SDL3_ttf_SDL3_ttf-shared_FOUND FALSE)
 if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3_ttf-shared-targets.cmake")
     include("${CMAKE_CURRENT_LIST_DIR}/SDL3_ttf-shared-targets.cmake")
+    set(SDL3_ttf_SDL3_ttf-shared_FOUND TRUE)
 endif()
 
+set(SDL3_ttf_SDL3_ttf-static_FOUND FALSE)
 if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3_ttf-static-targets.cmake")
     if(SDLTTF_VENDORED)
         if(SDLTTF_HARFBUZZ AND NOT MSVC)
@@ -57,6 +60,7 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3_ttf-static-targets.cmake")
     endif()
 
     include("${CMAKE_CURRENT_LIST_DIR}/SDL3_ttf-static-targets.cmake")
+    set(SDL3_ttf_SDL3_ttf-static_FOUND TRUE)
 endif()
 
 function(_sdl_create_target_alias_compat NEW_TARGET TARGET)
@@ -73,8 +77,13 @@ endfunction()
 if(NOT TARGET SDL3_ttf::SDL3_ttf)
     if(TARGET SDL3_ttf::SDL3_ttf-shared)
         _sdl_create_target_alias_compat(SDL3_ttf::SDL3_ttf SDL3_ttf::SDL3_ttf-shared)
-    else()
+    elseif(TARGET SDL3_ttf::SDL3_ttf-static)
         _sdl_create_target_alias_compat(SDL3_ttf::SDL3_ttf SDL3_ttf::SDL3_ttf-static)
     endif()
 endif()
 
+if(NOT SDL3_ttf_COMPONENTS AND NOT TARGET SDL3_ttf::SDL3_ttf-shared AND NOT TARGET SDL3_ttf::SDL3_ttf-static)
+    set(SDL3_ttf_FOUND FALSE)
+endif()
+@PACKAGE_INIT@
+check_required_components(SDL3_ttf)