ObsHelpers.cmake 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  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_fixup_install_target target type)
  66. if(NOT APPLE OR NOT BUILD_REDISTRIBUTABLE)
  67. return()
  68. endif()
  69. foreach(data ${ARGN})
  70. if(type STREQUAL "TARGET")
  71. get_property(fullpath TARGET "${data}" PROPERTY LOCATION)
  72. else()
  73. set(fullpath "${data}")
  74. endif()
  75. execute_process(COMMAND otool -D "${fullpath}" OUTPUT_VARIABLE otool_out)
  76. string(REGEX REPLACE "(\r?\n)+$" "" otool_out "${otool_out}")
  77. string(REGEX REPLACE ".*\n" "" otool_out "${otool_out}")
  78. string(REGEX REPLACE ".*/" "@rpath/" newpath "${otool_out}")
  79. add_custom_command(TARGET ${target} POST_BUILD
  80. COMMAND
  81. install_name_tool -change "${otool_out}" "${newpath}" "$<TARGET_FILE:${target}>"
  82. VERBATIM)
  83. endforeach()
  84. endfunction()
  85. function(obs_generate_multiarch_installer)
  86. install(DIRECTORY "$ENV{obsInstallerTempDir}/"
  87. DESTINATION "."
  88. USE_SOURCE_PERMISSIONS)
  89. endfunction()
  90. function(obs_install_additional)
  91. set(addfdir "${CMAKE_SOURCE_DIR}/additional_install_files")
  92. if(DEFINED ENV{obsAdditionalInstallFiles})
  93. set(addfdir "$ENV{obsAdditionalInstallFiles}")
  94. endif()
  95. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  96. set(_lib_suffix 64)
  97. else()
  98. set(_lib_suffix 32)
  99. endif()
  100. install(DIRECTORY "${addfdir}/misc/"
  101. DESTINATION "."
  102. USE_SOURCE_PERMISSIONS
  103. PATTERN ".gitignore" EXCLUDE)
  104. install(DIRECTORY "${addfdir}/data/"
  105. DESTINATION "${OBS_DATA_DESTINATION}"
  106. USE_SOURCE_PERMISSIONS
  107. PATTERN ".gitignore" EXCLUDE)
  108. if(INSTALLER_RUN)
  109. install(DIRECTORY "${addfdir}/libs32/"
  110. DESTINATION "${OBS_LIBRARY32_DESTINATION}"
  111. USE_SOURCE_PERMISSIONS
  112. PATTERN ".gitignore" EXCLUDE)
  113. install(DIRECTORY "${addfdir}/exec32/"
  114. DESTINATION "${OBS_EXECUTABLE32_DESTINATION}"
  115. USE_SOURCE_PERMISSIONS
  116. PATTERN ".gitignore" EXCLUDE)
  117. install(DIRECTORY "${addfdir}/libs64/"
  118. DESTINATION "${OBS_LIBRARY64_DESTINATION}"
  119. USE_SOURCE_PERMISSIONS
  120. PATTERN ".gitignore" EXCLUDE)
  121. install(DIRECTORY "${addfdir}/exec64/"
  122. DESTINATION "${OBS_EXECUTABLE64_DESTINATION}"
  123. USE_SOURCE_PERMISSIONS
  124. PATTERN ".gitignore" EXCLUDE)
  125. else()
  126. install(DIRECTORY "${addfdir}/libs${_lib_suffix}/"
  127. DESTINATION "${OBS_LIBRARY_DESTINATION}"
  128. USE_SOURCE_PERMISSIONS
  129. PATTERN ".gitignore" EXCLUDE)
  130. install(DIRECTORY "${addfdir}/exec${_lib_suffix}/"
  131. DESTINATION "${OBS_EXECUTABLE_DESTINATION}"
  132. USE_SOURCE_PERMISSIONS
  133. PATTERN ".gitignore" EXCLUDE)
  134. endif()
  135. endfunction()
  136. macro(install_obs_core target)
  137. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  138. set(_bit_suffix "64bit/")
  139. else()
  140. set(_bit_suffix "32bit/")
  141. endif()
  142. if(APPLE)
  143. set(_bit_suffix "")
  144. endif()
  145. install(TARGETS ${target}
  146. LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}"
  147. RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}")
  148. add_custom_command(TARGET ${target} POST_BUILD
  149. COMMAND "${CMAKE_COMMAND}" -E copy
  150. "$<TARGET_FILE:${target}>"
  151. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/bin/${_bit_suffix}$<TARGET_FILE_NAME:${target}>"
  152. VERBATIM)
  153. if(DEFINED ENV{obsInstallerTempDir})
  154. get_property(target_type TARGET ${target} PROPERTY TYPE)
  155. if("${target_type}" STREQUAL "EXECUTABLE")
  156. set(tmp_target_dir "${OBS_EXECUTABLE_DESTINATION}")
  157. else()
  158. set(tmp_target_dir "${OBS_LIBRARY_DESTINATION}")
  159. endif()
  160. add_custom_command(TARGET ${target} POST_BUILD
  161. COMMAND "${CMAKE_COMMAND}" -E copy
  162. "$<TARGET_FILE:${target}>" "$ENV{obsInstallerTempDir}/${tmp_target_dir}/$<TARGET_FILE_NAME:${target}>"
  163. VERBATIM)
  164. endif()
  165. endmacro()
  166. macro(install_obs_plugin target)
  167. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  168. set(_bit_suffix "64bit/")
  169. else()
  170. set(_bit_suffix "32bit/")
  171. endif()
  172. if(APPLE)
  173. set(_bit_suffix "")
  174. endif()
  175. install(TARGETS ${target}
  176. LIBRARY DESTINATION "${OBS_PLUGIN_DESTINATION}"
  177. RUNTIME DESTINATION "${OBS_PLUGIN_DESTINATION}")
  178. add_custom_command(TARGET ${target} POST_BUILD
  179. COMMAND "${CMAKE_COMMAND}" -E copy
  180. "$<TARGET_FILE:${target}>"
  181. "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/obs-plugins/${_bit_suffix}$<TARGET_FILE_NAME:${target}>"
  182. VERBATIM)
  183. if(DEFINED ENV{obsInstallerTempDir})
  184. add_custom_command(TARGET ${target} POST_BUILD
  185. COMMAND "${CMAKE_COMMAND}" -E copy
  186. "$<TARGET_FILE:${target}>" "$ENV{obsInstallerTempDir}/${OBS_PLUGIN_DESTINATION}/$<TARGET_FILE_NAME:${target}>"
  187. VERBATIM)
  188. endif()
  189. endmacro()
  190. macro(install_obs_data target datadir datadest)
  191. install(DIRECTORY ${datadir}/
  192. DESTINATION "${OBS_DATA_DESTINATION}/${datadest}"
  193. USE_SOURCE_PERMISSIONS)
  194. add_custom_command(TARGET ${target} POST_BUILD
  195. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  196. "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/${datadest}"
  197. VERBATIM)
  198. if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND DEFINED ENV{obsInstallerTempDir})
  199. add_custom_command(TARGET ${target} POST_BUILD
  200. COMMAND "${CMAKE_COMMAND}" -E copy_directory
  201. "${CMAKE_CURRENT_SOURCE_DIR}/${datadir}" "$ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${datadest}"
  202. VERBATIM)
  203. endif()
  204. endmacro()
  205. macro(install_obs_plugin_data target datadir)
  206. install_obs_plugin(${target})
  207. install_obs_data(${target} "${datadir}" "obs-plugins/${target}")
  208. endmacro()