|
@@ -11,6 +11,23 @@ include_guard(GLOBAL)
|
|
|
|
|
|
include(helpers_common)
|
|
|
|
|
|
+# set_target_xcode_properties: Sets Xcode-specific target attributes
|
|
|
+function(set_target_xcode_properties target)
|
|
|
+ set(options "")
|
|
|
+ set(oneValueArgs "")
|
|
|
+ set(multiValueArgs PROPERTIES)
|
|
|
+ cmake_parse_arguments(PARSE_ARGV 0 _STXP "${options}" "${oneValueArgs}" "${multiValueArgs}")
|
|
|
+
|
|
|
+ message(DEBUG "Setting Xcode properties for target ${target}...")
|
|
|
+
|
|
|
+ while(_STXP_PROPERTIES)
|
|
|
+ list(POP_FRONT _STXP_PROPERTIES key value)
|
|
|
+ # cmake-format: off
|
|
|
+ set_property(TARGET ${target} PROPERTY XCODE_ATTRIBUTE_${key} "${value}")
|
|
|
+ # cmake-format: on
|
|
|
+ endwhile()
|
|
|
+endfunction()
|
|
|
+
|
|
|
# set_target_properties_obs: Set target properties for use in obs-studio
|
|
|
function(set_target_properties_obs target)
|
|
|
set(options "")
|
|
@@ -39,23 +56,26 @@ function(set_target_properties_obs target)
|
|
|
XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY YES
|
|
|
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY YES
|
|
|
XCODE_EMBED_PLUGINS_REMOVE_HEADERS_ON_COPY YES
|
|
|
- XCODE_EMBED_PLUGINS_CODE_SIGN_ON_COPY YES
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.obs-studio
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_NAME OBS
|
|
|
- XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon
|
|
|
- XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${OBS_BUILD_NUMBER}
|
|
|
- XCODE_ATTRIBUTE_MARKETING_VERSION ${OBS_VERSION_CANONICAL}
|
|
|
- XCODE_ATTRIBUTE_GENERATE_INFOPLIST_FILE YES
|
|
|
- XCODE_ATTRIBUTE_COPY_PHASE_STRIP NO
|
|
|
- XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES
|
|
|
- XCODE_ATTRIBUTE_SKIP_INSTALL NO
|
|
|
- XCODE_ATTRIBUTE_INSTALL_PATH "$(LOCAL_APPS_DIR)"
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_KEY_CFBundleDisplayName "OBS Studio"
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_KEY_NSHumanReadableCopyright "(c) 2012-${CURRENT_YEAR} Lain Bailey"
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_KEY_NSCameraUsageDescription
|
|
|
- "OBS needs to access the camera to enable camera sources to work."
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_KEY_NSMicrophoneUsageDescription
|
|
|
- "OBS needs to access the microphone to enable audio input.")
|
|
|
+ XCODE_EMBED_PLUGINS_CODE_SIGN_ON_COPY YES)
|
|
|
+
|
|
|
+ # cmake-format: off
|
|
|
+ set_target_xcode_properties(
|
|
|
+ ${target}
|
|
|
+ PROPERTIES PRODUCT_BUNDLE_IDENTIFIER com.obsproject.obs-studio
|
|
|
+ PRODUCT_NAME OBS
|
|
|
+ ASSETCATALOG_COMPILER_APPICON_NAME AppIcon
|
|
|
+ CURRENT_PROJECT_VERSION ${OBS_BUILD_NUMBER}
|
|
|
+ MARKETING_VERSION ${OBS_VERSION_CANONICAL}
|
|
|
+ GENERATE_INFOPLIST_FILE YES
|
|
|
+ COPY_PHASE_STRIP NO
|
|
|
+ CLANG_ENABLE_OBJC_ARC YES
|
|
|
+ SKIP_INSTALL NO
|
|
|
+ INSTALL_PATH "$(LOCAL_APPS_DIR)"
|
|
|
+ INFOPLIST_KEY_CFBundleDisplayName "OBS Studio"
|
|
|
+ INFOPLIST_KEY_NSHumanReadableCopyright "(c) 2012-${CURRENT_YEAR} Lain Bailey"
|
|
|
+ INFOPLIST_KEY_NSCameraUsageDescription "OBS needs to access the camera to enable camera sources to work."
|
|
|
+ INFOPLIST_KEY_NSMicrophoneUsageDescription "OBS needs to access the microphone to enable audio input.")
|
|
|
+ # cmake-format: on
|
|
|
|
|
|
get_property(obs_dependencies GLOBAL PROPERTY _OBS_DEPENDENCIES)
|
|
|
add_dependencies(${target} ${obs_dependencies})
|
|
@@ -87,9 +107,12 @@ function(set_target_properties_obs target)
|
|
|
get_property(obs_executables GLOBAL PROPERTY _OBS_EXECUTABLES)
|
|
|
add_dependencies(${target} ${obs_executables})
|
|
|
foreach(executable IN LISTS obs_executables)
|
|
|
- set_property(
|
|
|
- TARGET ${executable} PROPERTY XCODE_ATTRIBUTE_INSTALL_PATH
|
|
|
- "$(LOCAL_APPS_DIR)/$<TARGET_BUNDLE_DIR_NAME:${target}>/Contents/MacOS")
|
|
|
+ # cmake-format: off
|
|
|
+ set_target_xcode_properties(
|
|
|
+ ${executable}
|
|
|
+ PROPERTIES INSTALL_PATH "$(LOCAL_APPS_DIR)/$<TARGET_BUNDLE_DIR_NAME:${target}>/Contents/MacOS")
|
|
|
+ # cmake-format: on
|
|
|
+
|
|
|
add_custom_command(
|
|
|
TARGET ${target}
|
|
|
POST_BUILD
|
|
@@ -207,57 +230,75 @@ function(set_target_properties_obs target)
|
|
|
MACHO_COMPATIBILITY_VERSION 1.0
|
|
|
MACHO_CURRENT_VERSION ${OBS_VERSION_MAJOR}
|
|
|
SOVERSION 0
|
|
|
- VERSION 0
|
|
|
- XCODE_ATTRIBUTE_DYLIB_COMPATIBILITY_VERSION 1.0
|
|
|
- XCODE_ATTRIBUTE_DYLIB_CURRENT_VERSION ${OBS_VERSION_MAJOR}
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_NAME ${target}
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}
|
|
|
- XCODE_ATTRIBUTE_SKIP_INSTALL YES)
|
|
|
+ VERSION 0)
|
|
|
+
|
|
|
+ # cmake-format: off
|
|
|
+ set_target_xcode_properties(
|
|
|
+ ${target}
|
|
|
+ PROPERTIES DYLIB_COMPATIBILITY_VERSION 1.0
|
|
|
+ DYLIB_CURRENT_VERSION ${OBS_VERSION_MAJOR}
|
|
|
+ PRODUCT_NAME ${target}
|
|
|
+ PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}
|
|
|
+ SKIP_INSTALL YES)
|
|
|
+ # cmake-format: on
|
|
|
|
|
|
get_target_property(is_framework ${target} FRAMEWORK)
|
|
|
if(is_framework)
|
|
|
- set_target_properties(
|
|
|
+ set_target_properties(${target} PROPERTIES FRAMEWORK_VERSION A MACOSX_FRAMEWORK_IDENTIFIER
|
|
|
+ com.obsproject.${target})
|
|
|
+
|
|
|
+ # cmake-format: off
|
|
|
+ set_target_xcode_properties(
|
|
|
${target}
|
|
|
- PROPERTIES FRAMEWORK_VERSION A
|
|
|
- MACOSX_FRAMEWORK_IDENTIFIER com.obsproject.${target}
|
|
|
- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
|
|
|
- XCODE_ATTRIBUTE_DEVELOPMENT_TEAM ""
|
|
|
- XCODE_ATTRIBUTE_SKIP_INSTALL YES
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_NAME ${target}
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}
|
|
|
- XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${OBS_BUILD_NUMBER}
|
|
|
- XCODE_ATTRIBUTE_MARKETING_VERSION ${OBS_VERSION_CANONICAL}
|
|
|
- XCODE_ATTRIBUTE_GENERATE_INFOPLIST_FILE YES
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_FILE ""
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_KEY_CFBundleDisplayName ${target}
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_KEY_NSHumanReadableCopyright "(c) 2012-${CURRENT_YEAR} Lain Bailey")
|
|
|
+ PROPERTIES CODE_SIGN_IDENTITY ""
|
|
|
+ DEVELOPMENT_TEAM ""
|
|
|
+ SKIP_INSTALL YES
|
|
|
+ PRODUCT_NAME ${target}
|
|
|
+ PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}
|
|
|
+ CURRENT_PROJECT_VERSION ${OBS_BUILD_NUMBER}
|
|
|
+ MARKETING_VERSION ${OBS_VERSION_CANONICAL}
|
|
|
+ GENERATE_INFOPLIST_FILE YES
|
|
|
+ INFOPLIST_FILE ""
|
|
|
+ INFOPLIST_KEY_CFBundleDisplayName ${target}
|
|
|
+ INFOPLIST_KEY_NSHumanReadableCopyright "(c) 2012-${CURRENT_YEAR} Lain Bailey")
|
|
|
+ # cmake-format: on
|
|
|
endif()
|
|
|
|
|
|
set_property(GLOBAL APPEND PROPERTY _OBS_FRAMEWORKS ${target})
|
|
|
set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES ${target})
|
|
|
elseif(target_type STREQUAL MODULE_LIBRARY)
|
|
|
if(target STREQUAL obspython)
|
|
|
- set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_NAME ${target}
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target})
|
|
|
+ # cmake-format: off
|
|
|
+ set_target_xcode_properties(
|
|
|
+ ${target}
|
|
|
+ PROPERTIES PRODUCT_NAME ${target}
|
|
|
+ PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target})
|
|
|
+ # cmake-format: on
|
|
|
elseif(target STREQUAL obslua)
|
|
|
- set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_NAME ${target}
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target})
|
|
|
+ # cmake-format: off
|
|
|
+ set_target_xcode_properties(
|
|
|
+ ${target}
|
|
|
+ PROPERTIES PRODUCT_NAME ${target}
|
|
|
+ PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target})
|
|
|
+ # cmake-format: on
|
|
|
elseif(target STREQUAL obs-dal-plugin)
|
|
|
set_target_properties(${target} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
|
|
|
set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES ${target})
|
|
|
return()
|
|
|
else()
|
|
|
- set_target_properties(
|
|
|
+ set_target_properties(${target} PROPERTIES BUNDLE TRUE BUNDLE_EXTENSION plugin)
|
|
|
+
|
|
|
+ # cmake-format: off
|
|
|
+ set_target_xcode_properties(
|
|
|
${target}
|
|
|
- PROPERTIES BUNDLE TRUE
|
|
|
- BUNDLE_EXTENSION plugin
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_NAME ${target}
|
|
|
- XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}
|
|
|
- XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${OBS_BUILD_NUMBER}
|
|
|
- XCODE_ATTRIBUTE_MARKETING_VERSION ${OBS_VERSION_CANONICAL}
|
|
|
- XCODE_ATTRIBUTE_GENERATE_INFOPLIST_FILE YES
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_KEY_CFBundleDisplayName ${target}
|
|
|
- XCODE_ATTRIBUTE_INFOPLIST_KEY_NSHumanReadableCopyright "(c) 2012-${CURRENT_YEAR} Lain Bailey")
|
|
|
+ PROPERTIES PRODUCT_NAME ${target}
|
|
|
+ PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}
|
|
|
+ CURRENT_PROJECT_VERSION ${OBS_BUILD_NUMBER}
|
|
|
+ MARKETING_VERSION ${OBS_VERSION_CANONICAL}
|
|
|
+ GENERATE_INFOPLIST_FILE YES
|
|
|
+ INFOPLIST_KEY_CFBundleDisplayName ${target}
|
|
|
+ INFOPLIST_KEY_NSHumanReadableCopyright "(c) 2012-${CURRENT_YEAR} Lain Bailey")
|
|
|
+ # cmake-format: on
|
|
|
|
|
|
if(target STREQUAL obs-browser)
|
|
|
# Good-enough for now as there are no other variants - in _theory_ we should only add the appropriate variant,
|
|
@@ -319,8 +360,11 @@ endmacro()
|
|
|
# _add_entitlements: Macro to add entitlements shipped with project
|
|
|
macro(_add_entitlements)
|
|
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist")
|
|
|
- set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS
|
|
|
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist")
|
|
|
+ # cmake-format: off
|
|
|
+ set_target_xcode_properties(
|
|
|
+ ${target}
|
|
|
+ PROPERTIES CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist")
|
|
|
+ # cmake-format: on
|
|
|
endif()
|
|
|
endmacro()
|
|
|
|