ObsHelpers.cmake 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587
  1. set(OBS_OUTPUT_DIR "${CMAKE_BINARY_DIR}/rundir")
  2. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  3. set(_lib_suffix 64)
  4. else()
  5. set(_lib_suffix 32)
  6. endif()
  7. if(WIN32 OR APPLE)
  8. set(_struct_def FALSE)
  9. else()
  10. set(_struct_def TRUE)
  11. endif()
  12. option(INSTALLER_RUN "Build a multiarch installer, needs to run indenepdently after both archs have compiled" FALSE)
  13. option(UNIX_STRUCTURE "Build with standard unix filesystem structure" ${_struct_def})
  14. if(APPLE)
  15. option(BUILD_REDISTRIBUTABLE "Fix rpath of external libraries" FALSE)
  16. endif()
  17. if(INSTALLER_RUN AND NOT DEFINED ENV{obsInstallerTempDir})
  18. message(FATAL_ERROR "Environment variable obsInstallerTempDir is needed for multiarch installer generation")
  19. endif()
  20. if(DEFINED ENV{obsInstallerTempDir})
  21. file(TO_CMAKE_PATH "$ENV{obsInstallerTempDir}" ENV{obsInstallerTempDir})
  22. endif()
  23. if(DEFINED ENV{obsAdditionalInstallFiles})
  24. file(TO_CMAKE_PATH "$ENV{obsAdditionalInstallFiles}" ENV{obsAdditionalInstallFiles})
  25. else()
  26. set(ENV{obsAdditionalInstallFiles} "${CMAKE_SOURCE_DIR}/additional_install_files")
  27. endif()
  28. list(APPEND CMAKE_INCLUDE_PATH
  29. "$ENV{obsAdditionalInstallFiles}/include${_lib_suffix}"
  30. "$ENV{obsAdditionalInstallFiles}/include")
  31. list(APPEND CMAKE_LIBRARY_PATH
  32. "$ENV{obsAdditionalInstallFiles}/lib${_lib_suffix}"
  33. "$ENV{obsAdditionalInstallFiles}/lib"
  34. "$ENV{obsAdditionalInstallFiles}/libs${_lib_suffix}"
  35. "$ENV{obsAdditionalInstallFiles}/libs"
  36. "$ENV{obsAdditionalInstallFiles}/bin${_lib_suffix}"
  37. "$ENV{obsAdditionalInstallFiles}/bin")
  38. if(NOT UNIX_STRUCTURE)
  39. set(OBS_DATA_DESTINATION "data")
  40. if(APPLE)
  41. set(OBS_EXECUTABLE_DESTINATION "bin")
  42. set(OBS_EXECUTABLE32_DESTINATION "bin")
  43. set(OBS_EXECUTABLE64_DESTINATION "bin")
  44. set(OBS_LIBRARY_DESTINATION "bin")
  45. set(OBS_LIBRARY32_DESTINATION "bin")
  46. set(OBS_LIBRARY64_DESTINATION "bin")
  47. set(OBS_PLUGIN_DESTINATION "obs-plugins")
  48. set(OBS_PLUGIN32_DESTINATION "obs-plugins")
  49. set(OBS_PLUGIN64_DESTINATION "obs-plugins")
  50. set(OBS_DATA_PATH "../${OBS_DATA_DESTINATION}")
  51. set(OBS_INSTALL_PREFIX "")
  52. set(OBS_RELATIVE_PREFIX "../")
  53. set(OBS_SCRIPT_PLUGIN_DESTINATION "${OBS_DATA_DESTINATION}/obs-scripting")
  54. else()
  55. set(OBS_EXECUTABLE_DESTINATION "bin/${_lib_suffix}bit")
  56. set(OBS_EXECUTABLE32_DESTINATION "bin/32bit")
  57. set(OBS_EXECUTABLE64_DESTINATION "bin/64bit")
  58. set(OBS_LIBRARY_DESTINATION "bin/${_lib_suffix}bit")
  59. set(OBS_LIBRARY32_DESTINATION "bin/32bit")
  60. set(OBS_LIBRARY64_DESTINATION "bin/64bit")
  61. set(OBS_PLUGIN_DESTINATION "obs-plugins/${_lib_suffix}bit")
  62. set(OBS_PLUGIN32_DESTINATION "obs-plugins/32bit")
  63. set(OBS_PLUGIN64_DESTINATION "obs-plugins/64bit")
  64. set(OBS_DATA_PATH "../../${OBS_DATA_DESTINATION}")
  65. set(OBS_INSTALL_PREFIX "")
  66. set(OBS_RELATIVE_PREFIX "../../")
  67. set(OBS_SCRIPT_PLUGIN_DESTINATION "${OBS_DATA_DESTINATION}/obs-scripting/${_lib_suffix}bit")
  68. endif()
  69. set(OBS_CMAKE_DESTINATION "cmake")
  70. set(OBS_INCLUDE_DESTINATION "include")
  71. set(OBS_UNIX_STRUCTURE "0")
  72. set(OBS_SCRIPT_PLUGIN_PATH "${OBS_RELATIVE_PREFIX}${OBS_SCRIPT_PLUGIN_DESTINATION}")
  73. else()
  74. if(NOT OBS_MULTIARCH_SUFFIX AND DEFINED ENV{OBS_MULTIARCH_SUFFIX})
  75. set(OBS_MULTIARCH_SUFFIX "$ENV{OBS_MULTIARCH_SUFFIX}")
  76. endif()
  77. set(OBS_EXECUTABLE_DESTINATION "bin")
  78. set(OBS_EXECUTABLE32_DESTINATION "bin32")
  79. set(OBS_EXECUTABLE64_DESTINATION "bin64")
  80. set(OBS_LIBRARY_DESTINATION "lib${OBS_MULTIARCH_SUFFIX}")
  81. set(OBS_LIBRARY32_DESTINATION "lib32")
  82. set(OBS_LIBRARY64_DESTINATION "lib64")
  83. set(OBS_PLUGIN_DESTINATION "${OBS_LIBRARY_DESTINATION}/obs-plugins")
  84. set(OBS_PLUGIN32_DESTINATION "${OBS_LIBRARY32_DESTINATION}/obs-plugins")
  85. set(OBS_PLUGIN64_DESTINATION "${OBS_LIBRARY64_DESTINATION}/obs-plugins")
  86. set(OBS_DATA_DESTINATION "share/obs")
  87. set(OBS_CMAKE_DESTINATION "${OBS_LIBRARY_DESTINATION}/cmake")
  88. set(OBS_INCLUDE_DESTINATION "include/obs")
  89. set(OBS_DATA_PATH "${OBS_DATA_DESTINATION}")
  90. set(OBS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/")
  91. set(OBS_RELATIVE_PREFIX "../")
  92. set(OBS_UNIX_STRUCTURE "1")
  93. set(OBS_SCRIPT_PLUGIN_DESTINATION "${OBS_LIBRARY_DESTINATION}/obs-scripting")
  94. set(OBS_SCRIPT_PLUGIN_PATH "${OBS_INSTALL_PREFIX}${OBS_SCRIPT_PLUGIN_DESTINATION}")
  95. endif()
  96. function(obs_generate_multiarch_installer)
  97. install(DIRECTORY "$ENV{obsInstallerTempDir}/"
  98. DESTINATION "."
  99. USE_SOURCE_PERMISSIONS)
  100. endfunction()
  101. function(obs_helper_copy_dir target target_configs source dest)
  102. add_custom_command(TARGET ${target} POST_BUILD
  103. COMMAND "${CMAKE_COMMAND}"
  104. "-DCONFIG=$<CONFIGURATION>"
  105. "-DTARGET_CONFIGS=${target_configs}"
  106. "-DINPUT=${source}"
  107. "-DOUTPUT=${dest}"
  108. -P "${CMAKE_SOURCE_DIR}/cmake/copy_helper.cmake"
  109. VERBATIM)
  110. endfunction()
  111. function(obs_install_additional maintarget)
  112. set(addfdir "${CMAKE_SOURCE_DIR}/additional_install_files")
  113. if(DEFINED ENV{obsAdditionalInstallFiles})
  114. set(addfdir "$ENV{obsAdditionalInstallFiles}")
  115. endif()
  116. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  117. set(_lib_suffix 64)
  118. else()
  119. set(_lib_suffix 32)
  120. endif()
  121. install(DIRECTORY "${addfdir}/misc/"
  122. DESTINATION "."
  123. USE_SOURCE_PERMISSIONS
  124. PATTERN ".gitignore" EXCLUDE)
  125. install(DIRECTORY "${addfdir}/data/"
  126. DESTINATION "${OBS_DATA_DESTINATION}"
  127. USE_SOURCE_PERMISSIONS
  128. PATTERN ".gitignore" EXCLUDE)
  129. if(INSTALLER_RUN)
  130. install(DIRECTORY "${addfdir}/libs32/"
  131. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  132. USE_SOURCE_PERMISSIONS
  133. PATTERN ".gitignore" EXCLUDE)
  134. install(DIRECTORY "${addfdir}/exec32/"
  135. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  136. USE_SOURCE_PERMISSIONS
  137. PATTERN ".gitignore" EXCLUDE)
  138. install(DIRECTORY "${addfdir}/libs64/"
  139. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  140. USE_SOURCE_PERMISSIONS
  141. PATTERN ".gitignore" EXCLUDE)
  142. install(DIRECTORY "${addfdir}/exec64/"
  143. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  144. USE_SOURCE_PERMISSIONS
  145. PATTERN ".gitignore" EXCLUDE)
  146. install(DIRECTORY "${addfdir}/libs32d/"
  147. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  148. USE_SOURCE_PERMISSIONS
  149. CONFIGURATIONS Debug
  150. PATTERN ".gitignore" EXCLUDE)
  151. install(DIRECTORY "${addfdir}/exec32d/"
  152. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  153. USE_SOURCE_PERMISSIONS
  154. CONFIGURATIONS Debug
  155. PATTERN ".gitignore" EXCLUDE)
  156. install(DIRECTORY "${addfdir}/libs64d/"
  157. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  158. USE_SOURCE_PERMISSIONS
  159. CONFIGURATIONS Debug
  160. PATTERN ".gitignore" EXCLUDE)
  161. install(DIRECTORY "${addfdir}/exec64d/"
  162. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  163. USE_SOURCE_PERMISSIONS
  164. CONFIGURATIONS Debug
  165. PATTERN ".gitignore" EXCLUDE)
  166. install(DIRECTORY "${addfdir}/libs32r/"
  167. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  168. USE_SOURCE_PERMISSIONS
  169. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  170. PATTERN ".gitignore" EXCLUDE)
  171. install(DIRECTORY "${addfdir}/exec32r/"
  172. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  173. USE_SOURCE_PERMISSIONS
  174. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  175. PATTERN ".gitignore" EXCLUDE)
  176. install(DIRECTORY "${addfdir}/libs64r/"
  177. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  178. USE_SOURCE_PERMISSIONS
  179. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  180. PATTERN ".gitignore" EXCLUDE)
  181. install(DIRECTORY "${addfdir}/exec64r/"
  182. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  183. USE_SOURCE_PERMISSIONS
  184. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  185. PATTERN ".gitignore" EXCLUDE)
  186. else()
  187. install(DIRECTORY "${addfdir}/libs${_lib_suffix}/"
  188. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  189. USE_SOURCE_PERMISSIONS
  190. PATTERN ".gitignore" EXCLUDE)
  191. install(DIRECTORY "${addfdir}/exec${_lib_suffix}/"
  192. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  193. USE_SOURCE_PERMISSIONS
  194. PATTERN ".gitignore" EXCLUDE)
  195. install(DIRECTORY "${addfdir}/libs${_lib_suffix}d/"
  196. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  197. USE_SOURCE_PERMISSIONS
  198. CONFIGURATIONS Debug
  199. PATTERN ".gitignore" EXCLUDE)
  200. install(DIRECTORY "${addfdir}/exec${_lib_suffix}d/"
  201. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  202. USE_SOURCE_PERMISSIONS
  203. CONFIGURATIONS Debug
  204. PATTERN ".gitignore" EXCLUDE)
  205. install(DIRECTORY "${addfdir}/libs${_lib_suffix}r/"
  206. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  207. USE_SOURCE_PERMISSIONS
  208. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  209. PATTERN ".gitignore" EXCLUDE)
  210. install(DIRECTORY "${addfdir}/exec${_lib_suffix}r/"
  211. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  212. USE_SOURCE_PERMISSIONS
  213. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  214. PATTERN ".gitignore" EXCLUDE)
  215. endif()
  216. obs_helper_copy_dir(${maintarget} ALL
  217. "${addfdir}/misc/"
  218. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/")
  219. obs_helper_copy_dir(${maintarget} ALL
  220. "${addfdir}/data/"
  221. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_DATA_DESTINATION}/")
  222. obs_helper_copy_dir(${maintarget} ALL
  223. "${addfdir}/libs${_lib_suffix}/"
  224. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_LIBRARY_DESTINATION}/")
  225. obs_helper_copy_dir(${maintarget} ALL
  226. "${addfdir}/exec${_lib_suffix}/"
  227. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_EXECUTABLE_DESTINATION}/")
  228. obs_helper_copy_dir(${maintarget} "Release;MinSizeRel;RelWithDebInfo"
  229. "${addfdir}/exec${_lib_suffix}r/"
  230. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_EXECUTABLE_DESTINATION}/")
  231. obs_helper_copy_dir(${maintarget} "Debug"
  232. "${addfdir}/exec${_lib_suffix}d/"
  233. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_EXECUTABLE_DESTINATION}/")
  234. obs_helper_copy_dir(${maintarget} "Release;MinSizeRel;RelWithDebInfo"
  235. "${addfdir}/libs${_lib_suffix}r/"
  236. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_LIBRARY_DESTINATION}/")
  237. obs_helper_copy_dir(${maintarget} "Debug"
  238. "${addfdir}/libs${_lib_suffix}d/"
  239. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_LIBRARY_DESTINATION}/")
  240. endfunction()
  241. function(export_obs_core target exportname)
  242. install(TARGETS ${target}
  243. EXPORT "${exportname}Target"
  244. LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}"
  245. ARCHIVE DESTINATION "${OBS_LIBRARY_DESTINATION}"
  246. RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}")
  247. export(TARGETS ${target} FILE "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Target.cmake")
  248. export(PACKAGE "${exportname}")
  249. set(CONF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
  250. set(CONF_PLUGIN_DEST "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/${_lib_suffix}bit")
  251. set(CONF_PLUGIN_DEST32 "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/32bit")
  252. set(CONF_PLUGIN_DEST64 "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/64bit")
  253. set(CONF_PLUGIN_DATA_DEST "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/data/obs-plugins")
  254. configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Config.cmake" @ONLY)
  255. file(RELATIVE_PATH _pdir "${CMAKE_INSTALL_PREFIX}/${OBS_CMAKE_DESTINATION}/${exportname}" "${CMAKE_INSTALL_PREFIX}")
  256. set(CONF_INCLUDE_DIRS "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_INCLUDE_DESTINATION}")
  257. set(CONF_PLUGIN_DEST "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN_DESTINATION}")
  258. set(CONF_PLUGIN_DEST32 "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN32_DESTINATION}")
  259. set(CONF_PLUGIN_DEST64 "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN64_DESTINATION}")
  260. set(CONF_PLUGIN_DATA_DEST "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_DATA_DESTINATION}/obs-plugins")
  261. configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${exportname}Config.cmake" @ONLY)
  262. set(_pdir)
  263. configure_file("${exportname}ConfigVersion.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${exportname}ConfigVersion.cmake" @ONLY)
  264. install(FILES
  265. "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${exportname}Config.cmake"
  266. "${CMAKE_CURRENT_BINARY_DIR}/${exportname}ConfigVersion.cmake"
  267. DESTINATION "${OBS_CMAKE_DESTINATION}/${exportname}")
  268. install(EXPORT "${exportname}Target"
  269. DESTINATION "${OBS_CMAKE_DESTINATION}/${exportname}")
  270. endfunction()
  271. function(install_obs_headers)
  272. foreach(hdr ${ARGN})
  273. if(IS_ABSOLUTE "${hdr}")
  274. set(subdir)
  275. else()
  276. get_filename_component(subdir "${hdr}" DIRECTORY)
  277. if(subdir)
  278. set(subdir "/${subdir}")
  279. endif()
  280. endif()
  281. install(FILES "${hdr}" DESTINATION "${OBS_INCLUDE_DESTINATION}${subdir}")
  282. endforeach()
  283. endfunction()
  284. function(obs_debug_copy_helper target dest)
  285. add_custom_command(TARGET ${target} POST_BUILD
  286. COMMAND "${CMAKE_COMMAND}"
  287. "-DCONFIG=$<CONFIGURATION>"
  288. "-DFNAME=$<TARGET_FILE_NAME:${target}>"
  289. "-DINPUT=$<TARGET_FILE_DIR:${target}>"
  290. "-DOUTPUT=${dest}"
  291. -P "${CMAKE_SOURCE_DIR}/cmake/copy_on_debug_helper.cmake"
  292. VERBATIM)
  293. endfunction()
  294. function(install_obs_pdb ttype target)
  295. if(NOT MSVC)
  296. return()
  297. endif()
  298. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  299. set(_bit_suffix "64bit")
  300. else()
  301. set(_bit_suffix "32bit")
  302. endif()
  303. obs_debug_copy_helper(${target} "${CMAKE_CURRENT_BINARY_DIR}/pdbs")
  304. if("${ttype}" STREQUAL "PLUGIN")
  305. obs_debug_copy_helper(${target} "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/obs-plugins/${_bit_suffix}")
  306. if(DEFINED ENV{obsInstallerTempDir})
  307. obs_debug_copy_helper(${target} "$ENV{obsInstallerTempDir}/${OBS_PLUGIN_DESTINATION}")
  308. endif()
  309. install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/pdbs/"
  310. DESTINATION "${OBS_PLUGIN_DESTINATION}"
  311. CONFIGURATIONS Debug RelWithDebInfo)
  312. else()
  313. obs_debug_copy_helper(${target} "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/bin/${_bit_suffix}")
  314. if(DEFINED ENV{obsInstallerTempDir})
  315. obs_debug_copy_helper(${target} "$ENV{obsInstallerTempDir}/${OBS_EXECUTABLE_DESTINATION}")
  316. endif()
  317. install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/pdbs/"
  318. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  319. CONFIGURATIONS Debug RelWithDebInfo)
  320. endif()
  321. endfunction()
  322. function(install_obs_core target)
  323. if(APPLE)
  324. set(_bit_suffix "")
  325. elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
  326. set(_bit_suffix "64bit/")
  327. else()
  328. set(_bit_suffix "32bit/")
  329. endif()
  330. if("${ARGV1}" STREQUAL "EXPORT")
  331. export_obs_core("${target}" "${ARGV2}")
  332. else()
  333. install(TARGETS ${target}
  334. LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}"
  335. RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}")
  336. endif()
  337. add_custom_command(TARGET ${target} POST_BUILD
  338. COMMAND "${CMAKE_COMMAND}" -E copy
  339. "$<TARGET_FILE:${target}>"
  340. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/bin/${_bit_suffix}$<TARGET_FILE_NAME:${target}>"
  341. VERBATIM)
  342. if(DEFINED ENV{obsInstallerTempDir})
  343. get_property(target_type TARGET ${target} PROPERTY TYPE)
  344. if("${target_type}" STREQUAL "EXECUTABLE")
  345. set(tmp_target_dir "${OBS_EXECUTABLE_DESTINATION}")
  346. else()
  347. set(tmp_target_dir "${OBS_LIBRARY_DESTINATION}")
  348. endif()
  349. add_custom_command(TARGET ${target} POST_BUILD
  350. COMMAND "${CMAKE_COMMAND}" -E copy
  351. "$<TARGET_FILE:${target}>"
  352. "$ENV{obsInstallerTempDir}/${tmp_target_dir}/$<TARGET_FILE_NAME:${target}>"
  353. VERBATIM)
  354. endif()
  355. install_obs_pdb(CORE ${target})
  356. endfunction()
  357. function(install_obs_bin target mode)
  358. foreach(bin ${ARGN})
  359. if(APPLE)
  360. set(_bit_suffix "")
  361. elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
  362. set(_bit_suffix "64bit/")
  363. else()
  364. set(_bit_suffix "32bit/")
  365. endif()
  366. if(NOT IS_ABSOLUTE "${bin}")
  367. set(bin "${CMAKE_CURRENT_SOURCE_DIR}/${bin}")
  368. endif()
  369. get_filename_component(fname "${bin}" NAME)
  370. if(NOT "${mode}" MATCHES "INSTALL_ONLY")
  371. add_custom_command(TARGET ${target} POST_BUILD
  372. COMMAND "${CMAKE_COMMAND}" -E copy
  373. "${bin}"
  374. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/bin/${_bit_suffix}${fname}"
  375. VERBATIM)
  376. endif()
  377. install(FILES "${bin}"
  378. DESTINATION "${OBS_EXECUTABLE_DESTINATION}")
  379. if(DEFINED ENV{obsInstallerTempDir})
  380. add_custom_command(TARGET ${target} POST_BUILD
  381. COMMAND "${CMAKE_COMMAND}" -E copy
  382. "${bin}"
  383. "$ENV{obsInstallerTempDir}/${OBS_EXECUTABLE_DESTINATION}/${fname}"
  384. VERBATIM)
  385. endif()
  386. endforeach()
  387. endfunction()
  388. function(install_obs_plugin target)
  389. if(APPLE)
  390. set(_bit_suffix "")
  391. elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
  392. set(_bit_suffix "64bit/")
  393. else()
  394. set(_bit_suffix "32bit/")
  395. endif()
  396. set_target_properties(${target} PROPERTIES
  397. PREFIX "")
  398. install(TARGETS ${target}
  399. LIBRARY DESTINATION "${OBS_PLUGIN_DESTINATION}"
  400. RUNTIME DESTINATION "${OBS_PLUGIN_DESTINATION}")
  401. add_custom_command(TARGET ${target} POST_BUILD
  402. COMMAND "${CMAKE_COMMAND}" -E copy
  403. "$<TARGET_FILE:${target}>"
  404. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/obs-plugins/${_bit_suffix}$<TARGET_FILE_NAME:${target}>"
  405. VERBATIM)
  406. if(DEFINED ENV{obsInstallerTempDir})
  407. add_custom_command(TARGET ${target} POST_BUILD
  408. COMMAND "${CMAKE_COMMAND}" -E copy
  409. "$<TARGET_FILE:${target}>" "$ENV{obsInstallerTempDir}/${OBS_PLUGIN_DESTINATION}/$<TARGET_FILE_NAME:${target}>"
  410. VERBATIM)
  411. endif()
  412. install_obs_pdb(PLUGIN ${target})
  413. endfunction()
  414. function(install_obs_data target datadir datadest)
  415. install(DIRECTORY ${datadir}/
  416. DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  417. USE_SOURCE_PERMISSIONS)
  418. add_custom_command(TARGET ${target} POST_BUILD
  419. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  420. "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}"
  421. VERBATIM)
  422. if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND DEFINED ENV{obsInstallerTempDir})
  423. add_custom_command(TARGET ${target} POST_BUILD
  424. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  425. "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}"
  426. VERBATIM)
  427. endif()
  428. endfunction()
  429. function(install_obs_data_from_abs_path target datadir datadest)
  430. install(DIRECTORY ${datadir}/
  431. DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  432. USE_SOURCE_PERMISSIONS)
  433. add_custom_command(TARGET ${target} POST_BUILD
  434. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  435. "${datadir}" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}"
  436. VERBATIM)
  437. if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND DEFINED ENV{obsInstallerTempDir})
  438. add_custom_command(TARGET ${target} POST_BUILD
  439. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  440. "${datadir}" "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}"
  441. VERBATIM)
  442. endif()
  443. endfunction()
  444. function(install_obs_data_file target datafile datadest)
  445. install(FILES ${datafile}
  446. DESTINATION "${OBS_DATA_DESTINATION}/${datadest}")
  447. add_custom_command(TARGET ${target} POST_BUILD
  448. COMMAND "${CMAKE_COMMAND}" -E make_directory
  449. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}"
  450. VERBATIM)
  451. add_custom_command(TARGET ${target} POST_BUILD
  452. COMMAND "${CMAKE_COMMAND}" -E copy
  453. "${CMAKE_CURRENT_SOURCE_DIR}/${datafile}" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}"
  454. VERBATIM)
  455. if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND DEFINED ENV{obsInstallerTempDir})
  456. add_custom_command(TARGET ${target} POST_BUILD
  457. COMMAND "${CMAKE_COMMAND}" -E make_directory
  458. "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}"
  459. VERBATIM)
  460. add_custom_command(TARGET ${target} POST_BUILD
  461. COMMAND "${CMAKE_COMMAND}" -E copy
  462. "${CMAKE_CURRENT_SOURCE_DIR}/${datafile}" "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}"
  463. VERBATIM)
  464. endif()
  465. endfunction()
  466. function(install_obs_datatarget target datadest)
  467. install(TARGETS ${target}
  468. LIBRARY DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  469. RUNTIME DESTINATION "${OBS_DATA_DESTINATION}/${datadest}")
  470. add_custom_command(TARGET ${target} POST_BUILD
  471. COMMAND "${CMAKE_COMMAND}" -E copy
  472. "$<TARGET_FILE:${target}>"
  473. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}/$<TARGET_FILE_NAME:${target}>"
  474. VERBATIM)
  475. if(DEFINED ENV{obsInstallerTempDir})
  476. add_custom_command(TARGET ${target} POST_BUILD
  477. COMMAND "${CMAKE_COMMAND}" -E copy
  478. "$<TARGET_FILE:${target}>"
  479. "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}/$<TARGET_FILE_NAME:${target}>"
  480. VERBATIM)
  481. endif()
  482. if(MSVC)
  483. obs_debug_copy_helper(${target} "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}")
  484. endif()
  485. endfunction()
  486. function(install_obs_plugin_with_data target datadir)
  487. install_obs_plugin(${target})
  488. install_obs_data(${target} "${datadir}" "obs-plugins/${target}")
  489. endfunction()
  490. function(define_graphic_modules target)
  491. foreach(dl_lib opengl d3d9 d3d11)
  492. string(TOUPPER ${dl_lib} dl_lib_upper)
  493. if(TARGET libobs-${dl_lib})
  494. if(UNIX AND UNIX_STRUCTURE)
  495. target_compile_definitions(${target}
  496. PRIVATE
  497. DL_${dl_lib_upper}="$<TARGET_SONAME_FILE_NAME:libobs-${dl_lib}>"
  498. )
  499. else()
  500. target_compile_definitions(${target}
  501. PRIVATE
  502. DL_${dl_lib_upper}="$<TARGET_FILE_NAME:libobs-${dl_lib}>"
  503. )
  504. endif()
  505. else()
  506. target_compile_definitions(${target}
  507. PRIVATE
  508. DL_${dl_lib_upper}=""
  509. )
  510. endif()
  511. endforeach()
  512. endfunction()