sdlcommands.cmake 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. add_library(SDL3-collector INTERFACE)
  2. add_library(SDL3_test-collector INTERFACE)
  3. function(sdl_source_group prefix_directory)
  4. set(prefixed_list)
  5. file(TO_CMAKE_PATH ${prefix_directory} normalized_prefix_path)
  6. foreach(file in ${ARGN})
  7. file(TO_CMAKE_PATH ${file} normalized_path)
  8. string(FIND "${normalized_path}" ${normalized_prefix_path} position)
  9. if("${position}" EQUAL 0)
  10. list(APPEND prefixed_list ${file})
  11. endif()
  12. endforeach()
  13. if(prefixed_list)
  14. source_group(TREE ${prefix_directory} FILES ${prefixed_list})
  15. endif()
  16. endfunction()
  17. # Use sdl_glob_sources to add glob sources to SDL3-shared, to SDL3-static, or to both.
  18. function(sdl_glob_sources)
  19. cmake_parse_arguments(ARGS "" "" "SHARED;STATIC" ${ARGN})
  20. if(ARGS_SHARED)
  21. file(GLOB shared_sources CONFIGURE_DEPENDS ${ARGS_SHARED})
  22. endif()
  23. if(ARGS_STATIC)
  24. file(GLOB static_sources CONFIGURE_DEPENDS ${ARGS_STATIC})
  25. endif()
  26. if(ARGS_UNPARSED_ARGUMENTS)
  27. file(GLOB both_sources CONFIGURE_DEPENDS ${ARGS_UNPARSED_ARGUMENTS})
  28. endif()
  29. if(TARGET SDL3-shared)
  30. target_sources(SDL3-shared PRIVATE ${shared_sources} ${both_sources})
  31. endif()
  32. if(TARGET SDL3-static)
  33. target_sources(SDL3-static PRIVATE ${static_sources} ${both_sources})
  34. endif()
  35. sdl_source_group(${PROJECT_SOURCE_DIR} ${shared_sources} ${shared_sources} ${both_sources})
  36. set_property(TARGET SDL3-collector APPEND PROPERTY INTERFACE_SOURCES ${shared_sources} ${static_sources} ${both_sources})
  37. endfunction()
  38. # Use sdl_sources to add sources to SDL3-shared, to SDL3-static, or to both.
  39. function(sdl_sources)
  40. cmake_parse_arguments(ARGS "" "" "SHARED;STATIC" ${ARGN})
  41. if(TARGET SDL3-shared)
  42. target_sources(SDL3-shared PRIVATE ${ARGS_SHARED} ${ARGS_UNPARSED_ARGUMENTS})
  43. endif()
  44. if(TARGET SDL3-static)
  45. target_sources(SDL3-static PRIVATE ${ARGS_STATIC} ${ARGS_UNPARSED_ARGUMENTS})
  46. endif()
  47. sdl_source_group(${PROJECT_SOURCE_DIR} ${ARGS_SHARED} ${ARGS_STATIC} ${ARGS_UNPARSED_ARGUMENTS})
  48. set_property(TARGET SDL3-collector APPEND PROPERTY INTERFACE_SOURCES ${ARGS_SHARED} ${ARGS_STATIC} ${ARGS_UNPARSED_ARGUMENTS})
  49. endfunction()
  50. # Use sdl_generic_link_dependency to describe a private dependency. All options are optional.
  51. # Users should use sdl_link_dependency and sdl_test_link_dependency instead
  52. # - SHARED_TARGETS: shared targets to add this dependency to
  53. # - STATIC_TARGETS: static targets to add this dependency to
  54. # - COLLECTOR: target that stores information, for pc and Config.cmake generation.
  55. # - INCLUDES: the include directories of the dependency
  56. # - PKG_CONFIG_PREFIX: name of the prefix, when using the functions of FindPkgConfig
  57. # - PKG_CONFIG_SPECS: pkg-config spec, used as argument for the functions of FindPkgConfig
  58. # - PKG_CONFIG_LIBS: libs that will only end up in the Libs.private of the .pc file
  59. # - PKG_CONFIG_LINK_OPTIONS: ldflags that will only end up in the Libs.private of sdl3.pc
  60. # - CMAKE_MODULE: CMake module name of the dependency, used as argument of find_package
  61. # - LIBS: list of libraries to link to (cmake and pkg-config)
  62. # - LINK_OPTIONS: list of link options (also used in pc file, unless PKG_CONFIG_LINK_OPTION is used)
  63. function(sdl_generic_link_dependency ID)
  64. cmake_parse_arguments(ARGS "" "COLLECTOR" "SHARED_TARGETS;STATIC_TARGETS;INCLUDES;PKG_CONFIG_LINK_OPTIONS;PKG_CONFIG_LIBS;PKG_CONFIG_PREFIX;PKG_CONFIG_SPECS;CMAKE_MODULE;PUBLIC_LIBS;LIBS;LINK_OPTIONS" ${ARGN})
  65. foreach(target IN LISTS ARGS_SHARED_TARGETS)
  66. if(TARGET ${target})
  67. target_include_directories(${target} SYSTEM PRIVATE ${ARGS_INCLUDES})
  68. target_link_libraries(${target} PRIVATE ${ARGS_LIBS})
  69. target_link_libraries(${target} PUBLIC ${ARGS_PUBLIC_LIBS})
  70. target_link_options(${target} PRIVATE ${ARGS_LINK_OPTIONS})
  71. endif()
  72. endforeach()
  73. foreach(target IN LISTS ARGS_STATIC_TARGETS)
  74. if(TARGET ${target})
  75. target_include_directories(${target} SYSTEM PRIVATE ${ARGS_INCLUDES})
  76. target_link_libraries(${target} PRIVATE ${ARGS_LIBS})
  77. target_link_libraries(${target} PUBLIC ${ARGS_PUBLIC_LIBS})
  78. target_link_options(${target} INTERFACE ${ARGS_LINK_OPTIONS})
  79. endif()
  80. endforeach()
  81. get_property(ids TARGET ${ARGS_COLLECTOR} PROPERTY INTERFACE_SDL_DEP_IDS)
  82. if(NOT ID IN_LIST ids)
  83. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_IDS ${ID})
  84. endif()
  85. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_PREFIX ${ARGS_PKG_CONFIG_PREFIX})
  86. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_SPECS ${ARGS_PKG_CONFIG_SPECS})
  87. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_LIBS ${ARGS_PKG_CONFIG_LIBS})
  88. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_LINK_OPTIONS ${ARGS_PKG_CONFIG_LINK_OPTIONS})
  89. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_${ID}_LIBS ${ARGS_LIBS})
  90. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_${ID}_LINK_OPTIONS ${ARGS_LINK_OPTIONS})
  91. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_${ID}_CMAKE_MODULE ${ARGS_CMAKE_MODULE})
  92. set_property(TARGET ${ARGS_COLLECTOR} APPEND PROPERTY INTERFACE_SDL_DEP_${ID}_INCLUDES ${ARGS_INCLUDES})
  93. endfunction()
  94. function(sdl_link_dependency )
  95. sdl_generic_link_dependency(${ARGN} COLLECTOR SDL3-collector SHARED_TARGETS SDL3-shared STATIC_TARGETS SDL3-static)
  96. endfunction()
  97. function(sdl_test_link_dependency )
  98. sdl_generic_link_dependency(${ARGN} COLLECTOR SDL3_test-collector STATIC_TARGETS SDL3_test)
  99. endfunction()
  100. function(sdl_compile_features)
  101. if(TARGET SDL3-shared)
  102. target_compile_features(SDL3-shared PRIVATE ${ARGN})
  103. endif()
  104. if(TARGET SDL3-static)
  105. target_compile_features(SDL3-static PRIVATE ${ARGN})
  106. endif()
  107. endfunction()
  108. macro(_get_ARGS_visibility)
  109. set(_conflict FALSE)
  110. set(visibility)
  111. if(ARGS_PRIVATE)
  112. set(visibility PRIVATE)
  113. elseif(ARGS_PUBLIC)
  114. if(visibility)
  115. set(_conflict TRUE)
  116. endif()
  117. set(visibility PUBLIC)
  118. elseif(ARGS_INTERFACE)
  119. if(visibility)
  120. set(_conflict TRUE)
  121. endif()
  122. set(visibility INTERFACE)
  123. endif()
  124. if(_conflict OR NOT visibility)
  125. message(FATAL_ERROR "PRIVATE/PUBLIC/INTERFACE must be used exactly once")
  126. endif()
  127. unset(_conflict)
  128. endmacro()
  129. # Use sdl_compile_definitions to add compile definitions to the SDL3 libraries.
  130. function(sdl_compile_definitions)
  131. cmake_parse_arguments(ARGS "PRIVATE;PUBLIC;INTERFACE;NO_EXPORT" "" "" ${ARGN})
  132. _get_ARGS_visibility()
  133. if(TARGET SDL3-shared)
  134. target_compile_definitions(SDL3-shared ${visibility} ${ARGS_UNPARSED_ARGUMENTS})
  135. endif()
  136. if(TARGET SDL3-static)
  137. target_compile_definitions(SDL3-static ${visibility} ${ARGS_UNPARSED_ARGUMENTS})
  138. endif()
  139. if(NOT ARGS_NO_EXPORT AND (ARGS_PUBLIC OR ARGS_INTERFACE))
  140. set_property(TARGET SDL3-collector APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS "${ARGS_UNPARSED_ARGUMENTS}")
  141. endif()
  142. endfunction()
  143. # Use sdl_compile_options to add compile options to the SDL3 libraries.
  144. function(sdl_compile_options)
  145. cmake_parse_arguments(ARGS "PRIVATE;PUBLIC;INTERFACE;NO_EXPORT" "" "" ${ARGN})
  146. _get_ARGS_visibility()
  147. set(escaped_opts ${ARGS_UNPARSED_ARGUMENTS})
  148. if(ARGS_NO_EXPORT)
  149. set(escaped_opts "$<BUILD_INTERFACE:${ARGS_UNPARSED_ARGUMENTS}>")
  150. endif()
  151. if(TARGET SDL3-shared)
  152. target_compile_options(SDL3-shared ${visibility} ${escaped_opts})
  153. endif()
  154. if(TARGET SDL3-static)
  155. target_compile_options(SDL3-static ${visibility} ${escaped_opts})
  156. endif()
  157. if(NOT ARGS_NO_EXPORT AND (ARGS_PUBLIC OR ARGS_INTERFACE))
  158. set_property(TARGET SDL3-collector APPEND PROPERTY INTERFACE_COMPILE_OPTIONS "${ARGS_UNPARSED_ARGUMENTS}")
  159. endif()
  160. endfunction()
  161. # Use sdl_include_directories to add include directories to the SDL3 libraries.
  162. function(sdl_include_directories)
  163. cmake_parse_arguments(ARGS "SYSTEM;BEFORE;AFTER;PRIVATE;PUBLIC;INTERFACE;NO_EXPORT" "" "" ${ARGN})
  164. set(system "")
  165. if(ARGS_SYSTEM)
  166. set(system "SYSTEM")
  167. endif()
  168. set(before_after )
  169. if(ARGS_AFTER)
  170. set(before_after "AFTER")
  171. endif()
  172. if(ARGS_BEFORE)
  173. if(before_after)
  174. message(FATAL_ERROR "before and after are exclusive options")
  175. endif()
  176. set(before_after "BEFORE")
  177. endif()
  178. _get_ARGS_visibility()
  179. if(TARGET SDL3-shared)
  180. target_include_directories(SDL3-shared ${system} ${before_after} ${visibility} ${ARGS_UNPARSED_ARGUMENTS})
  181. endif()
  182. if(TARGET SDL3-static)
  183. target_include_directories(SDL3-static ${system} ${before_after} ${visibility} ${ARGS_UNPARSED_ARGUMENTS})
  184. endif()
  185. if(NOT NO_EXPORT AND (ARGS_PUBLIC OR ARGS_INTERFACE))
  186. set_property(TARGET SDL3-collector APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${ARGS_UNPARSED_ARGUMENTS}")
  187. endif()
  188. endfunction()
  189. # Use sdl_link_directories to add link directories to the SDL3 libraries.
  190. function(sdl_link_directories)
  191. if(TARGET SDL3-shared)
  192. target_link_directories(SDL3-shared PRIVATE ${ARGN})
  193. endif()
  194. if(TARGET SDL3-static)
  195. target_link_directories(SDL3-static INTERFACE ${ARGN})
  196. endif()
  197. endfunction()
  198. # Use sdl_pc_link_options to add a link option, only visible in sdl3.pc
  199. function(sdl_pc_link_options)
  200. set_property(TARGET SDL3-collector APPEND PROPERTY INTERFACE_SDL_PC_LINK_OPTIONS "${ARGN}")
  201. endfunction()
  202. # Use sdl_pc_link_options to add a link option only to SDL3-shared
  203. function(sdl_shared_link_options)
  204. if(TARGET SDL3-shared)
  205. target_link_options(SDL3-shared PRIVATE ${ARGN})
  206. endif()
  207. endfunction()
  208. # Return minimum list of custom SDL CMake modules, used for finding dependencies of SDL.
  209. function(sdl_cmake_config_required_modules OUTPUT)
  210. set(cmake_modules)
  211. foreach(collector SDL3-collector SDL3_test-collector)
  212. get_property(ids TARGET ${collector} PROPERTY INTERFACE_SDL_DEP_IDS)
  213. foreach(ID IN LISTS ids)
  214. get_property(CMAKE_MODULE TARGET ${collector} PROPERTY INTERFACE_SDL_DEP_${ID}_CMAKE_MODULE)
  215. if(CMAKE_MODULE)
  216. if(EXISTS "${SDL3_SOURCE_DIR}/cmake/Find${CMAKE_MODULE}.cmake")
  217. list(APPEND cmake_modules "${SDL3_SOURCE_DIR}/cmake/Find${CMAKE_MODULE}.cmake")
  218. endif()
  219. endif()
  220. endforeach()
  221. if(cmake_modules)
  222. list(APPEND cmake_modules "${SDL3_SOURCE_DIR}/cmake/PkgConfigHelper.cmake")
  223. endif()
  224. endforeach()
  225. set(${OUTPUT} "${cmake_modules}" PARENT_SCOPE)
  226. endfunction()
  227. # Generate string for SDL3Config.cmake, finding all pkg-config dependencies of SDL3.
  228. function(sdl_cmake_config_find_pkg_config_commands OUTPUT)
  229. cmake_parse_arguments(ARGS "" "COLLECTOR;CONFIG_COMPONENT_FOUND_NAME" "" ${ARGN})
  230. if(NOT ARGS_COLLECTOR OR NOT ARGS_CONFIG_COMPONENT_FOUND_NAME)
  231. message(FATAL_ERROR "COLLECTOR AND CONFIG_COMPONENT_FOUND_NAME are required arguments")
  232. endif()
  233. get_property(ids TARGET ${ARGS_COLLECTOR} PROPERTY INTERFACE_SDL_DEP_IDS)
  234. set(static_pkgconfig_deps_checks)
  235. set(static_module_deps_checks)
  236. set(cmake_modules_seen)
  237. foreach(ID IN LISTS ids)
  238. get_property(PKG_CONFIG_PREFIX TARGET ${ARGS_COLLECTOR} PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_PREFIX)
  239. get_property(PKG_CONFIG_SPECS TARGET ${ARGS_COLLECTOR} PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_SPECS)
  240. get_property(CMAKE_MODULE TARGET ${ARGS_COLLECTOR} PROPERTY INTERFACE_SDL_DEP_${ID}_CMAKE_MODULE)
  241. if(CMAKE_MODULE AND NOT CMAKE_MODULE IN_LIST cmake_modules_seen)
  242. list(APPEND static_module_deps_checks
  243. "find_package(${CMAKE_MODULE})"
  244. "if(NOT ${CMAKE_MODULE}_FOUND)"
  245. " set(${ARGS_CONFIG_COMPONENT_FOUND_NAME} OFF)"
  246. "endif()"
  247. )
  248. list(APPEND cmake_modules_seen ${CMAKE_MODULE})
  249. endif()
  250. if(PKG_CONFIG_PREFIX AND PKG_CONFIG_SPECS)
  251. string(JOIN " " pkg_config_specs_str ${PKG_CONFIG_SPECS})
  252. list(APPEND static_pkgconfig_deps_checks
  253. " pkg_check_modules(${PKG_CONFIG_PREFIX} QUIET IMPORTED_TARGET ${pkg_config_specs_str})"
  254. " if(NOT ${PKG_CONFIG_PREFIX}_FOUND)"
  255. " set(${ARGS_CONFIG_COMPONENT_FOUND_NAME} OFF)"
  256. " endif()"
  257. )
  258. endif()
  259. endforeach()
  260. set(prefix " ")
  261. set(static_module_deps_texts)
  262. if(static_module_deps_checks)
  263. set(static_module_deps_texts
  264. [[set(_original_module_path "${CMAKE_MODULE_PATH}")]]
  265. [[list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")]]
  266. ${static_module_deps_checks}
  267. [[set(CMAKE_MODULE_PATH "${_original_module_path}")]]
  268. [[unset(_original_module_path)]]
  269. )
  270. endif()
  271. set(static_pkgconfig_deps_texts)
  272. if(static_pkgconfig_deps_checks)
  273. string(JOIN "\n${prefix}" static_deps_texts_str ${static_deps_texts})
  274. list(APPEND static_pkgconfig_deps_texts
  275. "find_package(PkgConfig)"
  276. "if(PkgConfig_FOUND)"
  277. ${static_pkgconfig_deps_checks}
  278. "else()"
  279. " set(${ARGS_CONFIG_COMPONENT_FOUND_NAME} OFF)"
  280. "endif()"
  281. )
  282. endif()
  283. set(text)
  284. string(JOIN "\n${prefix}" text ${static_module_deps_texts} ${static_pkgconfig_deps_texts})
  285. if(text)
  286. set(text "${prefix}${text}")
  287. endif()
  288. set(${OUTPUT} "${text}" PARENT_SCOPE)
  289. endfunction()
  290. # Create sdl3.pc.
  291. function(configure_sdl3_pc)
  292. # Clean up variables for sdl3.pc
  293. if(TARGET SDL3-shared)
  294. set(SDL_PC_SECTION_LIBS_PRIVATE "\nLibs.private:")
  295. else()
  296. set(SDL_PC_SECTION_LIBS_PRIVATE "")
  297. endif()
  298. get_property(ids TARGET SDL3-collector PROPERTY SDL3-collector PROPERTY INTERFACE_SDL_DEP_IDS)
  299. set(private_requires)
  300. set(private_libs)
  301. set(private_ldflags)
  302. foreach(ID IN LISTS ids)
  303. get_property(CMAKE_MODULE TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_CMAKE_MODULE)
  304. get_property(PKG_CONFIG_SPECS TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_SPECS)
  305. get_property(PKG_CONFIG_LIBS TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_LIBS)
  306. get_property(PKG_CONFIG_LDFLAGS TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_LINK_OPTIONS)
  307. get_property(LIBS TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_LIBS)
  308. get_property(LINK_OPTIONS TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_LINK_OPTIONS)
  309. list(APPEND private_requires ${PKG_CONFIG_SPECS})
  310. list(APPEND private_libs ${PKG_CONFIG_LIBS})
  311. if(PKG_CONFIG_SPECS OR PKG_CONFIG_LIBS OR PKG_CONFIG_LDFLAGS)
  312. list(APPEND private_ldflags ${PKG_CONFIG_LDFLAGS})
  313. else()
  314. list(APPEND private_ldflags ${LINK_OPTIONS})
  315. if(NOT CMAKE_MODULE)
  316. list(APPEND private_libs ${LIBS})
  317. endif()
  318. endif()
  319. endforeach()
  320. list(TRANSFORM private_libs PREPEND "-l")
  321. set(SDL_PC_STATIC_LIBS ${private_ldflags} ${private_libs})
  322. list(REMOVE_DUPLICATES SDL_PC_STATIC_LIBS)
  323. string(JOIN " " SDL_PC_STATIC_LIBS ${SDL_PC_STATIC_LIBS})
  324. string(JOIN " " SDL_PC_PRIVATE_REQUIRES ${private_requires})
  325. string(REGEX REPLACE "(>=|>|=|<|<=)" [[ \1 ]] SDL_PC_PRIVATE_REQUIRES "${SDL_PC_PRIVATE_REQUIRES}")
  326. get_property(interface_defines TARGET SDL3-collector PROPERTY INTERFACE_COMPILE_DEFINITIONS)
  327. list(TRANSFORM interface_defines PREPEND "-D")
  328. get_property(interface_includes TARGET SDL3-collector PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
  329. list(TRANSFORM interface_includes PREPEND "-I")
  330. set(SDL_PC_CFLAGS ${interface_defines} ${interface_includes})
  331. string(JOIN " " SDL_PC_CFLAGS ${SDL_PC_CFLAGS})
  332. get_property(SDL_PC_LIBS TARGET SDL3-collector PROPERTY INTERFACE_SDL_PC_LINK_OPTIONS)
  333. string(JOIN " " SDL_PC_LIBS ${SDL_PC_LIBS})
  334. string(REGEX REPLACE "-lSDL3( |$)" "-l${sdl_static_libname} " SDL_PC_STATIC_LIBS "${SDL_PC_STATIC_LIBS}")
  335. if(NOT SDL_SHARED)
  336. string(REGEX REPLACE "-lSDL3( |$)" "-l${sdl_static_libname} " SDL_PC_LIBS "${SDL_PC_LIBS}")
  337. endif()
  338. if(TARGET SDL3-shared AND TARGET SDL3-static AND NOT sdl_static_libname STREQUAL "SDL3")
  339. message(STATUS "\"pkg-config --static --libs sdl3\" will return invalid information")
  340. endif()
  341. if(SDL_RELOCATABLE)
  342. # Calculate prefix relative to location of sdl3.pc
  343. if(NOT IS_ABSOLUTE "${CMAKE_INSTALL_PREFIX}")
  344. set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_PREFIX}")
  345. endif()
  346. file(RELATIVE_PATH SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${CMAKE_INSTALL_PREFIX}/${SDL_PKGCONFIG_INSTALLDIR}" "${CMAKE_INSTALL_PREFIX}")
  347. string(REGEX REPLACE "[/]+$" "" SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
  348. set(SDL_PKGCONFIG_PREFIX "\${pcfiledir}/${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
  349. else()
  350. set(SDL_PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}")
  351. endif()
  352. if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
  353. set(INCLUDEDIR_FOR_PKG_CONFIG "${CMAKE_INSTALL_INCLUDEDIR}")
  354. else()
  355. set(INCLUDEDIR_FOR_PKG_CONFIG "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
  356. endif()
  357. if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
  358. set(LIBDIR_FOR_PKG_CONFIG "${CMAKE_INSTALL_LIBDIR}")
  359. else()
  360. set(LIBDIR_FOR_PKG_CONFIG "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
  361. endif()
  362. configure_file("${SDL3_SOURCE_DIR}/cmake/sdl3.pc.in" "${SDL3_BINARY_DIR}/sdl3.pc" @ONLY)
  363. endfunction()
  364. # Write list of dependencies to output. Only visible when configuring with --log-level=DEBUG.
  365. function(debug_show_sdl_deps)
  366. get_property(ids TARGET SDL3-collector PROPERTY SDL3-collector PROPERTY INTERFACE_SDL_DEP_IDS)
  367. foreach(ID IN LISTS ids)
  368. message(DEBUG "- id: ${ID}")
  369. get_property(INCLUDES TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_INCLUDES)
  370. get_property(CMAKE_MODULE TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_CMAKE_MODULE)
  371. get_property(PKG_CONFIG_PREFIX TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_PREFIX)
  372. get_property(PKG_CONFIG_SPECS TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_PKG_CONFIG_SPECS)
  373. get_property(LIBS TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_LIBS)
  374. get_property(LINK_OPTIONS TARGET SDL3-collector PROPERTY INTERFACE_SDL_DEP_${ID}_LINK_OPTIONS)
  375. message(DEBUG " INCLUDES: ${INCLUDES}")
  376. message(DEBUG " CMAKE_MODULE: ${CMAKE_MODULE}")
  377. message(DEBUG " PKG_CONFIG_PREFIX: ${PKG_CONFIG_PREFIX}")
  378. message(DEBUG " PKG_CONFIG_SPECS: ${PKG_CONFIG_SPECS}")
  379. message(DEBUG " LIBS: ${LIBS}")
  380. message(DEBUG " LINK_OPTIONS: ${LINK_OPTIONS}")
  381. endforeach()
  382. endfunction()