Просмотр исходного кода

cmake: Add separate function to set Xcode-based target properties

PatTheMav 2 лет назад
Родитель
Сommit
0b325c0e34
2 измененных файлов с 102 добавлено и 60 удалено
  1. 100 56
      cmake/macos/helpers.cmake
  2. 2 4
      plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt

+ 100 - 56
cmake/macos/helpers.cmake

@@ -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()
 

+ 2 - 4
plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt

@@ -41,7 +41,6 @@ target_link_libraries(
           "$<LINK_LIBRARY:FRAMEWORK,CoreMediaIO.framework>"
           "$<LINK_LIBRARY:FRAMEWORK,CoreVideo.framework>"
           "$<LINK_LIBRARY:FRAMEWORK,IOSurface.framework>")
-# cmake-format: on
 
 set_target_properties_obs(
   obs-dal-plugin
@@ -55,7 +54,7 @@ set_target_properties_obs(
 set_property(TARGET obs-dal-plugin PROPERTY OSX_ARCHITECTURES x86_64 arm64)
 
 string(TIMESTAMP CURRENT_YEAR "%Y")
-set_target_properties(
+set_target_xcode_properties(
   obs-dal-plugin
   PROPERTIES CLANG_ENABLE_OBJC_ARC YES
              CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION YES
@@ -66,6 +65,5 @@ set_target_properties(
              MARKETING_VERSION ${OBS_VERSION_CANONICAL}
              GENERATE_INFOPLIST_FILE YES
              INFOPLIST_KEY_CFBundleDisplayName obs-mac-virtualcam
-             INFOPLIST_KEY_NSHumanReadableCopyright
-             "(c) 2020-${CURRENT_YEAR} John Boiles, Patrick Heyer, Sebastian Beckmann")
+             INFOPLIST_KEY_NSHumanReadableCopyright "(c) 2020-${CURRENT_YEAR} John Boiles, Patrick Heyer, Sebastian Beckmann")
 # cmake-format: on