ObsHelpers.cmake 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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. else()
  52. set(OBS_EXECUTABLE_DESTINATION "bin")
  53. set(OBS_EXECUTABLE32_DESTINATION "bin32")
  54. set(OBS_EXECUTABLE64_DESTINATION "bin64")
  55. set(OBS_LIBRARY_DESTINATION "lib")
  56. set(OBS_LIBRARY32_DESTINATION "lib32")
  57. set(OBS_LIBRARY64_DESTINATION "lib64")
  58. set(OBS_PLUGIN_DESTINATION "lib/obs-plugins")
  59. set(OBS_PLUGIN32_DESTINATION "lib32/obs-plugins")
  60. set(OBS_PLUGIN64_DESTINATION "lib64/obs-plugins")
  61. set(OBS_DATA_DESTINATION "share/obs")
  62. add_definitions(-DOBS_DATA_PATH="${OBS_DATA_DESTINATION}")
  63. add_definitions(-DOBS_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}/")
  64. endif()
  65. function(obs_finish_bundle)
  66. if(NOT APPLE OR UNIX_STRUCTURE)
  67. return()
  68. endif()
  69. install(CODE
  70. "if(DEFINED ENV{FIXUP_BUNDLE})
  71. execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/cmake/osxbundle/fixup_bundle.sh\" . bin WORKING_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}\")
  72. endif()")
  73. endfunction()
  74. function(obs_generate_multiarch_installer)
  75. install(DIRECTORY "$ENV{obsInstallerTempDir}/"
  76. DESTINATION "."
  77. USE_SOURCE_PERMISSIONS)
  78. endfunction()
  79. function(obs_install_additional)
  80. set(addfdir "${CMAKE_SOURCE_DIR}/additional_install_files")
  81. if(DEFINED ENV{obsAdditionalInstallFiles})
  82. set(addfdir "$ENV{obsAdditionalInstallFiles}")
  83. endif()
  84. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  85. set(_lib_suffix 64)
  86. else()
  87. set(_lib_suffix 32)
  88. endif()
  89. install(DIRECTORY "${addfdir}/misc/"
  90. DESTINATION "."
  91. USE_SOURCE_PERMISSIONS
  92. PATTERN ".gitignore" EXCLUDE)
  93. install(DIRECTORY "${addfdir}/data/"
  94. DESTINATION "${OBS_DATA_DESTINATION}"
  95. USE_SOURCE_PERMISSIONS
  96. PATTERN ".gitignore" EXCLUDE)
  97. if(INSTALLER_RUN)
  98. install(DIRECTORY "${addfdir}/libs32/"
  99. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  100. USE_SOURCE_PERMISSIONS
  101. PATTERN ".gitignore" EXCLUDE)
  102. install(DIRECTORY "${addfdir}/exec32/"
  103. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  104. USE_SOURCE_PERMISSIONS
  105. PATTERN ".gitignore" EXCLUDE)
  106. install(DIRECTORY "${addfdir}/libs64/"
  107. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  108. USE_SOURCE_PERMISSIONS
  109. PATTERN ".gitignore" EXCLUDE)
  110. install(DIRECTORY "${addfdir}/exec64/"
  111. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  112. USE_SOURCE_PERMISSIONS
  113. PATTERN ".gitignore" EXCLUDE)
  114. else()
  115. install(DIRECTORY "${addfdir}/libs${_lib_suffix}/"
  116. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  117. USE_SOURCE_PERMISSIONS
  118. PATTERN ".gitignore" EXCLUDE)
  119. install(DIRECTORY "${addfdir}/exec${_lib_suffix}/"
  120. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  121. USE_SOURCE_PERMISSIONS
  122. PATTERN ".gitignore" EXCLUDE)
  123. endif()
  124. endfunction()
  125. macro(install_obs_core target)
  126. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  127. set(_bit_suffix "64bit/")
  128. else()
  129. set(_bit_suffix "32bit/")
  130. endif()
  131. if(APPLE)
  132. set(_bit_suffix "")
  133. endif()
  134. install(TARGETS ${target}
  135. LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}"
  136. RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}")
  137. add_custom_command(TARGET ${target} POST_BUILD
  138. COMMAND "${CMAKE_COMMAND}" -E copy
  139. "$<TARGET_FILE:${target}>"
  140. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/bin/${_bit_suffix}$<TARGET_FILE_NAME:${target}>"
  141. VERBATIM)
  142. if(DEFINED ENV{obsInstallerTempDir})
  143. get_property(target_type TARGET ${target} PROPERTY TYPE)
  144. if("${target_type}" STREQUAL "EXECUTABLE")
  145. set(tmp_target_dir "${OBS_EXECUTABLE_DESTINATION}")
  146. else()
  147. set(tmp_target_dir "${OBS_LIBRARY_DESTINATION}")
  148. endif()
  149. add_custom_command(TARGET ${target} POST_BUILD
  150. COMMAND "${CMAKE_COMMAND}" -E copy
  151. "$<TARGET_FILE:${target}>" "$ENV{obsInstallerTempDir}/${tmp_target_dir}/$<TARGET_FILE_NAME:${target}>"
  152. VERBATIM)
  153. endif()
  154. endmacro()
  155. macro(install_obs_plugin target)
  156. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  157. set(_bit_suffix "64bit/")
  158. else()
  159. set(_bit_suffix "32bit/")
  160. endif()
  161. if(APPLE)
  162. set(_bit_suffix "")
  163. endif()
  164. install(TARGETS ${target}
  165. LIBRARY DESTINATION "${OBS_PLUGIN_DESTINATION}"
  166. RUNTIME DESTINATION "${OBS_PLUGIN_DESTINATION}")
  167. add_custom_command(TARGET ${target} POST_BUILD
  168. COMMAND "${CMAKE_COMMAND}" -E copy
  169. "$<TARGET_FILE:${target}>"
  170. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/obs-plugins/${_bit_suffix}$<TARGET_FILE_NAME:${target}>"
  171. VERBATIM)
  172. if(DEFINED ENV{obsInstallerTempDir})
  173. add_custom_command(TARGET ${target} POST_BUILD
  174. COMMAND "${CMAKE_COMMAND}" -E copy
  175. "$<TARGET_FILE:${target}>" "$ENV{obsInstallerTempDir}/${OBS_PLUGIN_DESTINATION}/$<TARGET_FILE_NAME:${target}>"
  176. VERBATIM)
  177. endif()
  178. endmacro()
  179. macro(install_obs_data target datadir datadest)
  180. install(DIRECTORY ${datadir}/
  181. DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  182. USE_SOURCE_PERMISSIONS)
  183. add_custom_command(TARGET ${target} POST_BUILD
  184. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  185. "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}"
  186. VERBATIM)
  187. if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND DEFINED ENV{obsInstallerTempDir})
  188. add_custom_command(TARGET ${target} POST_BUILD
  189. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  190. "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}"
  191. VERBATIM)
  192. endif()
  193. endmacro()
  194. macro(install_obs_datatarget target datadest)
  195. install(TARGETS ${target}
  196. LIBRARY DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  197. RUNTIME DESTINATION "${OBS_DATA_DESTINATION}/${datadest}")
  198. add_custom_command(TARGET ${target} POST_BUILD
  199. COMMAND "${CMAKE_COMMAND}" -E copy
  200. "$<TARGET_FILE:${target}>"
  201. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}/$<TARGET_FILE_NAME:${target}>"
  202. VERBATIM)
  203. if(DEFINED ENV{obsInstallerTempDir})
  204. add_custom_command(TARGET ${target} POST_BUILD
  205. COMMAND "${CMAKE_COMMAND}" -E copy
  206. "$<TARGET_FILE:${target}>"
  207. "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}/$<TARGET_FILE_NAME:${target}>"
  208. VERBATIM)
  209. endif()
  210. endmacro()
  211. macro(install_obs_plugin_data target datadir)
  212. install_obs_plugin(${target})
  213. install_obs_data(${target} "${datadir}" "obs-plugins/${target}")
  214. endmacro()