SDL_ttf: Add 'd' debug suffix + support shared/static parallel install

From 73a9f4bd8fa596d19e0590b59fabecf25042bf6f Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Thu, 12 May 2022 03:22:20 +0200
Subject: [PATCH] Add 'd' debug suffix + support shared/static parallel install

---
 CMakeLists.txt                                | 36 +++++++++++++------
 ...config.cmake.in => SDL2_ttfConfig.cmake.in |  0
 2 files changed, 26 insertions(+), 10 deletions(-)
 rename SDL2_ttf-config.cmake.in => SDL2_ttfConfig.cmake.in (100%)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c36d9d2..a187edb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,6 +7,10 @@ set(MICRO_VERSION 0)
 set(SDL_TTF_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}")
 set(SDL_REQUIRED_VERSION 2.0.10)
 
+# Set defaults preventing destination file conflicts
+set(SDL_CMAKE_DEBUG_POSTFIX "d"
+    CACHE STRING "Name suffix for debug builds")
+
 # Calculate a libtool-like version number
 math(EXPR BINARY_AGE "${MINOR_VERSION} * 100 + ${MICRO_VERSION}")
 if(MINOR_VERSION MATCHES "[02468]$")
@@ -92,11 +96,19 @@ option(BUILD_SAMPLES "Build the SDL2_ttf sample program(s)" ON)
 option(BUILD_SHARED_LIBS "Build the library as a shared library" ON)
 option(TTF_DISABLE_INSTALL "Disable installing SDL2_ttf" OFF)
 
+if(BUILD_SHARED_LIBS)
+    set(sdl2_ttf_export_name SDL2_ttf)
+    set(sdl2_ttf_install_name_infix shared)
+else()
+    set(sdl2_ttf_export_name SDL2_ttf-static)
+    set(sdl2_ttf_install_name_infix static)
+endif()
+
 add_library(SDL2_ttf
     SDL_ttf.c
     SDL_ttf.h
 )
-add_library(SDL2_ttf::SDL2_ttf ALIAS SDL2_ttf)
+add_library(SDL2_ttf::${sdl2_ttf_export_name} ALIAS SDL2_ttf)
 
 target_compile_definitions(SDL2_ttf PRIVATE
     SDL_BUILD_MAJOR_VERSION=${MAJOR_VERSION}
@@ -117,8 +129,8 @@ set(PC_REQUIRES)
 if (TTF_WITH_HARFBUZZ)
     target_compile_definitions(SDL2_ttf PRIVATE TTF_USE_HARFBUZZ=1)
     if (TTF_WITH_HARFBUZZ_VENDORED)
-        set(HB_BUILD_UTILS OFF)
-        set(SKIP_INSTALL_LIBRARIES ON)
+        set(HB_BUILD_UTILS OFF CACHE BOOL "harfbuzz build utils" FORCE)
+        set(SKIP_INSTALL_LIBRARIES ON CACHE BOOL "harfbuzz install option" FORCE)
         set(HB_HAVE_FREETYPE ${TTF_WITH_FREETYPE} CACHE BOOL "harfbuzz freetype helpers" FORCE)
         add_subdirectory(external/harfbuzz EXCLUDE_FROM_ALL)
         list(APPEND INSTALL_EXTRA_TARGETS harfbuzz)
@@ -164,9 +176,13 @@ endif()
 set_target_properties(SDL2_ttf PROPERTIES
     DEFINE_SYMBOL DLL_EXPORT
     PUBLIC_HEADER SDL_ttf.h
-    EXPORT_NAME SDL2_ttf
+    EXPORT_NAME ${sdl2_ttf_export_name}
     C_VISIBILITY_PRESET "hidden"
 )
+if (NOT ANDROID)
+    set_target_properties(SDL2_ttf PROPERTIES
+        DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}")
+endif()
 
 if (APPLE)
     # TODO: Use DYLIB_COMPATIBILITY_VERSION, DYLIB_CURRENT_VERSION here
@@ -220,16 +236,16 @@ if (NOT TTF_DISABLE_INSTALL)
         set(PKG_PREFIX "${CMAKE_INSTALL_LIBDIR}/cmake/SDL2_ttf")
     endif ()
 
-    configure_package_config_file(SDL2_ttf-config.cmake.in SDL2_ttf-config.cmake
+    configure_package_config_file(SDL2_ttfConfig.cmake.in SDL2_ttfConfig.cmake
         INSTALL_DESTINATION "${PKG_PREFIX}"
     )
-    write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL2_ttf-config-version.cmake"
+    write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL2_ttfConfigVersion.cmake"
         VERSION ${SDL_TTF_VERSION}
         COMPATIBILITY AnyNewerVersion
     )
 
     install(EXPORT SDL2_ttfTargets
-        FILE SDL2_ttf-targets.cmake
+        FILE SDL2_ttf-${sdl2_ttf_install_name_infix}-targets.cmake
         NAMESPACE SDL2_ttf::
         DESTINATION "${PKG_PREFIX}"
     )
@@ -256,8 +272,8 @@ if (NOT TTF_DISABLE_INSTALL)
 
     install(
         FILES
-            "${CMAKE_CURRENT_BINARY_DIR}/SDL2_ttf-config.cmake"
-            "${CMAKE_CURRENT_BINARY_DIR}/SDL2_ttf-config-version.cmake"
+            "${CMAKE_CURRENT_BINARY_DIR}/SDL2_ttfConfig.cmake"
+            "${CMAKE_CURRENT_BINARY_DIR}/SDL2_ttfConfigVersion.cmake"
         DESTINATION ${PKG_PREFIX}
         COMPONENT devel
     )
@@ -281,7 +297,7 @@ if (NOT TTF_DISABLE_INSTALL)
                 target_link_libraries(${prog} PRIVATE mingw32)
                 target_link_options(${prog} PRIVATE -mwindows)
             endif()
-            target_link_libraries(${prog} PRIVATE SDL2_ttf::SDL2_ttf)
+            target_link_libraries(${prog} PRIVATE SDL2_ttf::${sdl2_ttf_export_name})
             if (TARGET SDL2::SDL2main)
                 target_link_libraries(${prog} PRIVATE SDL2::SDL2main)
             endif()
diff --git a/SDL2_ttf-config.cmake.in b/SDL2_ttfConfig.cmake.in
similarity index 100%
rename from SDL2_ttf-config.cmake.in
rename to SDL2_ttfConfig.cmake.in