ObsHelpers.cmake 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. # Set OS-specific constants in non-deprecated way
  2. include(GNUInstallDirs)
  3. if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  4. include(ObsDefaults_macOS)
  5. set(OS_MACOS ON)
  6. set(OS_POSIX ON)
  7. elseif(CMAKE_SYSTEM_NAME MATCHES "Linux|FreeBSD|OpenBSD")
  8. include(ObsDefaults_Linux)
  9. set(OS_POSIX ON)
  10. string(TOUPPER "${CMAKE_SYSTEM_NAME}" _SYSTEM_NAME_U)
  11. set(OS_${_SYSTEM_NAME_U} ON)
  12. elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  13. include(ObsDefaults_Windows)
  14. set(OS_WINDOWS ON)
  15. set(OS_POSIX OFF)
  16. endif()
  17. # Create global property to hold list of activated modules
  18. set_property(GLOBAL PROPERTY OBS_MODULE_LIST "")
  19. # ##############################################################################
  20. # GLOBAL HELPER FUNCTIONS #
  21. # ##############################################################################
  22. # Helper function to set up runtime or library targets
  23. function(setup_binary_target target)
  24. # Set up installation paths for program install
  25. install(
  26. TARGETS ${target}
  27. RUNTIME DESTINATION ${OBS_EXECUTABLE_DESTINATION}
  28. COMPONENT ${target}_Runtime
  29. LIBRARY DESTINATION ${OBS_LIBRARY_DESTINATION}
  30. COMPONENT ${target}_Runtime
  31. NAMELINK_COMPONENT ${target}_Development
  32. ARCHIVE DESTINATION ${OBS_LIBRARY_DESTINATION}
  33. COMPONENT ${target}_Development
  34. PUBLIC_HEADER
  35. DESTINATION ${OBS_INCLUDE_DESTINATION}
  36. COMPONENT ${target}_Development
  37. EXCLUDE_FROM_ALL)
  38. # Set up installation paths for development rundir
  39. install(
  40. TARGETS ${target}
  41. RUNTIME DESTINATION ${OBS_EXECUTABLE_DESTINATION}
  42. COMPONENT obs_${target}
  43. EXCLUDE_FROM_ALL
  44. LIBRARY DESTINATION ${OBS_LIBRARY_DESTINATION}
  45. COMPONENT obs_${target}
  46. EXCLUDE_FROM_ALL
  47. PUBLIC_HEADER
  48. DESTINATION ${OBS_INCLUDE_DESTINATION}
  49. COMPONENT IGNORED
  50. EXCLUDE_FROM_ALL)
  51. add_custom_command(
  52. TARGET ${target}
  53. POST_BUILD
  54. COMMAND
  55. "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
  56. ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${target} >
  57. "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
  58. COMMENT "Installing OBS rundir"
  59. VERBATIM)
  60. endfunction()
  61. # Helper function to set up OBS plugin targets
  62. function(setup_plugin_target target)
  63. set_target_properties(${target} PROPERTIES PREFIX "")
  64. install(
  65. TARGETS ${target}
  66. RUNTIME DESTINATION ${OBS_PLUGIN_DESTINATION} COMPONENT ${target}_Runtime
  67. LIBRARY DESTINATION ${OBS_PLUGIN_DESTINATION}
  68. COMPONENT ${target}_Runtime
  69. NAMELINK_COMPONENT ${target}_Development)
  70. install(
  71. TARGETS ${target}
  72. RUNTIME DESTINATION ${OBS_PLUGIN_DESTINATION}
  73. COMPONENT obs_${target}
  74. EXCLUDE_FROM_ALL
  75. LIBRARY DESTINATION ${OBS_PLUGIN_DESTINATION}
  76. COMPONENT obs_${target}
  77. EXCLUDE_FROM_ALL)
  78. setup_target_resources("${target}" "obs-plugins/${target}")
  79. set_property(GLOBAL APPEND PROPERTY OBS_MODULE_LIST "${target}")
  80. add_custom_command(
  81. TARGET ${target}
  82. POST_BUILD
  83. COMMAND
  84. "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
  85. ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${target} >
  86. "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
  87. COMMENT "Installing ${target} to OBS rundir"
  88. VERBATIM)
  89. obs_status(ENABLED "${target}")
  90. endfunction()
  91. # Helper function to set up OBS scripting plugin targets
  92. function(setup_script_plugin_target target)
  93. set_target_properties(${target} PROPERTIES PREFIX "")
  94. install(
  95. TARGETS ${target}
  96. LIBRARY DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
  97. COMPONENT ${target}_Runtime
  98. NAMELINK_COMPONENT ${target}_Development)
  99. install(
  100. TARGETS ${target}
  101. LIBRARY DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
  102. COMPONENT obs_${target}
  103. EXCLUDE_FROM_ALL)
  104. if(${target} STREQUAL "obspython")
  105. install(
  106. FILES "$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_BASE_NAME:${target}>.py"
  107. DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
  108. COMPONENT ${target}_Runtime)
  109. install(
  110. FILES "$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_BASE_NAME:${target}>.py"
  111. DESTINATION ${OBS_SCRIPT_PLUGIN_DESTINATION}
  112. COMPONENT obs_${target}
  113. EXCLUDE_FROM_ALL)
  114. endif()
  115. set_property(GLOBAL APPEND PROPERTY OBS_SCRIPTING_MODULE_LIST "${target}")
  116. add_custom_command(
  117. TARGET ${target}
  118. POST_BUILD
  119. COMMAND
  120. "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
  121. ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${target} >
  122. "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
  123. COMMENT "Installing ${target} to OBS rundir"
  124. VERBATIM)
  125. obs_status(ENABLED "${target}")
  126. endfunction()
  127. # Helper function to set up target resources (e.g. L10N files)
  128. function(setup_target_resources target destination)
  129. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/data")
  130. install(
  131. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/
  132. DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  133. USE_SOURCE_PERMISSIONS
  134. COMPONENT ${target}_Runtime)
  135. install(
  136. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/
  137. DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  138. USE_SOURCE_PERMISSIONS
  139. COMPONENT obs_${target}
  140. EXCLUDE_FROM_ALL)
  141. endif()
  142. endfunction()
  143. # Helper function to set up specific resource files for targets
  144. function(add_target_resource target resource destination)
  145. install(
  146. FILES ${resource}
  147. DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  148. COMPONENT ${target}_Runtime)
  149. install(
  150. FILES ${resource}
  151. DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  152. COMPONENT obs_${target}
  153. EXCLUDE_FROM_ALL)
  154. endfunction()
  155. # Helper function to set up OBS app target
  156. function(setup_obs_app target)
  157. setup_binary_target(${target})
  158. get_property(OBS_MODULE_LIST GLOBAL PROPERTY OBS_MODULE_LIST)
  159. list(LENGTH OBS_MODULE_LIST _LEN)
  160. if(_LEN GREATER 0)
  161. add_dependencies(${target} ${OBS_MODULE_LIST})
  162. endif()
  163. get_property(OBS_SCRIPTING_MODULE_LIST GLOBAL
  164. PROPERTY OBS_SCRIPTING_MODULE_LIST)
  165. list(LENGTH OBS_SCRIPTING_MODULE_LIST _LEN)
  166. if(_LEN GREATER 0)
  167. add_dependencies(${target} ${OBS_SCRIPTING_MODULE_LIST})
  168. endif()
  169. # detect outdated obs-browser submodule
  170. if(NOT TARGET OBS::browser AND TARGET obs-browser)
  171. target_compile_features(obs-browser-page PRIVATE cxx_std_17)
  172. add_library(OBS::browser ALIAS obs-browser)
  173. if(NOT TARGET OBS::browser-panels AND BROWSER_PANEL_SUPPORT_ENABLED)
  174. add_library(OBS::browser-panels ALIAS obs-browser)
  175. endif()
  176. endif()
  177. if(TARGET OBS::browser)
  178. setup_target_browser(${target})
  179. endif()
  180. if(TARGET OBS::ffmpeg-mux)
  181. add_dependencies(${target} OBS::ffmpeg-mux)
  182. endif()
  183. add_custom_command(
  184. TARGET ${target}
  185. POST_BUILD
  186. COMMAND
  187. "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
  188. ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_rundir >
  189. "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
  190. COMMENT "Installing OBS rundir"
  191. VERBATIM)
  192. endfunction()
  193. # Helper function to do additional setup for browser source plugin
  194. function(setup_target_browser target)
  195. install(
  196. DIRECTORY ${CEF_ROOT_DIR}/Resources/
  197. DESTINATION ${OBS_PLUGIN_DESTINATION}
  198. COMPONENT ${target}_Runtime)
  199. install(
  200. DIRECTORY ${CEF_ROOT_DIR}/Release/
  201. DESTINATION ${OBS_PLUGIN_DESTINATION}
  202. COMPONENT ${target}_Runtime)
  203. install(
  204. DIRECTORY ${CEF_ROOT_DIR}/Resources/
  205. DESTINATION ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_PLUGIN_DESTINATION}
  206. COMPONENT obs_rundir
  207. EXCLUDE_FROM_ALL)
  208. install(
  209. DIRECTORY ${CEF_ROOT_DIR}/Release/
  210. DESTINATION ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_PLUGIN_DESTINATION}
  211. COMPONENT obs_rundir
  212. EXCLUDE_FROM_ALL)
  213. endfunction()
  214. # Helper function to export target to build and install tree. Allows usage of
  215. # `find_package(libobs)` by other build trees
  216. function(export_target target)
  217. set(CMAKE_EXPORT_PACKAGE_REGISTRY OFF)
  218. install(
  219. TARGETS ${target}
  220. EXPORT ${target}Targets
  221. RUNTIME DESTINATION ${OBS_EXECUTABLE_DESTINATION}
  222. COMPONENT obs_libraries
  223. EXCLUDE_FROM_ALL
  224. LIBRARY DESTINATION ${OBS_LIBRARY_DESTINATION}
  225. COMPONENT obs_libraries
  226. EXCLUDE_FROM_ALL
  227. ARCHIVE DESTINATION ${OBS_LIBRARY_DESTINATION}
  228. COMPONENT obs_libraries
  229. EXCLUDE_FROM_ALL
  230. INCLUDES
  231. DESTINATION ${OBS_INCLUDE_DESTINATION}
  232. PUBLIC_HEADER
  233. DESTINATION ${OBS_INCLUDE_DESTINATION}
  234. COMPONENT obs_libraries
  235. EXCLUDE_FROM_ALL)
  236. include(GenerateExportHeader)
  237. generate_export_header(${target} EXPORT_FILE_NAME
  238. ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h)
  239. target_sources(${target}
  240. PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h)
  241. set(TARGETS_EXPORT_NAME "${target}Targets")
  242. include(CMakePackageConfigHelpers)
  243. configure_package_config_file(
  244. ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${target}Config.cmake.in
  245. ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake
  246. INSTALL_DESTINATION ${OBS_CMAKE_DESTINATION}/${target}
  247. PATH_VARS OBS_PLUGIN_DESTINATION OBS_DATA_DESTINATION)
  248. write_basic_package_version_file(
  249. ${CMAKE_CURRENT_BINARY_DIR}/${target}ConfigVersion.cmake
  250. VERSION ${OBS_VERSION_CANONICAL}
  251. COMPATIBILITY SameMajorVersion)
  252. export(
  253. EXPORT ${target}Targets
  254. FILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGETS_EXPORT_NAME}.cmake
  255. NAMESPACE OBS::)
  256. export(PACKAGE "${target}")
  257. install(
  258. EXPORT ${TARGETS_EXPORT_NAME}
  259. FILE ${TARGETS_EXPORT_NAME}.cmake
  260. NAMESPACE OBS::
  261. DESTINATION ${OBS_CMAKE_DESTINATION}/${target}
  262. COMPONENT obs_libraries
  263. EXCLUDE_FROM_ALL)
  264. install(
  265. FILES ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake
  266. ${CMAKE_CURRENT_BINARY_DIR}/${target}ConfigVersion.cmake
  267. DESTINATION ${OBS_CMAKE_DESTINATION}/${target}
  268. COMPONENT obs_libraries
  269. EXCLUDE_FROM_ALL)
  270. endfunction()
  271. # Helper function to define available graphics modules for targets
  272. function(define_graphic_modules target)
  273. foreach(_GRAPHICS_API metal d3d11 opengl d3d9)
  274. string(TOUPPER ${_GRAPHICS_API} _GRAPHICS_API_u)
  275. if(TARGET OBS::libobs-${_GRAPHICS_API})
  276. if(OS_POSIX AND NOT LINUX_PORTABLE)
  277. target_compile_definitions(
  278. ${target}
  279. PRIVATE
  280. DL_${_GRAPHICS_API_u}="$<TARGET_SONAME_FILE_NAME:libobs-${_GRAPHICS_API}>"
  281. )
  282. else()
  283. target_compile_definitions(
  284. ${target}
  285. PRIVATE
  286. DL_${_GRAPHICS_API_u}="$<TARGET_FILE_NAME:libobs-${_GRAPHICS_API}>")
  287. endif()
  288. add_dependencies(${target} OBS::libobs-${_GRAPHICS_API})
  289. else()
  290. target_compile_definitions(${target} PRIVATE DL_${_GRAPHICS_API_u}="")
  291. endif()
  292. endforeach()
  293. endfunction()
  294. if(NOT QT_VERSION)
  295. set(QT_VERSION
  296. AUTO
  297. CACHE STRING "OBS Qt version [AUTO, 5, 6]" FORCE)
  298. set_property(CACHE QT_VERSION PROPERTY STRINGS AUTO 5 6)
  299. endif()
  300. macro(find_qt)
  301. set(multiValueArgs COMPONENTS COMPONENTS_WIN COMPONENTS_MAC COMPONENTS_LINUX)
  302. cmake_parse_arguments(FIND_QT "" "${oneValueArgs}" "${multiValueArgs}"
  303. ${ARGN})
  304. set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
  305. find_package(
  306. Qt5
  307. COMPONENTS Core
  308. QUIET)
  309. find_package(
  310. Qt6
  311. COMPONENTS Core
  312. QUIET)
  313. if(NOT _QT_VERSION AND QT_VERSION STREQUAL AUTO)
  314. if(TARGET Qt5::Core)
  315. set(_QT_VERSION
  316. 5
  317. CACHE INTERNAL "")
  318. elseif(TARGET Qt6::Core)
  319. set(_QT_VERSION
  320. 6
  321. CACHE INTERNAL "")
  322. endif()
  323. obs_status(STATUS "Qt version: ${_QT_VERSION}")
  324. elseif(NOT _QT_VERSION)
  325. if(TARGET Qt${QT_VERSION}::Core)
  326. set(_QT_VERSION
  327. ${QT_VERSION}
  328. CACHE INTERNAL "")
  329. else()
  330. if(QT_VERSION EQUAL 6)
  331. set(FALLBACK_QT_VERSION 5)
  332. else()
  333. set(FALLBACK_QT_VERSION 6)
  334. endif()
  335. message(
  336. WARNING
  337. "Qt${QT_VERSION} was not found, falling back to Qt${FALLBACK_QT_VERSION}"
  338. )
  339. if(TARGET Qt${FALLBACK_QT_VERSION}::Core)
  340. set(_QT_VERSION
  341. ${FALLBACK_QT_VERSION}
  342. CACHE INTERNAL "")
  343. endif()
  344. endif()
  345. obs_status(STATUS "Qt version: ${_QT_VERSION}")
  346. endif()
  347. set(QT_NO_CREATE_VERSIONLESS_TARGETS OFF)
  348. if(NOT _QT_VERSION)
  349. message(FATAL_ERROR "Neither Qt5 or Qt6 were found")
  350. endif()
  351. if(OS_WINDOWS)
  352. find_package(
  353. Qt${_QT_VERSION}
  354. COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_WIN}
  355. REQUIRED)
  356. elseif(OS_MACOS)
  357. find_package(
  358. Qt${_QT_VERSION}
  359. COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_MAC}
  360. REQUIRED)
  361. else()
  362. find_package(
  363. Qt${_QT_VERSION}
  364. COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_LINUX}
  365. REQUIRED)
  366. endif()
  367. list(APPEND FIND_QT_COMPONENTS "Core")
  368. if("Gui" IN_LIST FIND_QT_COMPONENTS_LINUX)
  369. list(APPEND FIND_QT_COMPONENTS_LINUX "GuiPrivate")
  370. endif()
  371. foreach(_COMPONENT IN LISTS FIND_QT_COMPONENTS FIND_QT_COMPONENTS_WIN
  372. FIND_QT_COMPONENTS_MAC FIND_QT_COMPONENTS_LINUX)
  373. if(NOT TARGET Qt::${_COMPONENT} AND TARGET Qt${_QT_VERSION}::${_COMPONENT})
  374. add_library(Qt::${_COMPONENT} INTERFACE IMPORTED)
  375. set_target_properties(
  376. Qt::${_COMPONENT} PROPERTIES INTERFACE_LINK_LIBRARIES
  377. "Qt${_QT_VERSION}::${_COMPONENT}")
  378. endif()
  379. endforeach()
  380. endmacro()
  381. # Idea adapted from: https://github.com/edsiper/cmake-options
  382. macro(set_option option value)
  383. set(${option}
  384. ${value}
  385. CACHE INTERNAL "")
  386. endmacro()
  387. function(obs_status status text)
  388. set(_OBS_STATUS_DISABLED "OBS: DISABLED ")
  389. set(_OBS_STATUS_ENABLED "OBS: ENABLED ")
  390. set(_OBS_STATUS "OBS: ")
  391. if(status STREQUAL "DISABLED")
  392. message(STATUS "${_OBS_STATUS_DISABLED}${text}")
  393. elseif(status STREQUAL "ENABLED")
  394. message(STATUS "${_OBS_STATUS_ENABLED}${text}")
  395. else()
  396. message(${status} "${_OBS_STATUS}${text}")
  397. endif()
  398. endfunction()
  399. if(OS_WINDOWS)
  400. include(ObsHelpers_Windows)
  401. elseif(OS_MACOS)
  402. include(ObsHelpers_macOS)
  403. elseif(OS_POSIX)
  404. include(ObsHelpers_Linux)
  405. endif()
  406. # ##############################################################################
  407. # LEGACY FALLBACKS #
  408. # ##############################################################################
  409. # Helper function to install OBS plugin with associated resource directory
  410. function(_install_obs_plugin_with_data target source)
  411. setup_plugin_target(${target})
  412. if(NOT ${source} STREQUAL "data"
  413. AND IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${source}"
  414. AND NOT OS_MACOS)
  415. install(
  416. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${source}/
  417. DESTINATION ${OBS_DATA_DESTINATION}/obs-plugins/${target}
  418. USE_SOURCE_PERMISSIONS
  419. COMPONENT ${target}_Runtime)
  420. install(
  421. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${source}/
  422. DESTINATION
  423. ${OBS_OUTPUT_DIR}/$<CONFIG>/${OBS_DATA_DESTINATION}/obs-plugins/${target}
  424. COMPONENT obs_${target}
  425. EXCLUDE_FROM_ALL)
  426. if(OS_WINDOWS AND DEFINED ENV{obsInstallerTempDir})
  427. install(
  428. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${source}/
  429. DESTINATION
  430. $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/obs-plugins/${target}
  431. COMPONENT obs_${target}
  432. EXCLUDE_FROM_ALL)
  433. endif()
  434. endif()
  435. endfunction()
  436. # Helper function to install OBS plugin
  437. function(_install_obs_plugin target)
  438. setup_plugin_target(${target})
  439. endfunction()
  440. # Helper function to install data for a target only
  441. function(_install_obs_datatarget target destination)
  442. install(
  443. TARGETS ${target}
  444. LIBRARY DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  445. COMPONENT ${target}_Runtime
  446. NAMELINK_COMPONENT ${target}_Development
  447. RUNTIME DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  448. COMPONENT ${target}_Runtime)
  449. install(
  450. TARGETS ${target}
  451. LIBRARY DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  452. COMPONENT obs_${target}
  453. EXCLUDE_FROM_ALL
  454. RUNTIME DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  455. COMPONENT obs_${target}
  456. EXCLUDE_FROM_ALL)
  457. if(OS_WINDOWS)
  458. if(MSVC)
  459. add_target_resource(${target} "$<TARGET_PDB_FILE:${target}>"
  460. "${destination}" OPTIONAL)
  461. endif()
  462. if(DEFINED ENV{obsInstallerTempDir})
  463. install(
  464. TARGETS ${target}
  465. RUNTIME
  466. DESTINATION
  467. $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}/$<TARGET_FILE_NAME:${target}>
  468. COMPONENT obs_${target}
  469. EXCLUDE_FROM_ALL
  470. LIBRARY
  471. DESTINATION
  472. $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}/$<TARGET_FILE_NAME:${target}>
  473. COMPONENT obs_${target}
  474. EXCLUDE_FROM_ALL)
  475. endif()
  476. endif()
  477. add_custom_command(
  478. TARGET ${target}
  479. POST_BUILD
  480. COMMAND
  481. "${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
  482. ${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${target} >
  483. "$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
  484. COMMENT "Installing ${target} to OBS rundir"
  485. VERBATIM)
  486. endfunction()