From 7d28005244008b0cc683c7938051d357baf13e08 Mon Sep 17 00:00:00 2001 From: Cristiano Carvalheiro Date: Thu, 9 Jan 2025 14:43:08 +0000 Subject: [PATCH] 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. --- Auxiliary/vim/syntax/cmake.vim | 2 ++ Help/manual/cmake-properties.7.rst | 1 + Help/manual/cmake-variables.7.rst | 1 + Help/prop_tgt/XCODE_GENERATE_SCHEME.rst | 1 + Help/prop_tgt/XCODE_SCHEME_TEST_CONFIGURATION.rst | 13 +++++++++++++ Help/release/dev/xcode-scheme-test-config.rst | 7 +++++++ .../CMAKE_XCODE_SCHEME_TEST_CONFIGURATION.rst | 12 ++++++++++++ Source/cmTarget.cxx | 1 + Source/cmXCodeScheme.cxx | 7 ++++++- .../XcodeProject/XcodeSchemaProperty-check.cmake | 12 +++++++++--- .../RunCMake/XcodeProject/XcodeSchemaProperty.cmake | 6 ++++++ Tests/RunCMake/property_init/CompileSources.cmake | 1 + 12 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 Help/prop_tgt/XCODE_SCHEME_TEST_CONFIGURATION.rst create mode 100644 Help/release/dev/xcode-scheme-test-config.rst create mode 100644 Help/variable/CMAKE_XCODE_SCHEME_TEST_CONFIGURATION.rst diff --git a/Auxiliary/vim/syntax/cmake.vim b/Auxiliary/vim/syntax/cmake.vim index 7e2863c72d..80d611bf13 100644 --- a/Auxiliary/vim/syntax/cmake.vim +++ b/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 diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index bd0820311f..6dd2b8933f 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/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 diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index 5e20196093..b92952c9b8 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/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 diff --git a/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst b/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst index 7e74a6dc6c..8cb5ba0d72 100644 --- a/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst +++ b/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` diff --git a/Help/prop_tgt/XCODE_SCHEME_TEST_CONFIGURATION.rst b/Help/prop_tgt/XCODE_SCHEME_TEST_CONFIGURATION.rst new file mode 100644 index 0000000000..6dad09f78c --- /dev/null +++ b/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. diff --git a/Help/release/dev/xcode-scheme-test-config.rst b/Help/release/dev/xcode-scheme-test-config.rst new file mode 100644 index 0000000000..ed8d11c79d --- /dev/null +++ b/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. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_TEST_CONFIGURATION.rst b/Help/variable/CMAKE_XCODE_SCHEME_TEST_CONFIGURATION.rst new file mode 100644 index 0000000000..caa5cf2dbc --- /dev/null +++ b/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. diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index c2860d6a99..05544200cc 100644 --- a/Source/cmTarget.cxx +++ b/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 }, diff --git a/Source/cmXCodeScheme.cxx b/Source/cmXCodeScheme.cxx index 2c905a5126..fd2738a556 100644 --- a/Source/cmXCodeScheme.cxx +++ b/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")); diff --git a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake index 3759c220d0..ec0aed2324 100644 --- a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake +++ b/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" "") +check_property("LAUNCH_CONFIGURATION_DEBUG" "") +check_property("LAUNCH_CONFIGURATION_RELEASE" "") +check_property("TEST_CONFIGURATION_EMPTY" "") +check_property("TEST_CONFIGURATION_DEBUG" "") +check_property("TEST_CONFIGURATION_RELEASE" "") 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) diff --git a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake index cc3fa3d662..9af1ac8799 100644 --- a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake +++ b/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") diff --git a/Tests/RunCMake/property_init/CompileSources.cmake b/Tests/RunCMake/property_init/CompileSources.cmake index 23ea80d1fd..6909e07936 100644 --- a/Tests/RunCMake/property_init/CompileSources.cmake +++ b/Tests/RunCMake/property_init/CompileSources.cmake @@ -194,6 +194,7 @@ if (CMAKE_HOST_APPLE) # compile-guarded in CMake "XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER" "ON" "" "XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP" "ON" "" "XCODE_SCHEME_LAUNCH_CONFIGURATION" "ON" "" + "XCODE_SCHEME_TEST_CONFIGURATION" "ON" "" "XCODE_SCHEME_ENABLE_GPU_API_VALIDATION" "ON" "" "XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION" "ON" "" "XCODE_SCHEME_WORKING_DIRECTORY" "ON" ""