helpers.cmake 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # CMake macOS helper functions module
  2. include_guard(GLOBAL)
  3. include(helpers_common)
  4. # set_target_properties_obs: Set target properties for use in obs-studio
  5. function(set_target_properties_plugin target)
  6. set(options "")
  7. set(oneValueArgs "")
  8. set(multiValueArgs PROPERTIES)
  9. cmake_parse_arguments(PARSE_ARGV 0 _STPO "${options}" "${oneValueArgs}" "${multiValueArgs}")
  10. message(DEBUG "Setting additional properties for target ${target}...")
  11. while(_STPO_PROPERTIES)
  12. list(POP_FRONT _STPO_PROPERTIES key value)
  13. set_property(TARGET ${target} PROPERTY ${key} "${value}")
  14. endwhile()
  15. string(TIMESTAMP CURRENT_YEAR "%Y")
  16. set_target_properties(
  17. ${target}
  18. PROPERTIES
  19. BUNDLE TRUE
  20. BUNDLE_EXTENSION plugin
  21. XCODE_ATTRIBUTE_PRODUCT_NAME ${target}
  22. XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER ${MACOS_BUNDLEID}
  23. XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${PLUGIN_BUILD_NUMBER}
  24. XCODE_ATTRIBUTE_MARKETING_VERSION ${PLUGIN_VERSION}
  25. XCODE_ATTRIBUTE_GENERATE_INFOPLIST_FILE YES
  26. XCODE_ATTRIBUTE_INFOPLIST_FILE ""
  27. XCODE_ATTRIBUTE_INFOPLIST_KEY_CFBundleDisplayName ${target}
  28. XCODE_ATTRIBUTE_INFOPLIST_KEY_NSHumanReadableCopyright "(c) ${CURRENT_YEAR} ${PLUGIN_AUTHOR}"
  29. XCODE_ATTRIBUTE_INSTALL_PATH "$(USER_LIBRARY_DIR)/Application Support/obs-studio/plugins"
  30. )
  31. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist")
  32. set_target_properties(
  33. ${target}
  34. PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist"
  35. )
  36. endif()
  37. if(TARGET plugin-support)
  38. target_link_libraries(${target} PRIVATE plugin-support)
  39. endif()
  40. target_install_resources(${target})
  41. add_custom_command(
  42. TARGET ${target}
  43. POST_BUILD
  44. COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/rundir/$<CONFIG>"
  45. COMMAND
  46. "${CMAKE_COMMAND}" -E copy_directory "$<TARGET_BUNDLE_DIR:${target}>"
  47. "${CMAKE_CURRENT_BINARY_DIR}/rundir/$<CONFIG>/$<TARGET_BUNDLE_DIR_NAME:${target}>"
  48. COMMENT "Copy ${target} to rundir"
  49. VERBATIM
  50. )
  51. get_target_property(target_sources ${target} SOURCES)
  52. set(target_ui_files ${target_sources})
  53. list(FILTER target_ui_files INCLUDE REGEX ".+\\.(ui|qrc)")
  54. source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "UI Files" FILES ${target_ui_files})
  55. install(TARGETS ${target} LIBRARY DESTINATION .)
  56. install(FILES "$<TARGET_BUNDLE_DIR:${target}>.dsym" CONFIGURATIONS Release DESTINATION . OPTIONAL)
  57. configure_file(cmake/macos/resources/distribution.in "${CMAKE_CURRENT_BINARY_DIR}/distribution" @ONLY)
  58. configure_file(cmake/macos/resources/create-package.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/create-package.cmake" @ONLY)
  59. install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/create-package.cmake")
  60. endfunction()
  61. # target_install_resources: Helper function to add resources into bundle
  62. function(target_install_resources target)
  63. message(DEBUG "Installing resources for target ${target}...")
  64. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/data")
  65. file(GLOB_RECURSE data_files "${CMAKE_CURRENT_SOURCE_DIR}/data/*")
  66. foreach(data_file IN LISTS data_files)
  67. cmake_path(
  68. RELATIVE_PATH
  69. data_file
  70. BASE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data/"
  71. OUTPUT_VARIABLE relative_path
  72. )
  73. cmake_path(GET relative_path PARENT_PATH relative_path)
  74. target_sources(${target} PRIVATE "${data_file}")
  75. set_property(SOURCE "${data_file}" PROPERTY MACOSX_PACKAGE_LOCATION "Resources/${relative_path}")
  76. source_group("Resources/${relative_path}" FILES "${data_file}")
  77. endforeach()
  78. endif()
  79. endfunction()
  80. # target_add_resource: Helper function to add a specific resource to a bundle
  81. function(target_add_resource target resource)
  82. message(DEBUG "Add resource ${resource} to target ${target} at destination ${destination}...")
  83. target_sources(${target} PRIVATE "${resource}")
  84. set_property(SOURCE "${resource}" PROPERTY MACOSX_PACKAGE_LOCATION Resources)
  85. source_group("Resources" FILES "${resource}")
  86. endfunction()