SDL_ttf: cmake: make sdl3-ttf.pc relocatable

From 3b1def8c9f78c1a236268a2f6f15597f60580ed3 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 17 Jul 2023 18:38:10 +0200
Subject: [PATCH] cmake: make sdl3-ttf.pc relocatable

---
 CMakeLists.txt                | 13 ++++++-------
 cmake/SDL3_ttfConfig.cmake.in | 18 +++++++++++++++++-
 cmake/sdl3-ttf.pc.in          |  2 +-
 3 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6d414aeb..54e16988 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -286,6 +286,7 @@ if(SDL3TTF_INSTALL)
         set(SDL3TTF_INSTALL_CMAKEDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake")
     endif()
     set(SDL3TTF_INSTALL_CMAKEDIR_ROOT "${SDL3TTF_INSTALL_CMAKEDIR_DEFAULT}" CACHE STRING "Location where to install SDL3_ttfConfig.cmake")
+    set(SDLTTF_PKGCONFIG_INSTALLDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
 
     if(WIN32 AND NOT MINGW)
         set(SDL3TTF_INSTALL_CMAKEDIR "${SDL3TTF_INSTALL_CMAKEDIR_ROOT}")
@@ -315,19 +316,17 @@ if(SDL3TTF_INSTALL)
         COMPONENT devel
     )
 
+    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}")
+    set(SDL_PKGCONFIG_PREFIX "\${pcfiledir}/${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
+
     string(JOIN " " PC_REQUIRES ${PC_REQUIRES})
     string(JOIN " " PC_LIBS ${PC_LIBS})
     configure_file(cmake/sdl3-ttf.pc.in sdl3-ttf.pc @ONLY)
 
-    if(CMAKE_SYSTEM_NAME MATCHES FreeBSD)
-        # FreeBSD uses ${PREFIX}/libdata/pkgconfig
-        set(PC_DESTDIR "libdata/pkgconfig")
-    else()
-        set(PC_DESTDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
-    endif()
     # Always install sdl3-ttf.pc file: libraries might be different between config modes
     install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdl3-ttf.pc"
-        DESTINATION "${PC_DESTDIR}" COMPONENT devel)
+        DESTINATION "${SDLTTF_PKGCONFIG_INSTALLDIR}" COMPONENT devel)
 
     install(FILES "LICENSE.txt"
         DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}"
diff --git a/cmake/SDL3_ttfConfig.cmake.in b/cmake/SDL3_ttfConfig.cmake.in
index 06885cea..4680645b 100644
--- a/cmake/SDL3_ttfConfig.cmake.in
+++ b/cmake/SDL3_ttfConfig.cmake.in
@@ -48,6 +48,22 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3_ttf-static-targets.cmake")
     include("${CMAKE_CURRENT_LIST_DIR}/SDL3_ttf-static-targets.cmake")
 endif()
 
+function(_sdl_create_target_alias_compat NEW_TARGET TARGET)
+    if(CMAKE_VERSION VERSION_LESS "3.18")
+        # Aliasing local targets is not supported on CMake < 3.18, so make it global.
+        add_library(${NEW_TARGET} INTERFACE IMPORTED)
+        set_target_properties(${NEW_TARGET} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET}")
+    else()
+        add_library(${NEW_TARGET} ALIAS ${TARGET})
+    endif()
+endfunction()
 
-if(NOT SDL3TTF_VENDORED)
+# Make sure SDL3_ttf::SDL3_ttf always exists
+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()
+        _sdl_create_target_alias_compat(SDL3_ttf::SDL3_ttf SDL3_ttf::SDL3_ttf-static)
+    endif()
 endif()
+
diff --git a/cmake/sdl3-ttf.pc.in b/cmake/sdl3-ttf.pc.in
index d809cb0d..6061b439 100644
--- a/cmake/sdl3-ttf.pc.in
+++ b/cmake/sdl3-ttf.pc.in
@@ -1,4 +1,4 @@
-prefix=@CMAKE_INSTALL_PREFIX@
+prefix=@SDL_PKGCONFIG_PREFIX@
 exec_prefix=${prefix}
 libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
 includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@