ObsHelpers.cmake 17 KB

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