ObsHelpers.cmake 17 KB

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