ObsHelpers.cmake 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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. endif()
  26. if(NOT UNIX_STRUCTURE)
  27. set(OBS_DATA_DESTINATION "data")
  28. if(APPLE)
  29. set(OBS_EXECUTABLE_DESTINATION "bin")
  30. set(OBS_EXECUTABLE32_DESTINATION "bin")
  31. set(OBS_EXECUTABLE64_DESTINATION "bin")
  32. set(OBS_LIBRARY_DESTINATION "bin")
  33. set(OBS_LIBRARY32_DESTINATION "bin")
  34. set(OBS_LIBRARY64_DESTINATION "bin")
  35. set(OBS_PLUGIN_DESTINATION "obs-plugins")
  36. set(OBS_PLUGIN32_DESTINATION "obs-plugins")
  37. set(OBS_PLUGIN64_DESTINATION "obs-plugins")
  38. add_definitions(-DOBS_DATA_PATH="../${OBS_DATA_DESTINATION}")
  39. else()
  40. set(OBS_EXECUTABLE_DESTINATION "bin/${_lib_suffix}bit")
  41. set(OBS_EXECUTABLE32_DESTINATION "bin/32bit")
  42. set(OBS_EXECUTABLE64_DESTINATION "bin/64bit")
  43. set(OBS_LIBRARY_DESTINATION "bin/${_lib_suffix}bit")
  44. set(OBS_LIBRARY32_DESTINATION "bin/32bit")
  45. set(OBS_LIBRARY64_DESTINATION "bin/64bit")
  46. set(OBS_PLUGIN_DESTINATION "obs-plugins/${_lib_suffix}bit")
  47. set(OBS_PLUGIN32_DESTINATION "obs-plugins/32bit")
  48. set(OBS_PLUGIN64_DESTINATION "obs-plugins/64bit")
  49. add_definitions(-DOBS_DATA_PATH="../../${OBS_DATA_DESTINATION}")
  50. endif()
  51. set(OBS_CMAKE_DESTINATION "cmake")
  52. set(OBS_INCLUDE_DESTINATION "include")
  53. else()
  54. set(OBS_EXECUTABLE_DESTINATION "bin")
  55. set(OBS_EXECUTABLE32_DESTINATION "bin32")
  56. set(OBS_EXECUTABLE64_DESTINATION "bin64")
  57. set(OBS_LIBRARY_DESTINATION "lib")
  58. set(OBS_LIBRARY32_DESTINATION "lib32")
  59. set(OBS_LIBRARY64_DESTINATION "lib64")
  60. set(OBS_PLUGIN_DESTINATION "lib/obs-plugins")
  61. set(OBS_PLUGIN32_DESTINATION "lib32/obs-plugins")
  62. set(OBS_PLUGIN64_DESTINATION "lib64/obs-plugins")
  63. set(OBS_DATA_DESTINATION "share/obs")
  64. set(OBS_CMAKE_DESTINATION "lib/cmake")
  65. set(OBS_INCLUDE_DESTINATION "include/obs")
  66. add_definitions(-DOBS_DATA_PATH="${OBS_DATA_DESTINATION}")
  67. add_definitions(-DOBS_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}/")
  68. endif()
  69. function(obs_finish_bundle)
  70. if(NOT APPLE OR UNIX_STRUCTURE)
  71. return()
  72. endif()
  73. install(CODE
  74. "if(DEFINED ENV{FIXUP_BUNDLE})
  75. execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/cmake/osxbundle/fixup_bundle.sh\" . bin WORKING_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}\")
  76. endif()")
  77. endfunction()
  78. function(obs_generate_multiarch_installer)
  79. install(DIRECTORY "$ENV{obsInstallerTempDir}/"
  80. DESTINATION "."
  81. USE_SOURCE_PERMISSIONS)
  82. endfunction()
  83. function(obs_install_additional)
  84. set(addfdir "${CMAKE_SOURCE_DIR}/additional_install_files")
  85. if(DEFINED ENV{obsAdditionalInstallFiles})
  86. set(addfdir "$ENV{obsAdditionalInstallFiles}")
  87. endif()
  88. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  89. set(_lib_suffix 64)
  90. else()
  91. set(_lib_suffix 32)
  92. endif()
  93. install(DIRECTORY "${addfdir}/misc/"
  94. DESTINATION "."
  95. USE_SOURCE_PERMISSIONS
  96. PATTERN ".gitignore" EXCLUDE)
  97. install(DIRECTORY "${addfdir}/data/"
  98. DESTINATION "${OBS_DATA_DESTINATION}"
  99. USE_SOURCE_PERMISSIONS
  100. PATTERN ".gitignore" EXCLUDE)
  101. if(INSTALLER_RUN)
  102. install(DIRECTORY "${addfdir}/libs32/"
  103. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  104. USE_SOURCE_PERMISSIONS
  105. PATTERN ".gitignore" EXCLUDE)
  106. install(DIRECTORY "${addfdir}/exec32/"
  107. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  108. USE_SOURCE_PERMISSIONS
  109. PATTERN ".gitignore" EXCLUDE)
  110. install(DIRECTORY "${addfdir}/libs64/"
  111. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  112. USE_SOURCE_PERMISSIONS
  113. PATTERN ".gitignore" EXCLUDE)
  114. install(DIRECTORY "${addfdir}/exec64/"
  115. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  116. USE_SOURCE_PERMISSIONS
  117. PATTERN ".gitignore" EXCLUDE)
  118. else()
  119. install(DIRECTORY "${addfdir}/libs${_lib_suffix}/"
  120. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  121. USE_SOURCE_PERMISSIONS
  122. PATTERN ".gitignore" EXCLUDE)
  123. install(DIRECTORY "${addfdir}/exec${_lib_suffix}/"
  124. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  125. USE_SOURCE_PERMISSIONS
  126. PATTERN ".gitignore" EXCLUDE)
  127. endif()
  128. endfunction()
  129. macro(export_obs_core target exportname)
  130. install(TARGETS ${target}
  131. EXPORT "${exportname}Target"
  132. LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}"
  133. RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}")
  134. export(TARGETS ${target} FILE "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Target.cmake")
  135. export(PACKAGE "${exportname}")
  136. set(CONF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
  137. configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Config.cmake" @ONLY)
  138. set(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${OBS_INCLUDE_DESTINATION}")
  139. configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${exportname}Config.cmake" @ONLY)
  140. configure_file("${exportname}ConfigVersion.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${exportname}ConfigVersion.cmake" @ONLY)
  141. install(FILES
  142. "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${exportname}Config.cmake"
  143. "${CMAKE_CURRENT_BINARY_DIR}/${exportname}ConfigVersion.cmake"
  144. DESTINATION "${OBS_CMAKE_DESTINATION}/${exportname}")
  145. install(EXPORT "${exportname}Target"
  146. DESTINATION "${OBS_CMAKE_DESTINATION}/${exportname}")
  147. endmacro()
  148. macro(install_obs_headers)
  149. foreach(hdr ${ARGN})
  150. if("${hdr}" MATCHES "^/.*$")
  151. set(subdir)
  152. else()
  153. get_filename_component(subdir "${hdr}" DIRECTORY)
  154. if(subdir)
  155. set(subdir "/${subdir}")
  156. endif()
  157. endif()
  158. install(FILES "${hdr}" DESTINATION "${OBS_INCLUDE_DESTINATION}${subdir}")
  159. endforeach()
  160. endmacro()
  161. macro(install_obs_core target)
  162. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  163. set(_bit_suffix "64bit/")
  164. else()
  165. set(_bit_suffix "32bit/")
  166. endif()
  167. if(APPLE)
  168. set(_bit_suffix "")
  169. endif()
  170. if("${ARGV1}" STREQUAL "EXPORT")
  171. export_obs_core("${target}" "${ARGV2}")
  172. else()
  173. install(TARGETS ${target}
  174. LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}"
  175. RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}")
  176. endif()
  177. add_custom_command(TARGET ${target} POST_BUILD
  178. COMMAND "${CMAKE_COMMAND}" -E copy
  179. "$<TARGET_FILE:${target}>"
  180. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/bin/${_bit_suffix}$<TARGET_FILE_NAME:${target}>"
  181. VERBATIM)
  182. if(DEFINED ENV{obsInstallerTempDir})
  183. get_property(target_type TARGET ${target} PROPERTY TYPE)
  184. if("${target_type}" STREQUAL "EXECUTABLE")
  185. set(tmp_target_dir "${OBS_EXECUTABLE_DESTINATION}")
  186. else()
  187. set(tmp_target_dir "${OBS_LIBRARY_DESTINATION}")
  188. endif()
  189. add_custom_command(TARGET ${target} POST_BUILD
  190. COMMAND "${CMAKE_COMMAND}" -E copy
  191. "$<TARGET_FILE:${target}>" "$ENV{obsInstallerTempDir}/${tmp_target_dir}/$<TARGET_FILE_NAME:${target}>"
  192. VERBATIM)
  193. endif()
  194. endmacro()
  195. macro(install_obs_plugin target)
  196. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  197. set(_bit_suffix "64bit/")
  198. else()
  199. set(_bit_suffix "32bit/")
  200. endif()
  201. if(APPLE)
  202. set(_bit_suffix "")
  203. endif()
  204. install(TARGETS ${target}
  205. LIBRARY DESTINATION "${OBS_PLUGIN_DESTINATION}"
  206. RUNTIME DESTINATION "${OBS_PLUGIN_DESTINATION}")
  207. add_custom_command(TARGET ${target} POST_BUILD
  208. COMMAND "${CMAKE_COMMAND}" -E copy
  209. "$<TARGET_FILE:${target}>"
  210. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/obs-plugins/${_bit_suffix}$<TARGET_FILE_NAME:${target}>"
  211. VERBATIM)
  212. if(DEFINED ENV{obsInstallerTempDir})
  213. add_custom_command(TARGET ${target} POST_BUILD
  214. COMMAND "${CMAKE_COMMAND}" -E copy
  215. "$<TARGET_FILE:${target}>" "$ENV{obsInstallerTempDir}/${OBS_PLUGIN_DESTINATION}/$<TARGET_FILE_NAME:${target}>"
  216. VERBATIM)
  217. endif()
  218. endmacro()
  219. macro(install_obs_data target datadir datadest)
  220. install(DIRECTORY ${datadir}/
  221. DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  222. USE_SOURCE_PERMISSIONS)
  223. add_custom_command(TARGET ${target} POST_BUILD
  224. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  225. "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}"
  226. VERBATIM)
  227. if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND DEFINED ENV{obsInstallerTempDir})
  228. add_custom_command(TARGET ${target} POST_BUILD
  229. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  230. "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}"
  231. VERBATIM)
  232. endif()
  233. endmacro()
  234. macro(install_obs_datatarget target datadest)
  235. install(TARGETS ${target}
  236. LIBRARY DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  237. RUNTIME DESTINATION "${OBS_DATA_DESTINATION}/${datadest}")
  238. add_custom_command(TARGET ${target} POST_BUILD
  239. COMMAND "${CMAKE_COMMAND}" -E copy
  240. "$<TARGET_FILE:${target}>"
  241. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}/$<TARGET_FILE_NAME:${target}>"
  242. VERBATIM)
  243. if(DEFINED ENV{obsInstallerTempDir})
  244. add_custom_command(TARGET ${target} POST_BUILD
  245. COMMAND "${CMAKE_COMMAND}" -E copy
  246. "$<TARGET_FILE:${target}>"
  247. "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}/$<TARGET_FILE_NAME:${target}>"
  248. VERBATIM)
  249. endif()
  250. endmacro()
  251. macro(install_obs_plugin_data target datadir)
  252. install_obs_plugin(${target})
  253. install_obs_data(${target} "${datadir}" "obs-plugins/${target}")
  254. endmacro()