From 6d11515873f75b290298a3e6be0d6f1dc733f30e Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sun, 15 Jan 2023 20:01:58 +0100
Subject: [PATCH] cmake: make sdl3.pc relocatable
---
CMakeLists.txt | 86 ++++++++++++++++++++++++++----------------------
cmake/sdl3.pc.in | 2 +-
2 files changed, 47 insertions(+), 41 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 86b7d478c253..52fe32684f07 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2892,37 +2892,6 @@ else()
set(sdl_static_libname "SDL3")
endif()
-# Clean up variables for sdl3.pc
-
-if(SDL_SHARED)
- set(PKGCONFIG_LIBS_PRIV "\nLibs.private:")
-else()
- set(PKGCONFIG_LIBS_PRIV "")
-endif()
-
-# Clean up the different lists
-listtostr(SDL_EXTRA_LIBS EXTRA_LIBS_L "-l")
-set(SDL_PC_STATIC_LIBS ${SDL_EXTRA_LDFLAGS} ${EXTRA_LIBS_L})
-list(REMOVE_DUPLICATES SDL_PC_STATIC_LIBS)
-listtostr(SDL_PC_STATIC_LIBS SDL_PC_STATIC_LIBS)
-listtostr(SDL_PC_LIBS SDL_PC_LIBS)
-listtostr(SDL_PC_CFLAGS SDL_PC_CFLAGS)
-listtostr(SDL_PC_PRIVATE_REQUIRES SDL_PC_PRIVATE_REQUIRES)
-string(REGEX REPLACE "-lSDL3( |$)" "-l${sdl_static_libname} " SDL_PC_STATIC_LIBS "${SDL_PC_STATIC_LIBS}")
-if(NOT SDL_SHARED)
- string(REGEX REPLACE "-lSDL3( |$)" "-l${sdl_static_libname} " SDL_PC_LIBS "${SDL_PC_LIBS}")
-endif()
-
-if(SDL_STATIC AND SDL_SHARED AND NOT sdl_static_libname STREQUAL "SDL3")
- message(STATUS "\"pkg-config --static --libs sdl3\" will return invalid information")
-endif()
-
-# message(STATUS "SDL_PC_CFLAGS: ${SDL_PC_CFLAGS}")
-# message(STATUS "SDL_PC_LIBS: ${SDL_PC_LIBS}")
-# message(STATUS "SDL_PC_STATIC_LIBS: ${SDL_PC_STATIC_LIBS}")
-
-configure_file(cmake/sdl3.pc.in sdl3.pc @ONLY)
-
macro(check_add_debug_flag FLAG SUFFIX)
check_c_compiler_flag(${FLAG} HAS_C_FLAG_${SUFFIX})
if (HAS_C_FLAG_${SUFFIX})
@@ -3269,13 +3238,20 @@ if(NOT SDL3_DISABLE_INSTALL)
endif()
set(SDL_INSTALL_CMAKEDIR_ROOT "${SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL3Config.cmake related files (SDL3 subfolder for MSVC projects)")
+ if(FREEBSD)
+ # FreeBSD uses ${PREFIX}/libdata/pkgconfig
+ set(SDL_PKGCONFIG_INSTALLDIR "libdata/pkgconfig")
+ else()
+ set(SDL_PKGCONFIG_INSTALLDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+ endif()
+
if(WINDOWS AND NOT MINGW)
set(SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_ROOT}")
set(LICENSES_PREFIX "licenses/SDL3")
else()
set(SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_ROOT}/SDL3")
set(LICENSES_PREFIX "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}")
- endif ()
+ endif()
##### Installation targets #####
@@ -3300,7 +3276,44 @@ if(NOT SDL3_DISABLE_INSTALL)
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()
- ##### Export files #####
+ ##### sdl3.pc #####
+
+ # Clean up variables for sdl3.pc
+ if(SDL_SHARED)
+ set(PKGCONFIG_LIBS_PRIV "\nLibs.private:")
+ else()
+ set(PKGCONFIG_LIBS_PRIV "")
+ endif()
+
+ # Clean up the different lists
+ listtostr(SDL_EXTRA_LIBS EXTRA_LIBS_L "-l")
+ set(SDL_PC_STATIC_LIBS ${SDL_EXTRA_LDFLAGS} ${EXTRA_LIBS_L})
+ list(REMOVE_DUPLICATES SDL_PC_STATIC_LIBS)
+ listtostr(SDL_PC_STATIC_LIBS SDL_PC_STATIC_LIBS)
+ listtostr(SDL_PC_LIBS SDL_PC_LIBS)
+ listtostr(SDL_PC_CFLAGS SDL_PC_CFLAGS)
+ listtostr(SDL_PC_PRIVATE_REQUIRES SDL_PC_PRIVATE_REQUIRES)
+ string(REGEX REPLACE "-lSDL3( |$)" "-l${sdl_static_libname} " SDL_PC_STATIC_LIBS "${SDL_PC_STATIC_LIBS}")
+ if(NOT SDL_SHARED)
+ string(REGEX REPLACE "-lSDL3( |$)" "-l${sdl_static_libname} " SDL_PC_LIBS "${SDL_PC_LIBS}")
+ endif()
+
+ if(SDL_STATIC AND SDL_SHARED AND NOT sdl_static_libname STREQUAL "SDL3")
+ message(STATUS "\"pkg-config --static --libs sdl3\" will return invalid information")
+ endif()
+
+ file(RELATIVE_PATH SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${CMAKE_INSTALL_PREFIX}/${SDL_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}")
+
+ # message(STATUS "SDL_PC_CFLAGS: ${SDL_PC_CFLAGS}")
+ # message(STATUS "SDL_PC_LIBS: ${SDL_PC_LIBS}")
+ # message(STATUS "SDL_PC_STATIC_LIBS: ${SDL_PC_STATIC_LIBS}")
+
+ configure_file(cmake/sdl3.pc.in sdl3.pc @ONLY)
+ install(FILES ${SDL3_BINARY_DIR}/sdl3.pc DESTINATION "${SDL_PKGCONFIG_INSTALLDIR}")
+
+ ##### CMake Export files #####
include(CMakePackageConfigHelpers)
configure_package_config_file(cmake/SDL3Config.cmake.in SDL3Config.cmake
@@ -3371,13 +3384,6 @@ if(NOT SDL3_DISABLE_INSTALL)
endif()
install(FILES "LICENSE.txt" DESTINATION "${LICENSES_PREFIX}")
- if(FREEBSD)
- # FreeBSD uses ${PREFIX}/libdata/pkgconfig
- install(FILES ${SDL3_BINARY_DIR}/sdl3.pc DESTINATION "libdata/pkgconfig")
- else()
- install(FILES ${SDL3_BINARY_DIR}/sdl3.pc
- DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
- endif()
endif()
##### Uninstall target #####
diff --git a/cmake/sdl3.pc.in b/cmake/sdl3.pc.in
index f18cc1e75624..e1645c9a887e 100644
--- a/cmake/sdl3.pc.in
+++ b/cmake/sdl3.pc.in
@@ -1,6 +1,6 @@
# sdl pkg-config source file
-prefix=@CMAKE_INSTALL_PREFIX@
+prefix=@SDL_PKGCONFIG_PREFIX@
exec_prefix=${prefix}
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@