Преглед на файлове

Merge topic 'cmake-presets-configure-preset-reachability'

c18409cdac CMakePresets.json: Ensure configurePreset is reachable from current file

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Merge-request: !6937
Brad King преди 3 години
родител
ревизия
0c0d4e1c7a

+ 12 - 2
Source/cmCMakePresetsGraph.cxx

@@ -108,7 +108,7 @@ ReadFileResult VisitPreset(
 
     auto& parentPreset = parent->second.Unexpanded;
     if (!preset.OriginFile->ReachableFiles.count(parentPreset.OriginFile)) {
-      return ReadFileResult::PRESET_UNREACHABLE_FROM_FILE;
+      return ReadFileResult::INHERITED_PRESET_UNREACHABLE_FROM_FILE;
     }
 
     auto result = VisitPreset(parentPreset, presets, cycleStatus, graph);
@@ -925,6 +925,10 @@ cmCMakePresetsGraph::ReadProjectPresetsInternal(bool allowNoFiles)
       if (configurePreset == this->ConfigurePresets.end()) {
         return ReadFileResult::INVALID_CONFIGURE_PRESET;
       }
+      if (!it.second.Unexpanded.OriginFile->ReachableFiles.count(
+            configurePreset->second.Unexpanded.OriginFile)) {
+        return ReadFileResult::CONFIGURE_PRESET_UNREACHABLE_FROM_FILE;
+      }
 
       if (it.second.Unexpanded.InheritConfigureEnvironment.value_or(true)) {
         it.second.Unexpanded.Environment.insert(
@@ -945,6 +949,10 @@ cmCMakePresetsGraph::ReadProjectPresetsInternal(bool allowNoFiles)
       if (configurePreset == this->ConfigurePresets.end()) {
         return ReadFileResult::INVALID_CONFIGURE_PRESET;
       }
+      if (!it.second.Unexpanded.OriginFile->ReachableFiles.count(
+            configurePreset->second.Unexpanded.OriginFile)) {
+        return ReadFileResult::CONFIGURE_PRESET_UNREACHABLE_FROM_FILE;
+      }
 
       if (it.second.Unexpanded.InheritConfigureEnvironment.value_or(true)) {
         it.second.Unexpanded.Environment.insert(
@@ -992,8 +1000,10 @@ const char* cmCMakePresetsGraph::ResultToString(ReadFileResult result)
       return "Duplicate presets";
     case ReadFileResult::CYCLIC_PRESET_INHERITANCE:
       return "Cyclic preset inheritance";
-    case ReadFileResult::PRESET_UNREACHABLE_FROM_FILE:
+    case ReadFileResult::INHERITED_PRESET_UNREACHABLE_FROM_FILE:
       return "Inherited preset is unreachable from preset's file";
+    case ReadFileResult::CONFIGURE_PRESET_UNREACHABLE_FROM_FILE:
+      return "Configure preset is unreachable from preset's file";
     case ReadFileResult::INVALID_MACRO_EXPANSION:
       return "Invalid macro expansion";
     case ReadFileResult::BUILD_TEST_PRESETS_UNSUPPORTED:

+ 2 - 1
Source/cmCMakePresetsGraph.h

@@ -35,7 +35,8 @@ public:
     INVALID_VARIABLE,
     DUPLICATE_PRESETS,
     CYCLIC_PRESET_INHERITANCE,
-    PRESET_UNREACHABLE_FROM_FILE,
+    INHERITED_PRESET_UNREACHABLE_FROM_FILE,
+    CONFIGURE_PRESET_UNREACHABLE_FROM_FILE,
     INVALID_MACRO_EXPANSION,
     BUILD_TEST_PRESETS_UNSUPPORTED,
     INCLUDE_UNSUPPORTED,

+ 1 - 0
Tests/RunCMake/CMakePresetsBuild/ConfigurePresetUnreachable-build-x-result.txt

@@ -0,0 +1 @@
+1

+ 2 - 0
Tests/RunCMake/CMakePresetsBuild/ConfigurePresetUnreachable-build-x-stderr.txt

@@ -0,0 +1,2 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresetsBuild/ConfigurePresetUnreachable: Configure preset is unreachable from preset's file$

+ 9 - 0
Tests/RunCMake/CMakePresetsBuild/ConfigurePresetUnreachable.json.in

@@ -0,0 +1,9 @@
+{
+  "version": 4,
+  "buildPresets": [
+    {
+      "name": "x",
+      "configurePreset": "x"
+    }
+  ]
+}

+ 8 - 0
Tests/RunCMake/CMakePresetsBuild/ConfigurePresetUnreachableUser.json.in

@@ -0,0 +1,8 @@
+{
+  "version": 4,
+  "configurePresets": [
+    {
+      "name": "x"
+    }
+  ]
+}

+ 2 - 0
Tests/RunCMake/CMakePresetsBuild/RunCMakeTest.cmake

@@ -83,4 +83,6 @@ set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
 run_cmake_build_presets(PresetsUnsupported "x" "x")
 run_cmake_build_presets(ConditionFuture "x" "conditionFuture")
 set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
+
+run_cmake_build_presets(ConfigurePresetUnreachable "x" "x")
 set(CMakePresetsBuild_BUILD_ONLY 0)

+ 1 - 0
Tests/RunCMake/CMakePresetsTest/ConfigurePresetUnreachable-test-x-result.txt

@@ -0,0 +1 @@
+1

+ 2 - 0
Tests/RunCMake/CMakePresetsTest/ConfigurePresetUnreachable-test-x-stderr.txt

@@ -0,0 +1,2 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresetsTest/ConfigurePresetUnreachable: Configure preset is unreachable from preset's file$

+ 9 - 0
Tests/RunCMake/CMakePresetsTest/ConfigurePresetUnreachable.json.in

@@ -0,0 +1,9 @@
+{
+  "version": 4,
+  "testPresets": [
+    {
+      "name": "x",
+      "configurePreset": "x"
+    }
+  ]
+}

+ 8 - 0
Tests/RunCMake/CMakePresetsTest/ConfigurePresetUnreachableUser.json.in

@@ -0,0 +1,8 @@
+{
+  "version": 4,
+  "configurePresets": [
+    {
+      "name": "x"
+    }
+  ]
+}

+ 1 - 0
Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake

@@ -106,6 +106,7 @@ set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
 run_cmake_test_presets(PresetsUnsupported "" "" "x")
 run_cmake_test_presets(ConditionFuture "" "" "x")
 set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
+run_cmake_test_presets(ConfigurePresetUnreachable "" "" "x")
 set(CMakePresetsTest_NO_CONFIGURE 0)
 
 set(CMakePresetsTest_NO_BUILD 0)