ObsHelpers.cmake 18 KB

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