helpers.cmake 4.2 KB

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