Browse Source

Xcode: Support for test action 'Build Configuration' scheme property

Also allow scoped property checking on Xcode scheme tests to
 be able to distinguish between launch and test actions build config.
Cristiano Carvalheiro 9 months ago
parent
commit
7d28005244

+ 2 - 0
Auxiliary/vim/syntax/cmake.vim

@@ -500,6 +500,7 @@ syn keyword cmakeProperty contained
             \ XCODE_SCHEME_ENABLE_GPU_API_VALIDATION
             \ XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
             \ XCODE_SCHEME_LAUNCH_CONFIGURATION
+            \ XCODE_SCHEME_TEST_CONFIGURATION
             \ XCODE_SCHEME_WORKING_DIRECTORY
             \ XCODE_SCHEME_ZOMBIE_OBJECTS
             \ XCODE_XCCONFIG
@@ -1865,6 +1866,7 @@ syn keyword cmakeVariable contained
             \ CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION
             \ CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
             \ CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION
+            \ CMAKE_XCODE_SCHEME_TEST_CONFIGURATION
             \ CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
             \ CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS
             \ CMAKE_XCODE_XCCONFIG

+ 1 - 0
Help/manual/cmake-properties.7.rst

@@ -494,6 +494,7 @@ Properties on Targets
    /prop_tgt/XCODE_SCHEME_EXECUTABLE
    /prop_tgt/XCODE_SCHEME_GUARD_MALLOC
    /prop_tgt/XCODE_SCHEME_LAUNCH_CONFIGURATION
+   /prop_tgt/XCODE_SCHEME_TEST_CONFIGURATION
    /prop_tgt/XCODE_SCHEME_LAUNCH_MODE
    /prop_tgt/XCODE_SCHEME_LLDB_INIT_FILE
    /prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP

+ 1 - 0
Help/manual/cmake-variables.7.rst

@@ -296,6 +296,7 @@ Variables that Change Behavior
    /variable/CMAKE_XCODE_SCHEME_ENVIRONMENT
    /variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC
    /variable/CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION
+   /variable/CMAKE_XCODE_SCHEME_TEST_CONFIGURATION
    /variable/CMAKE_XCODE_SCHEME_LAUNCH_MODE
    /variable/CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
    /variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP

+ 1 - 0
Help/prop_tgt/XCODE_GENERATE_SCHEME.rst

@@ -45,5 +45,6 @@ The following target properties will be applied on the
 - :prop_tgt:`XCODE_SCHEME_EXECUTABLE`
 - :prop_tgt:`XCODE_SCHEME_LAUNCH_CONFIGURATION`
 - :prop_tgt:`XCODE_SCHEME_LAUNCH_MODE`
+- :prop_tgt:`XCODE_SCHEME_TEST_CONFIGURATION`
 - :prop_tgt:`XCODE_SCHEME_LLDB_INIT_FILE`
 - :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY`

+ 13 - 0
Help/prop_tgt/XCODE_SCHEME_TEST_CONFIGURATION.rst

@@ -0,0 +1,13 @@
+XCODE_SCHEME_TEST_CONFIGURATION
+-------------------------------
+
+.. versionadded:: 3.32
+
+Set the build configuration to test the target.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_TEST_CONFIGURATION`
+if it is set when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.

+ 7 - 0
Help/release/dev/xcode-scheme-test-config.rst

@@ -0,0 +1,7 @@
+xcode-scheme-test-config
+------------------------
+
+* The :variable:`CMAKE_XCODE_SCHEME_TEST_CONFIGURATION` variable and corresponding
+  :prop_tgt:`XCODE_SCHEME_TEST_CONFIGURATION` target property were added to tell
+  the :generator:`Xcode` generator what to put in the scheme's "Build Configuration"
+  setting for the test action.

+ 12 - 0
Help/variable/CMAKE_XCODE_SCHEME_TEST_CONFIGURATION.rst

@@ -0,0 +1,12 @@
+CMAKE_XCODE_SCHEME_TEST_CONFIGURATION
+-------------------------------------
+
+.. versionadded:: 3.32
+
+Set the build configuration to test the target.
+
+This variable initializes the :prop_tgt:`XCODE_SCHEME_TEST_CONFIGURATION`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.

+ 1 - 0
Source/cmTarget.cxx

@@ -621,6 +621,7 @@ TargetProperty const StaticTargetProperties[] = {
   { "XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_LAUNCH_CONFIGURATION"_s, IC::NeedsXcodeAndCanCompileSources },
+  { "XCODE_SCHEME_TEST_CONFIGURATION"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_ENABLE_GPU_API_VALIDATION"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_WORKING_DIRECTORY"_s, IC::NeedsXcodeAndCanCompileSources },

+ 6 - 1
Source/cmXCodeScheme.cxx

@@ -74,8 +74,13 @@ void cmXCodeScheme::WriteXCodeXCScheme(std::ostream& fout,
   std::string launchConfiguration =
     !propDftCfg.IsEmpty() ? *propDftCfg : "Debug";
 
+  cmValue propTstCfg =
+    Target->GetTarget()->GetProperty("XCODE_SCHEME_TEST_CONFIGURATION");
+  std::string testConfiguration =
+    !propTstCfg.IsEmpty() ? *propTstCfg : "Debug";
+
   WriteBuildAction(xout, container);
-  WriteTestAction(xout, FindConfiguration("Debug"), container);
+  WriteTestAction(xout, FindConfiguration(testConfiguration), container);
   WriteLaunchAction(xout, FindConfiguration(launchConfiguration), container);
   WriteProfileAction(xout, FindConfiguration("Release"), container);
   WriteAnalyzeAction(xout, FindConfiguration("Debug"));

+ 9 - 3
Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake

@@ -1,8 +1,8 @@
 function(check_property property matcher)
   set(schema "${RunCMake_TEST_BINARY_DIR}/XcodeSchemaProperty.xcodeproj/xcshareddata/xcschemes/${property}.xcscheme")
-  file(STRINGS ${schema} actual-${property}
-       REGEX "${matcher}" LIMIT_COUNT 1)
-  if(NOT actual-${property})
+  file(READ ${schema} schema-content-${property})
+  string(REGEX MATCHALL "${matcher}" matched-${property} ${schema-content-${property}})
+  if(NOT matched-${property})
     string(APPEND RunCMake_TEST_FAILED
       "Xcode schema property ${property}: Could not find\n"
       "  ${matcher}\n"
@@ -102,6 +102,12 @@ check_property("ENABLE_GPU_FRAME_CAPTURE_MODE_DISABLED_MIXED_CASE" "enableGPUFra
 check_property("ENABLE_GPU_FRAME_CAPTURE_MODE_METAL_MIXED_CASE" "enableGPUFrameCaptureMode=\"1\"")
 check_property("LAUNCH_MODE_AUTO" "launchStyle=\"0\"")
 check_property("LAUNCH_MODE_WAIT" "launchStyle=\"1\"")
+check_property("LAUNCH_CONFIGURATION_EMPTY" "<LaunchAction.*buildConfiguration=\"Debug\".*</LaunchAction>")
+check_property("LAUNCH_CONFIGURATION_DEBUG" "<LaunchAction.*buildConfiguration=\"Debug\".*</LaunchAction>")
+check_property("LAUNCH_CONFIGURATION_RELEASE" "<LaunchAction.*buildConfiguration=\"Release\".*</LaunchAction>")
+check_property("TEST_CONFIGURATION_EMPTY" "<TestAction.*buildConfiguration=\"Debug\".*</TestAction>")
+check_property("TEST_CONFIGURATION_DEBUG" "<TestAction.*buildConfiguration=\"Debug\".*</TestAction>")
+check_property("TEST_CONFIGURATION_RELEASE" "<TestAction.*buildConfiguration=\"Release\".*</TestAction>")
 check_no_property("LLDB_INIT_FILE_EMPTY" "customLLDBInitFile")
 check_property_count("LLDB_INIT_FILE_EVAL" "customLLDBInitFile=\"${RunCMake_TEST_BINARY_DIR}/.lldbinit\"" 2)
 check_property_count("LLDB_INIT_FILE_FULL" "customLLDBInitFile=\"/full/path/to/.lldbinit\"" 2)

+ 6 - 0
Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake

@@ -40,6 +40,12 @@ create_scheme_for_property(ENABLE_GPU_FRAME_CAPTURE_MODE_DISABLED_MIXED_CASE ENA
 create_scheme_for_property(ENABLE_GPU_FRAME_CAPTURE_MODE_METAL_MIXED_CASE ENABLE_GPU_FRAME_CAPTURE_MODE METal)
 create_scheme_for_property(LAUNCH_MODE_AUTO LAUNCH_MODE AUTO)
 create_scheme_for_property(LAUNCH_MODE_WAIT LAUNCH_MODE WAIT)
+create_scheme_for_property(LAUNCH_CONFIGURATION_EMPTY LAUNCH_CONFIGURATION "")
+create_scheme_for_property(LAUNCH_CONFIGURATION_DEBUG LAUNCH_CONFIGURATION "Debug")
+create_scheme_for_property(LAUNCH_CONFIGURATION_RELEASE LAUNCH_CONFIGURATION "Release")
+create_scheme_for_property(TEST_CONFIGURATION_EMPTY TEST_CONFIGURATION "")
+create_scheme_for_property(TEST_CONFIGURATION_DEBUG TEST_CONFIGURATION "Debug")
+create_scheme_for_property(TEST_CONFIGURATION_RELEASE TEST_CONFIGURATION "Release")
 create_scheme_for_property(LLDB_INIT_FILE_EMPTY LLDB_INIT_FILE "")
 create_scheme_for_property(LLDB_INIT_FILE_EVAL LLDB_INIT_FILE "${CMAKE_BINARY_DIR}/.lldbinit")
 create_scheme_for_property(LLDB_INIT_FILE_FULL LLDB_INIT_FILE "/full/path/to/.lldbinit")

+ 1 - 0
Tests/RunCMake/property_init/CompileSources.cmake

@@ -194,6 +194,7 @@ if (CMAKE_HOST_APPLE) # compile-guarded in CMake
       "XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER"      "ON"          "<SAME>"
       "XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP" "ON"          "<SAME>"
       "XCODE_SCHEME_LAUNCH_CONFIGURATION"               "ON"          "<SAME>"
+      "XCODE_SCHEME_TEST_CONFIGURATION"                 "ON"          "<SAME>"
       "XCODE_SCHEME_ENABLE_GPU_API_VALIDATION"          "ON"          "<SAME>"
       "XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION"       "ON"          "<SAME>"
       "XCODE_SCHEME_WORKING_DIRECTORY"                  "ON"          "<SAME>"