ObsPluginHelpers.cmake 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. if(POLICY CMP0087)
  2. cmake_policy(SET CMP0087 NEW)
  3. endif()
  4. set(OBS_STANDALONE_PLUGIN_DIR ${CMAKE_SOURCE_DIR}/release)
  5. set(INCLUDED_LIBOBS_CMAKE_MODULES ON)
  6. include(GNUInstallDirs)
  7. if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
  8. set(OS_MACOS ON)
  9. set(OS_POSIX ON)
  10. elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|OpenBSD")
  11. set(OS_POSIX ON)
  12. string(TOUPPER "${CMAKE_SYSTEM_NAME}" _SYSTEM_NAME_U)
  13. set(OS_${_SYSTEM_NAME_U} ON)
  14. elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  15. set(OS_WINDOWS ON)
  16. set(OS_POSIX OFF)
  17. endif()
  18. # Old-Style plugin detected, find "modern" libobs variant instead and set global
  19. # include directories to fix "bad" plugin behaviour
  20. if(DEFINED LIBOBS_INCLUDE_DIR AND NOT TARGET OBS::libobs)
  21. message(
  22. DEPRECATION
  23. "You are using an outdated method of adding 'libobs' to your project. Refer to the updated wiki on how to build and export 'libobs' and use it in your plugin projects."
  24. )
  25. find_package(libobs REQUIRED)
  26. if(TARGET OBS::libobs)
  27. set_target_properties(OBS::libobs PROPERTIES IMPORTED_GLOBAL TRUE)
  28. message(STATUS "OBS: Using modern libobs target")
  29. add_library(libobs ALIAS OBS::libobs)
  30. if(OS_WINDOWS)
  31. add_library(w32-pthreads ALIAS OBS::w32-pthreads)
  32. endif()
  33. endif()
  34. endif()
  35. if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND (OS_WINDOWS OR OS_MACOS))
  36. set(CMAKE_INSTALL_PREFIX
  37. ${OBS_STANDALONE_PLUGIN_DIR}
  38. CACHE STRING "Directory to install OBS plugin after building" FORCE)
  39. endif()
  40. if(NOT CMAKE_BUILD_TYPE)
  41. set(CMAKE_BUILD_TYPE
  42. "RelWithDebInfo"
  43. CACHE STRING
  44. "OBS build type [Release, RelWithDebInfo, Debug, MinSizeRel]" FORCE)
  45. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release RelWithDebInfo
  46. Debug MinSizeRel)
  47. endif()
  48. if(NOT QT_VERSION)
  49. set(QT_VERSION
  50. AUTO
  51. CACHE STRING "OBS Qt version [AUTO, 5, 6]" FORCE)
  52. set_property(CACHE QT_VERSION PROPERTY STRINGS AUTO 5 6)
  53. endif()
  54. macro(find_qt)
  55. set(multiValueArgs COMPONENTS COMPONENTS_WIN COMPONENTS_MAC COMPONENTS_LINUX)
  56. cmake_parse_arguments(FIND_QT "" "${oneValueArgs}" "${multiValueArgs}"
  57. ${ARGN})
  58. set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
  59. find_package(
  60. Qt5
  61. COMPONENTS Core
  62. QUIET)
  63. find_package(
  64. Qt6
  65. COMPONENTS Core
  66. QUIET)
  67. if(NOT _QT_VERSION AND QT_VERSION STREQUAL AUTO)
  68. if(TARGET Qt6::Core)
  69. set(_QT_VERSION
  70. 6
  71. CACHE INTERNAL "")
  72. elseif(TARGET Qt5::Core)
  73. set(_QT_VERSION
  74. 5
  75. CACHE INTERNAL "")
  76. endif()
  77. message(STATUS "Qt version: ${_QT_VERSION}")
  78. elseif(NOT _QT_VERSION)
  79. if(TARGET Qt${QT_VERSION}::Core)
  80. set(_QT_VERSION
  81. ${QT_VERSION}
  82. CACHE INTERNAL "")
  83. else()
  84. if(QT_VERSION EQUAL 6)
  85. set(FALLBACK_QT_VERSION 5)
  86. else()
  87. set(FALLBACK_QT_VERSION 6)
  88. endif()
  89. message(
  90. WARNING
  91. "Qt${QT_VERSION} was not found, falling back to Qt${FALLBACK_QT_VERSION}"
  92. )
  93. if(TARGET Qt${FALLBACK_QT_VERSION}::Core)
  94. set(_QT_VERSION
  95. ${FALLBACK_QT_VERSION}
  96. CACHE INTERNAL "")
  97. endif()
  98. endif()
  99. message(STATUS "Qt version: ${_QT_VERSION}")
  100. endif()
  101. set(QT_NO_CREATE_VERSIONLESS_TARGETS OFF)
  102. if(NOT _QT_VERSION)
  103. message(FATAL_ERROR "Neither Qt5 or Qt6 were found")
  104. endif()
  105. if(OS_WINDOWS)
  106. find_package(
  107. Qt${_QT_VERSION}
  108. COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_WIN}
  109. REQUIRED)
  110. elseif(OS_MACOS)
  111. find_package(
  112. Qt${_QT_VERSION}
  113. COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_MAC}
  114. REQUIRED)
  115. else()
  116. find_package(
  117. Qt${_QT_VERSION}
  118. COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_LINUX}
  119. REQUIRED)
  120. endif()
  121. list(APPEND FIND_QT_COMPONENTS "Core")
  122. if("Gui" IN_LIST FIND_QT_COMPONENTS_LINUX)
  123. list(APPEND FIND_QT_COMPONENTS_LINUX "GuiPrivate")
  124. endif()
  125. foreach(_COMPONENT IN LISTS FIND_QT_COMPONENTS FIND_QT_COMPONENTS_WIN
  126. FIND_QT_COMPONENTS_MAC FIND_QT_COMPONENTS_LINUX)
  127. if(NOT TARGET Qt::${_COMPONENT} AND TARGET Qt${_QT_VERSION}::${_COMPONENT})
  128. add_library(Qt::${_COMPONENT} INTERFACE IMPORTED)
  129. set_target_properties(
  130. Qt::${_COMPONENT} PROPERTIES INTERFACE_LINK_LIBRARIES
  131. "Qt${_QT_VERSION}::${_COMPONENT}")
  132. endif()
  133. endforeach()
  134. endmacro()
  135. file(RELATIVE_PATH RELATIVE_INSTALL_PATH ${CMAKE_SOURCE_DIR}
  136. ${CMAKE_INSTALL_PREFIX})
  137. file(RELATIVE_PATH RELATIVE_BUILD_PATH ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
  138. # Set up OS-specific environment and helper functions
  139. if(OS_POSIX)
  140. find_program(CCACHE_PROGRAM "ccache")
  141. set(CCACHE_SUPPORT
  142. ON
  143. CACHE BOOL "Enable ccache support")
  144. mark_as_advanced(CCACHE_PROGRAM)
  145. if(CCACHE_PROGRAM AND CCACHE_SUPPORT)
  146. set(CMAKE_CXX_COMPILER_LAUNCHER
  147. ${CCACHE_PROGRAM}
  148. CACHE INTERNAL "")
  149. set(CMAKE_C_COMPILER_LAUNCHER
  150. ${CCACHE_PROGRAM}
  151. CACHE INTERNAL "")
  152. set(CMAKE_OBJC_COMPILER_LAUNCHER
  153. ${CCACHE_PROGRAM}
  154. CACHE INTERNAL "")
  155. set(CMAKE_OBJCXX_COMPILER_LAUNCHER
  156. ${CCACHE_PROGRAM}
  157. CACHE INTERNAL "")
  158. set(CMAKE_CUDA_COMPILER_LAUNCHER
  159. ${CCACHE_PROGRAM}
  160. CACHE INTERNAL "") # CMake 3.9+
  161. endif()
  162. endif()
  163. if(OS_MACOS)
  164. set(CMAKE_OSX_ARCHITECTURES
  165. "x86_64"
  166. CACHE STRING
  167. "OBS build architecture for macOS - x86_64 required at least")
  168. set_property(CACHE CMAKE_OSX_ARCHITECTURES PROPERTY STRINGS x86_64 arm64
  169. "x86_64;arm64")
  170. set(CMAKE_OSX_DEPLOYMENT_TARGET
  171. "10.15"
  172. CACHE STRING "OBS deployment target for macOS - 10.15+ required")
  173. set_property(CACHE CMAKE_OSX_DEPLOYMENT_TARGET PROPERTY STRINGS 10.15 11.0
  174. 12.0 13.0)
  175. set(OBS_BUNDLE_CODESIGN_IDENTITY
  176. "-"
  177. CACHE STRING "OBS code signing identity for macOS")
  178. set(OBS_CODESIGN_ENTITLEMENTS
  179. ${CMAKE_SOURCE_DIR}/cmake/bundle/macos/entitlements.plist
  180. CACHE INTERNAL "Path to codesign entitlements plist")
  181. set(OBS_CODESIGN_LINKER
  182. ON
  183. CACHE BOOL "Enable linker code-signing on macOS (macOS 11+ required)")
  184. # Xcode configuration
  185. if(XCODE)
  186. # Tell Xcode to pretend the linker signed binaries so that editing with
  187. # install_name_tool preserves ad-hoc signatures. This option is supported by
  188. # codesign on macOS 11 or higher. See CMake Issue 21854:
  189. # https://gitlab.kitware.com/cmake/cmake/-/issues/21854
  190. set(CMAKE_XCODE_GENERATE_SCHEME ON)
  191. if(OBS_CODESIGN_LINKER)
  192. set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "-o linker-signed")
  193. endif()
  194. endif()
  195. # Set default options for bundling on macOS
  196. set(CMAKE_MACOSX_RPATH ON)
  197. set(CMAKE_SKIP_BUILD_RPATH OFF)
  198. set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF)
  199. set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks/")
  200. set(CMAKE_INSTALL_RPATH_USE_LINK_PATH OFF)
  201. function(setup_plugin_target target)
  202. if(NOT DEFINED MACOSX_PLUGIN_GUI_IDENTIFIER)
  203. message(
  204. FATAL_ERROR
  205. "No 'MACOSX_PLUGIN_GUI_IDENTIFIER' set, but is required to build plugin bundles on macOS - example: 'com.yourname.pluginname'"
  206. )
  207. endif()
  208. if(NOT DEFINED MACOSX_PLUGIN_BUNDLE_VERSION)
  209. message(
  210. FATAL_ERROR
  211. "No 'MACOSX_PLUGIN_BUNDLE_VERSION' set, but is required to build plugin bundles on macOS - example: '25'"
  212. )
  213. endif()
  214. if(NOT DEFINED MACOSX_PLUGIN_SHORT_VERSION_STRING)
  215. message(
  216. FATAL_ERROR
  217. "No 'MACOSX_PLUGIN_SHORT_VERSION_STRING' set, but is required to build plugin bundles on macOS - example: '1.0.2'"
  218. )
  219. endif()
  220. set(MACOSX_PLUGIN_BUNDLE_NAME
  221. "${target}"
  222. PARENT_SCOPE)
  223. set(MACOSX_PLUGIN_BUNDLE_VERSION
  224. "${MACOSX_BUNDLE_BUNDLE_VERSION}"
  225. PARENT_SCOPE)
  226. set(MACOSX_PLUGIN_SHORT_VERSION_STRING
  227. "${MACOSX_BUNDLE_SHORT_VERSION_STRING}"
  228. PARENT_SCOPE)
  229. set(MACOSX_PLUGIN_EXECUTABLE_NAME
  230. "${target}"
  231. PARENT_SCOPE)
  232. set(MACOSX_PLUGIN_BUNDLE_TYPE
  233. "BNDL"
  234. PARENT_SCOPE)
  235. install(
  236. TARGETS ${target}
  237. LIBRARY DESTINATION "."
  238. COMPONENT obs_plugins
  239. NAMELINK_COMPONENT ${target}_Development)
  240. if(${QT_VERSION} EQUAL 5)
  241. set(_QT_FW_VERSION "${QT_VERSION}")
  242. else()
  243. set(_QT_FW_VERSION "A")
  244. endif()
  245. set(_COMMAND
  246. "${CMAKE_INSTALL_NAME_TOOL} \\
  247. -change ${CMAKE_PREFIX_PATH}/lib/QtWidgets.framework/Versions/${QT_VERSION}/QtWidgets @rpath/QtWidgets.framework/Versions/${_QT_FW_VERSION}/QtWidgets \\
  248. -change ${CMAKE_PREFIX_PATH}/lib/QtCore.framework/Versions/${QT_VERSION}/QtCore @rpath/QtCore.framework/Versions/${_QT_FW_VERSION}/QtCore \\
  249. -change ${CMAKE_PREFIX_PATH}/lib/QtGui.framework/Versions/${QT_VERSION}/QtGui @rpath/QtGui.framework/Versions/${_QT_FW_VERSION}/QtGui \\
  250. \\\"\${CMAKE_INSTALL_PREFIX}/${target}.plugin/Contents/MacOS/${target}\\\""
  251. )
  252. install(CODE "execute_process(COMMAND /bin/sh -c \"${_COMMAND}\")"
  253. COMPONENT obs_plugins)
  254. unset(_QT_FW_VERSION)
  255. if(NOT XCODE)
  256. set(_COMMAND
  257. "/usr/bin/codesign --force \\
  258. --sign \\\"${OBS_BUNDLE_CODESIGN_IDENTITY}\\\" \\
  259. --options runtime \\
  260. --entitlements \\\"${CMAKE_CURRENT_FUNCTION_LIST_DIR}/bundle/macOS/entitlements.plist\\\" \\
  261. \\\"\${CMAKE_INSTALL_PREFIX}/${target}.plugin\\\"")
  262. install(CODE "execute_process(COMMAND /bin/sh -c \"${_COMMAND}\")"
  263. COMPONENT obs_plugins)
  264. endif()
  265. set_target_properties(
  266. ${target}
  267. PROPERTIES
  268. BUNDLE ON
  269. BUNDLE_EXTENSION "plugin"
  270. OUTPUT_NAME ${target}
  271. MACOSX_BUNDLE_INFO_PLIST
  272. "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/bundle/macOS/Plugin-Info.plist.in"
  273. XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER
  274. "${MACOSX_PLUGIN_GUI_IDENTIFIER}"
  275. XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${OBS_BUNDLE_CODESIGN_IDENTITY}"
  276. XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS
  277. "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/bundle/macOS/entitlements.plist")
  278. add_custom_command(
  279. TARGET ${target}
  280. POST_BUILD
  281. COMMAND
  282. /bin/sh -c
  283. "codesign --force --sign \"-\" $<$<BOOL:${OBS_CODESIGN_LINKER}>:--options linker-signed >\"$<TARGET_BUNDLE_DIR:${target}>\""
  284. COMMENT "Codesigning ${target}"
  285. VERBATIM)
  286. install_bundle_resources(${target})
  287. endfunction()
  288. function(install_bundle_resources target)
  289. if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/data)
  290. file(GLOB_RECURSE _DATA_FILES "${CMAKE_CURRENT_SOURCE_DIR}/data/*")
  291. foreach(_DATA_FILE IN LISTS _DATA_FILES)
  292. file(RELATIVE_PATH _RELATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/data/
  293. ${_DATA_FILE})
  294. get_filename_component(_RELATIVE_PATH ${_RELATIVE_PATH} PATH)
  295. target_sources(${target} PRIVATE ${_DATA_FILE})
  296. set_source_files_properties(
  297. ${_DATA_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION
  298. Resources/${_RELATIVE_PATH})
  299. string(REPLACE "\\" "\\\\" _GROUP_NAME ${_RELATIVE_PATH})
  300. source_group("Resources\\${_GROUP_NAME}" FILES ${_DATA_FILE})
  301. endforeach()
  302. endif()
  303. endfunction()
  304. else()
  305. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  306. set(_ARCH_SUFFIX 64)
  307. else()
  308. set(_ARCH_SUFFIX 32)
  309. endif()
  310. set(OBS_OUTPUT_DIR ${CMAKE_BINARY_DIR}/rundir)
  311. if(OS_POSIX)
  312. option(LINUX_PORTABLE "Build portable version (Linux)" ON)
  313. if(NOT LINUX_PORTABLE)
  314. set(OBS_LIBRARY_DESTINATION ${CMAKE_INSTALL_LIBDIR})
  315. set(OBS_PLUGIN_DESTINATION ${OBS_LIBRARY_DESTINATION}/obs-plugins)
  316. set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib)
  317. set(OBS_DATA_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/obs)
  318. else()
  319. set(OBS_LIBRARY_DESTINATION bin/${_ARCH_SUFFIX}bit)
  320. set(OBS_PLUGIN_DESTINATION obs-plugins/${_ARCH_SUFFIX}bit)
  321. set(CMAKE_INSTALL_RPATH
  322. "$ORIGIN/" "${CMAKE_INSTALL_PREFIX}/${OBS_LIBRARY_DESTINATION}")
  323. set(OBS_DATA_DESTINATION "data")
  324. endif()
  325. if(OS_LINUX)
  326. set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
  327. set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${LINUX_MAINTAINER_EMAIL}")
  328. set(CPACK_PACKAGE_VERSION "${CMAKE_PROJECT_VERSION}")
  329. set(CPACK_PACKAGE_FILE_NAME
  330. "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-linux-x86_64")
  331. set(CPACK_GENERATOR "DEB")
  332. set(CPACK_DEBIAN_PACKAGE_DEPENDS
  333. "obs-studio (>= 27.0.0), libqt5core5a (>= 5.9.0~beta), libqt5gui5 (>= 5.3.0), libqt5widgets5 (>= 5.7.0)"
  334. )
  335. set(CPACK_OUTPUT_FILE_PREFIX ${CMAKE_SOURCE_DIR}/release)
  336. if(NOT LINUX_PORTABLE)
  337. set(CPACK_SET_DESTDIR ON)
  338. endif()
  339. include(CPack)
  340. endif()
  341. else()
  342. set(OBS_LIBRARY_DESTINATION "bin/${_ARCH_SUFFIX}bit")
  343. set(OBS_LIBRARY32_DESTINATION "bin/32bit")
  344. set(OBS_LIBRARY64_DESTINATION "bin/64bit")
  345. set(OBS_PLUGIN_DESTINATION "obs-plugins/${_ARCH_SUFFIX}bit")
  346. set(OBS_PLUGIN32_DESTINATION "obs-plugins/32bit")
  347. set(OBS_PLUGIN64_DESTINATION "obs-plugins/64bit")
  348. set(OBS_DATA_DESTINATION "data")
  349. endif()
  350. function(setup_plugin_target target)
  351. set_target_properties(${target} PROPERTIES PREFIX "")
  352. install(
  353. TARGETS ${target}
  354. RUNTIME DESTINATION "${OBS_PLUGIN_DESTINATION}"
  355. COMPONENT ${target}_Runtime
  356. LIBRARY DESTINATION "${OBS_PLUGIN_DESTINATION}"
  357. COMPONENT ${target}_Runtime
  358. NAMELINK_COMPONENT ${target}_Development)
  359. install(
  360. FILES $<TARGET_FILE:${target}>
  361. DESTINATION $<CONFIG>/${OBS_PLUGIN_DESTINATION}
  362. COMPONENT obs_rundir
  363. EXCLUDE_FROM_ALL)
  364. if(OS_WINDOWS)
  365. install(
  366. FILES $<TARGET_PDB_FILE:${target}>
  367. CONFIGURATIONS "RelWithDebInfo" "Debug"
  368. DESTINATION ${OBS_PLUGIN_DESTINATION}
  369. COMPONENT ${target}_Runtime
  370. OPTIONAL)
  371. install(
  372. FILES $<TARGET_PDB_FILE:${target}>
  373. CONFIGURATIONS "RelWithDebInfo" "Debug"
  374. DESTINATION $<CONFIG>/${OBS_PLUGIN_DESTINATION}
  375. COMPONENT obs_rundir
  376. OPTIONAL EXCLUDE_FROM_ALL)
  377. endif()
  378. if(MSVC)
  379. target_link_options(
  380. ${target}
  381. PRIVATE
  382. "LINKER:/OPT:REF"
  383. "$<$<NOT:$<EQUAL:${CMAKE_SIZEOF_VOID_P},8>>:LINKER\:/SAFESEH\:NO>"
  384. "$<$<CONFIG:DEBUG>:LINKER\:/INCREMENTAL:NO>"
  385. "$<$<CONFIG:RELWITHDEBINFO>:LINKER\:/INCREMENTAL:NO>")
  386. endif()
  387. setup_target_resources(${target} obs-plugins/${target})
  388. if(OS_WINDOWS AND DEFINED OBS_BUILD_DIR)
  389. setup_target_for_testing(${target} obs-plugins/${target})
  390. endif()
  391. add_custom_command(
  392. TARGET ${target}
  393. POST_BUILD
  394. COMMAND
  395. "${CMAKE_COMMAND}" -DCMAKE_INSTALL_PREFIX=${OBS_OUTPUT_DIR}
  396. -DCMAKE_INSTALL_COMPONENT=obs_rundir
  397. -DCMAKE_INSTALL_CONFIG_NAME=$<CONFIG> -P
  398. ${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake
  399. COMMENT "Installing to plugin rundir"
  400. VERBATIM)
  401. endfunction()
  402. function(setup_target_resources target destination)
  403. if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/data)
  404. install(
  405. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/
  406. DESTINATION ${OBS_DATA_DESTINATION}/${destination}
  407. USE_SOURCE_PERMISSIONS
  408. COMPONENT obs_plugins)
  409. install(
  410. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data
  411. DESTINATION $<CONFIG>/${OBS_DATA_DESTINATION}/${destination}
  412. USE_SOURCE_PERMISSIONS
  413. COMPONENT obs_rundir
  414. EXCLUDE_FROM_ALL)
  415. endif()
  416. endfunction()
  417. if(OS_WINDOWS)
  418. function(setup_target_for_testing target destination)
  419. install(
  420. FILES $<TARGET_FILE:${target}>
  421. DESTINATION $<CONFIG>/${OBS_PLUGIN_DESTINATION}
  422. COMPONENT obs_testing
  423. EXCLUDE_FROM_ALL)
  424. install(
  425. FILES $<TARGET_PDB_FILE:${target}>
  426. CONFIGURATIONS "RelWithDebInfo" "Debug"
  427. DESTINATION $<CONFIG>/${OBS_PLUGIN_DESTINATION}
  428. COMPONENT obs_testing
  429. OPTIONAL EXCLUDE_FROM_ALL)
  430. install(
  431. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/
  432. DESTINATION $<CONFIG>/${OBS_DATA_DESTINATION}/${destination}
  433. USE_SOURCE_PERMISSIONS
  434. COMPONENT obs_testing
  435. EXCLUDE_FROM_ALL)
  436. add_custom_command(
  437. TARGET ${target}
  438. POST_BUILD
  439. COMMAND
  440. "${CMAKE_COMMAND}" -DCMAKE_INSTALL_PREFIX=${OBS_BUILD_DIR}/rundir
  441. -DCMAKE_INSTALL_COMPONENT=obs_testing
  442. -DCMAKE_INSTALL_CONFIG_NAME=$<CONFIG> -P
  443. ${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake
  444. COMMENT "Installing to OBS test directory"
  445. VERBATIM)
  446. endfunction()
  447. endif()
  448. endif()