ObsHelpers.cmake 19 KB

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