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@