ObsHelpers.cmake 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  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. else()
  70. if(NOT OBS_MULTIARCH_SUFFIX AND DEFINED ENV{OBS_MULTIARCH_SUFFIX})
  71. set(OBS_MULTIARCH_SUFFIX "$ENV{OBS_MULTIARCH_SUFFIX}")
  72. endif()
  73. set(OBS_EXECUTABLE_DESTINATION "bin")
  74. set(OBS_EXECUTABLE32_DESTINATION "bin32")
  75. set(OBS_EXECUTABLE64_DESTINATION "bin64")
  76. set(OBS_LIBRARY_DESTINATION "lib${OBS_MULTIARCH_SUFFIX}")
  77. set(OBS_LIBRARY32_DESTINATION "lib32")
  78. set(OBS_LIBRARY64_DESTINATION "lib64")
  79. set(OBS_PLUGIN_DESTINATION "${OBS_LIBRARY_DESTINATION}/obs-plugins")
  80. set(OBS_PLUGIN32_DESTINATION "${OBS_LIBRARY32_DESTINATION}/obs-plugins")
  81. set(OBS_PLUGIN64_DESTINATION "${OBS_LIBRARY64_DESTINATION}/obs-plugins")
  82. set(OBS_DATA_DESTINATION "share/obs")
  83. set(OBS_CMAKE_DESTINATION "${OBS_LIBRARY_DESTINATION}/cmake")
  84. set(OBS_INCLUDE_DESTINATION "include/obs")
  85. set(OBS_DATA_PATH "${OBS_DATA_DESTINATION}")
  86. set(OBS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/")
  87. set(OBS_RELATIVE_PREFIX "../")
  88. endif()
  89. function(obs_finish_bundle)
  90. if(NOT APPLE OR UNIX_STRUCTURE)
  91. return()
  92. endif()
  93. install(CODE
  94. "if(DEFINED ENV{FIXUP_BUNDLE})
  95. execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/cmake/osxbundle/fixup_bundle.sh\" . bin WORKING_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}\")
  96. endif()")
  97. endfunction()
  98. function(obs_generate_multiarch_installer)
  99. install(DIRECTORY "$ENV{obsInstallerTempDir}/"
  100. DESTINATION "."
  101. USE_SOURCE_PERMISSIONS)
  102. endfunction()
  103. function(obs_helper_copy_dir target target_configs source dest)
  104. add_custom_command(TARGET ${target} POST_BUILD
  105. COMMAND "${CMAKE_COMMAND}"
  106. "-DCONFIG=$<CONFIGURATION>"
  107. "-DTARGET_CONFIGS=${target_configs}"
  108. "-DINPUT=${source}"
  109. "-DOUTPUT=${dest}"
  110. -P "${CMAKE_SOURCE_DIR}/cmake/copy_helper.cmake"
  111. VERBATIM)
  112. endfunction()
  113. function(obs_install_additional maintarget)
  114. set(addfdir "${CMAKE_SOURCE_DIR}/additional_install_files")
  115. if(DEFINED ENV{obsAdditionalInstallFiles})
  116. set(addfdir "$ENV{obsAdditionalInstallFiles}")
  117. endif()
  118. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  119. set(_lib_suffix 64)
  120. else()
  121. set(_lib_suffix 32)
  122. endif()
  123. install(DIRECTORY "${addfdir}/misc/"
  124. DESTINATION "."
  125. USE_SOURCE_PERMISSIONS
  126. PATTERN ".gitignore" EXCLUDE)
  127. install(DIRECTORY "${addfdir}/data/"
  128. DESTINATION "${OBS_DATA_DESTINATION}"
  129. USE_SOURCE_PERMISSIONS
  130. PATTERN ".gitignore" EXCLUDE)
  131. if(INSTALLER_RUN)
  132. install(DIRECTORY "${addfdir}/libs32/"
  133. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  134. USE_SOURCE_PERMISSIONS
  135. PATTERN ".gitignore" EXCLUDE)
  136. install(DIRECTORY "${addfdir}/exec32/"
  137. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  138. USE_SOURCE_PERMISSIONS
  139. PATTERN ".gitignore" EXCLUDE)
  140. install(DIRECTORY "${addfdir}/libs64/"
  141. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  142. USE_SOURCE_PERMISSIONS
  143. PATTERN ".gitignore" EXCLUDE)
  144. install(DIRECTORY "${addfdir}/exec64/"
  145. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  146. USE_SOURCE_PERMISSIONS
  147. PATTERN ".gitignore" EXCLUDE)
  148. install(DIRECTORY "${addfdir}/libs32d/"
  149. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  150. USE_SOURCE_PERMISSIONS
  151. CONFIGURATIONS Debug
  152. PATTERN ".gitignore" EXCLUDE)
  153. install(DIRECTORY "${addfdir}/exec32d/"
  154. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  155. USE_SOURCE_PERMISSIONS
  156. CONFIGURATIONS Debug
  157. PATTERN ".gitignore" EXCLUDE)
  158. install(DIRECTORY "${addfdir}/libs64d/"
  159. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  160. USE_SOURCE_PERMISSIONS
  161. CONFIGURATIONS Debug
  162. PATTERN ".gitignore" EXCLUDE)
  163. install(DIRECTORY "${addfdir}/exec64d/"
  164. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  165. USE_SOURCE_PERMISSIONS
  166. CONFIGURATIONS Debug
  167. PATTERN ".gitignore" EXCLUDE)
  168. install(DIRECTORY "${addfdir}/libs32r/"
  169. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  170. USE_SOURCE_PERMISSIONS
  171. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  172. PATTERN ".gitignore" EXCLUDE)
  173. install(DIRECTORY "${addfdir}/exec32r/"
  174. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  175. USE_SOURCE_PERMISSIONS
  176. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  177. PATTERN ".gitignore" EXCLUDE)
  178. install(DIRECTORY "${addfdir}/libs64r/"
  179. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  180. USE_SOURCE_PERMISSIONS
  181. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  182. PATTERN ".gitignore" EXCLUDE)
  183. install(DIRECTORY "${addfdir}/exec64r/"
  184. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  185. USE_SOURCE_PERMISSIONS
  186. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  187. PATTERN ".gitignore" EXCLUDE)
  188. else()
  189. install(DIRECTORY "${addfdir}/libs${_lib_suffix}/"
  190. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  191. USE_SOURCE_PERMISSIONS
  192. PATTERN ".gitignore" EXCLUDE)
  193. install(DIRECTORY "${addfdir}/exec${_lib_suffix}/"
  194. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  195. USE_SOURCE_PERMISSIONS
  196. PATTERN ".gitignore" EXCLUDE)
  197. install(DIRECTORY "${addfdir}/libs${_lib_suffix}d/"
  198. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  199. USE_SOURCE_PERMISSIONS
  200. CONFIGURATIONS Debug
  201. PATTERN ".gitignore" EXCLUDE)
  202. install(DIRECTORY "${addfdir}/exec${_lib_suffix}d/"
  203. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  204. USE_SOURCE_PERMISSIONS
  205. CONFIGURATIONS Debug
  206. PATTERN ".gitignore" EXCLUDE)
  207. install(DIRECTORY "${addfdir}/libs${_lib_suffix}r/"
  208. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  209. USE_SOURCE_PERMISSIONS
  210. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  211. PATTERN ".gitignore" EXCLUDE)
  212. install(DIRECTORY "${addfdir}/exec${_lib_suffix}r/"
  213. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  214. USE_SOURCE_PERMISSIONS
  215. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  216. PATTERN ".gitignore" EXCLUDE)
  217. endif()
  218. obs_helper_copy_dir(${maintarget} ALL
  219. "${addfdir}/misc/"
  220. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/")
  221. obs_helper_copy_dir(${maintarget} ALL
  222. "${addfdir}/data/"
  223. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_DATA_DESTINATION}/")
  224. obs_helper_copy_dir(${maintarget} ALL
  225. "${addfdir}/libs${_lib_suffix}/"
  226. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_LIBRARY_DESTINATION}/")
  227. obs_helper_copy_dir(${maintarget} ALL
  228. "${addfdir}/exec${_lib_suffix}/"
  229. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_EXECUTABLE_DESTINATION}/")
  230. obs_helper_copy_dir(${maintarget} "Release;MinSizeRel;RelWithDebInfo"
  231. "${addfdir}/exec${_lib_suffix}r/"
  232. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_EXECUTABLE_DESTINATION}/")
  233. obs_helper_copy_dir(${maintarget} "Debug"
  234. "${addfdir}/exec${_lib_suffix}d/"
  235. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_EXECUTABLE_DESTINATION}/")
  236. obs_helper_copy_dir(${maintarget} "Release;MinSizeRel;RelWithDebInfo"
  237. "${addfdir}/libs${_lib_suffix}r/"
  238. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_LIBRARY_DESTINATION}/")
  239. obs_helper_copy_dir(${maintarget} "Debug"
  240. "${addfdir}/libs${_lib_suffix}d/"
  241. "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/${OBS_LIBRARY_DESTINATION}/")
  242. endfunction()
  243. function(export_obs_core target exportname)
  244. install(TARGETS ${target}
  245. EXPORT "${exportname}Target"
  246. LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}"
  247. ARCHIVE DESTINATION "${OBS_LIBRARY_DESTINATION}"
  248. RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}")
  249. export(TARGETS ${target} FILE "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Target.cmake")
  250. export(PACKAGE "${exportname}")
  251. set(CONF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
  252. set(CONF_PLUGIN_DEST "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/${_lib_suffix}bit")
  253. set(CONF_PLUGIN_DEST32 "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/32bit")
  254. set(CONF_PLUGIN_DEST64 "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/64bit")
  255. configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Config.cmake" @ONLY)
  256. file(RELATIVE_PATH _pdir "${CMAKE_INSTALL_PREFIX}/${OBS_CMAKE_DESTINATION}/${exportname}" "${CMAKE_INSTALL_PREFIX}")
  257. set(CONF_INCLUDE_DIRS "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_INCLUDE_DESTINATION}")
  258. set(CONF_PLUGIN_DEST "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN_DESTINATION}")
  259. set(CONF_PLUGIN_DEST32 "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN32_DESTINATION}")
  260. set(CONF_PLUGIN_DEST64 "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN64_DESTINATION}")
  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_datatarget target datadest)
  430. install(TARGETS ${target}
  431. LIBRARY DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  432. RUNTIME DESTINATION "${OBS_DATA_DESTINATION}/${datadest}")
  433. add_custom_command(TARGET ${target} POST_BUILD
  434. COMMAND "${CMAKE_COMMAND}" -E copy
  435. "$<TARGET_FILE:${target}>"
  436. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}/$<TARGET_FILE_NAME:${target}>"
  437. VERBATIM)
  438. if(DEFINED ENV{obsInstallerTempDir})
  439. add_custom_command(TARGET ${target} POST_BUILD
  440. COMMAND "${CMAKE_COMMAND}" -E copy
  441. "$<TARGET_FILE:${target}>"
  442. "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}/$<TARGET_FILE_NAME:${target}>"
  443. VERBATIM)
  444. endif()
  445. endfunction()
  446. function(install_obs_plugin_with_data target datadir)
  447. install_obs_plugin(${target})
  448. install_obs_data(${target} "${datadir}" "obs-plugins/${target}")
  449. endfunction()