浏览代码

Merge topic 'xcode-scheme-lldb-init-file'

419cfe30d0 Xcode: Support for 'LLDB Init File' scheme property
65ad1bbd4c vim: Remove duplicated keywords from cmake.vim
a96d6a98d3 Tests/RunCMake/XcodeProject: Improve XcodeSchemaProperty failure messages

Acked-by: Kitware Robot <[email protected]>
Merge-request: !10093
Brad King 11 月之前
父节点
当前提交
546be3530a

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

@@ -483,13 +483,13 @@ syn keyword cmakeProperty contained
             \ XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
             \ XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
             \ XCODE_SCHEME_ENABLE_GPU_API_VALIDATION
-            \ XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE
             \ XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
             \ XCODE_SCHEME_ENVIRONMENT
             \ XCODE_SCHEME_EXECUTABLE
             \ XCODE_SCHEME_GUARD_MALLOC
             \ XCODE_SCHEME_LAUNCH_CONFIGURATION
             \ XCODE_SCHEME_LAUNCH_MODE
+            \ XCODE_SCHEME_LLDB_INIT_FILE
             \ XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
             \ XCODE_SCHEME_MALLOC_GUARD_EDGES
             \ XCODE_SCHEME_MALLOC_SCRIBBLE
@@ -1850,12 +1850,12 @@ syn keyword cmakeVariable contained
             \ CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
             \ CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
             \ CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION
-            \ CMAKE_XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE
             \ CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
             \ CMAKE_XCODE_SCHEME_ENVIRONMENT
             \ CMAKE_XCODE_SCHEME_GUARD_MALLOC
             \ CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION
             \ CMAKE_XCODE_SCHEME_LAUNCH_MODE
+            \ CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
             \ CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
             \ CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES
             \ CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE

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

@@ -495,6 +495,7 @@ Properties on Targets
    /prop_tgt/XCODE_SCHEME_GUARD_MALLOC
    /prop_tgt/XCODE_SCHEME_LAUNCH_CONFIGURATION
    /prop_tgt/XCODE_SCHEME_LAUNCH_MODE
+   /prop_tgt/XCODE_SCHEME_LLDB_INIT_FILE
    /prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
    /prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES
    /prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE

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

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

+ 1 - 0
Help/prop_tgt/XCODE_GENERATE_SCHEME.rst

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

+ 15 - 0
Help/prop_tgt/XCODE_SCHEME_LLDB_INIT_FILE.rst

@@ -0,0 +1,15 @@
+XCODE_SCHEME_LLDB_INIT_FILE
+---------------------------
+
+.. versionadded:: 3.32
+
+Property value for ``LLDB Init File`` in the Info section of the
+generated Xcode scheme. In case the value contains generator
+expressions those are evaluated.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_LLDB_INIT_FILE` 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-lldb-init-file.rst

@@ -0,0 +1,7 @@
+xcode-scheme-lldb-init-file
+---------------------------
+
+* The :variable:`CMAKE_XCODE_SCHEME_LLDB_INIT_FILE` variable and corresponding
+  :prop_tgt:`XCODE_SCHEME_LLDB_INIT_FILE` target property were added to tell
+  the :generator:`Xcode` generator what to put in the scheme's "LLDB Init File"
+  setting.

+ 13 - 0
Help/variable/CMAKE_XCODE_SCHEME_LLDB_INIT_FILE.rst

@@ -0,0 +1,13 @@
+CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
+---------------------------------
+
+.. versionadded:: 3.32
+
+Property value for ``LLDB Init File`` in the Info section of the generated Xcode
+scheme.
+
+This variable initializes the :prop_tgt:`XCODE_SCHEME_LLDB_INIT_FILE` 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

@@ -630,6 +630,7 @@ TargetProperty const StaticTargetProperties[] = {
   { "XCODE_SCHEME_MALLOC_GUARD_EDGES"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_GUARD_MALLOC"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_LAUNCH_MODE"_s, IC::NeedsXcodeAndCanCompileSources },
+  { "XCODE_SCHEME_LLDB_INIT_FILE"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_ZOMBIE_OBJECTS"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_MALLOC_STACK"_s, IC::NeedsXcodeAndCanCompileSources },
   { "XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE"_s, IC::NeedsXcodeAndCanCompileSources },

+ 14 - 0
Source/cmXCodeScheme.cxx

@@ -120,6 +120,7 @@ void cmXCodeScheme::WriteTestAction(cmXMLWriter& xout,
   xout.Attribute("selectedLauncherIdentifier",
                  "Xcode.DebuggerFoundation.Launcher.LLDB");
   xout.Attribute("shouldUseLaunchSchemeArgsEnv", "YES");
+  WriteCustomLLDBInitFile(xout, configuration);
 
   xout.StartElement("Testables");
   for (auto const* test : this->Tests) {
@@ -164,6 +165,7 @@ void cmXCodeScheme::WriteLaunchAction(cmXMLWriter& xout,
     xout.Attribute("launchStyle", value);
   }
   WriteCustomWorkingDirectory(xout, configuration);
+  WriteCustomLLDBInitFile(xout, configuration);
 
   xout.Attribute("ignoresPersistentStateOnLaunch", "NO");
   WriteLaunchActionBooleanAttribute(xout, "debugDocumentVersioning",
@@ -481,6 +483,18 @@ void cmXCodeScheme::WriteCustomWorkingDirectory(
   }
 }
 
+void cmXCodeScheme::WriteCustomLLDBInitFile(cmXMLWriter& xout,
+                                            const std::string& configuration)
+{
+  std::string const& propertyValue =
+    this->Target->GetTarget()->GetSafeProperty("XCODE_SCHEME_LLDB_INIT_FILE");
+  if (!propertyValue.empty()) {
+    auto customLLDBInitFile = cmGeneratorExpression::Evaluate(
+      propertyValue, this->LocalGenerator, configuration);
+    xout.Attribute("customLLDBInitFile", customLLDBInitFile);
+  }
+}
+
 std::string cmXCodeScheme::WriteVersionString()
 {
   std::ostringstream v;

+ 3 - 0
Source/cmXCodeScheme.h

@@ -71,6 +71,9 @@ private:
   void WriteCustomWorkingDirectory(cmXMLWriter& xout,
                                    const std::string& configuration);
 
+  void WriteCustomLLDBInitFile(cmXMLWriter& xout,
+                               const std::string& configuration);
+
   std::string WriteVersionString();
   std::string FindConfiguration(const std::string& name);
 

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

@@ -3,21 +3,76 @@ function(check_property property matcher)
   file(STRINGS ${schema} actual-${property}
        REGEX "${matcher}" LIMIT_COUNT 1)
   if(NOT actual-${property})
-    message(SEND_ERROR "Xcode schema property ${property}: Could not find ${matcher} in schema ${schema}")
+    string(APPEND RunCMake_TEST_FAILED
+      "Xcode schema property ${property}: Could not find\n"
+      "  ${matcher}\n"
+      "in schema\n"
+      "  ${schema}\n"
+    )
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(check_property_count property matcher expected_count)
+  set(schema "${RunCMake_TEST_BINARY_DIR}/XcodeSchemaProperty.xcodeproj/xcshareddata/xcschemes/${property}.xcscheme")
+  file(STRINGS ${schema} actual-${property}
+       REGEX "${matcher}")
+  if(NOT actual-${property})
+    string(APPEND RunCMake_TEST_FAILED
+      "Xcode schema property ${property}: Could not find\n"
+      "  ${matcher}\n"
+      "in schema\n"
+      "  ${schema}\n"
+    )
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+    return()
+  endif()
+  list(LENGTH actual-${property} match_count)
+  if(NOT ${expected_count} EQUAL ${match_count})
+    string(APPEND RunCMake_TEST_FAILED
+      "Xcode schema property ${property}: Expected ${expected_count} matches of\n"
+      "  ${matcher}\n"
+      "in schema\n"
+      "  ${schema}\n"
+      "but found ${match_count}.\n\n"
+    )
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(check_no_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(actual-${property})
+    string(APPEND RunCMake_TEST_FAILED
+      "Xcode schema property ${property}: Found\n"
+      "  ${matcher}\n"
+      "which is not expected in schema\n"
+      "  ${schema}\n"
+    )
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
   endif()
 endfunction()
 
 function(expect_schema target)
   set(schema "${RunCMake_TEST_BINARY_DIR}/XcodeSchemaProperty.xcodeproj/xcshareddata/xcschemes/${target}.xcscheme")
   if(NOT EXISTS ${schema})
-    message(SEND_ERROR "Missing schema for target ${target}")
+    string(APPEND RunCMake_TEST_FAILED
+      "Missing schema for target ${target}\n"
+    )
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
   endif()
 endfunction()
 
 function(expect_no_schema target)
   set(schema "${RunCMake_TEST_BINARY_DIR}/XcodeSchemaProperty.xcodeproj/xcshareddata/xcschemes/${target}.xcscheme")
   if(EXISTS ${schema})
-    message(SEND_ERROR "Found unexpected schema ${schema}")
+    string(APPEND RunCMake_TEST_FAILED
+      "Found unexpected schema\n"
+      "  ${schema}\n"
+    )
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
   endif()
 endfunction()
 
@@ -47,6 +102,9 @@ 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_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)
 
 check_property("EXECUTABLE" "myExecutable")
 check_property("ARGUMENTS" [=["--foo"]=])

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

@@ -40,6 +40,9 @@ 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(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")
 create_scheme_for_property(EXECUTABLE EXECUTABLE myExecutable)
 create_scheme_for_property(ARGUMENTS ARGUMENTS "--foo;--bar=baz")
 create_scheme_for_property(ENVIRONMENT ENVIRONMENT "FOO=foo;BAR=bar")

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

@@ -203,6 +203,7 @@ if (CMAKE_HOST_APPLE) # compile-guarded in CMake
       "XCODE_SCHEME_MALLOC_GUARD_EDGES"                 "ON"          "<SAME>"
       "XCODE_SCHEME_GUARD_MALLOC"                       "ON"          "<SAME>"
       "XCODE_SCHEME_LAUNCH_MODE"                        "ON"          "<SAME>"
+      "XCODE_SCHEME_LLDB_INIT_FILE"                     "ON"          "<SAME>"
       "XCODE_SCHEME_ZOMBIE_OBJECTS"                     "ON"          "<SAME>"
       "XCODE_SCHEME_MALLOC_STACK"                       "ON"          "<SAME>"
       "XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE"           "ON"          "<SAME>"