Merge topic 'cmake-presets-v2-inherit-v3-optional'

3e42bf3e05 CMakePresets: Check presets with their own file version

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6398
diff --git a/Source/cmCMakePresetsFile.cxx b/Source/cmCMakePresetsFile.cxx
index fd578fa..538b668 100644
--- a/Source/cmCMakePresetsFile.cxx
+++ b/Source/cmCMakePresetsFile.cxx
@@ -78,7 +78,8 @@
 template <class T>
 ReadFileResult VisitPreset(
   T& preset, std::map<std::string, cmCMakePresetsFile::PresetPair<T>>& presets,
-  std::map<std::string, CycleStatus> cycleStatus, int version)
+  std::map<std::string, CycleStatus> cycleStatus,
+  const cmCMakePresetsFile& file)
 {
   switch (cycleStatus[preset.Name]) {
     case CycleStatus::InProgress:
@@ -108,7 +109,7 @@
       return ReadFileResult::USER_PRESET_INHERITANCE;
     }
 
-    auto result = VisitPreset(parentPreset, presets, cycleStatus, version);
+    auto result = VisitPreset(parentPreset, presets, cycleStatus, file);
     if (result != ReadFileResult::READ_OK) {
       return result;
     }
@@ -128,7 +129,7 @@
     preset.ConditionEvaluator.reset();
   }
 
-  CHECK_OK(preset.VisitPresetAfterInherit(version))
+  CHECK_OK(preset.VisitPresetAfterInherit(file.GetVersion(preset)))
 
   cycleStatus[preset.Name] = CycleStatus::Verified;
   return ReadFileResult::READ_OK;
@@ -146,8 +147,7 @@
 
   for (auto& it : presets) {
     auto& preset = it.second.Unexpanded;
-    auto result =
-      VisitPreset<T>(preset, presets, cycleStatus, file.GetVersion(preset));
+    auto result = VisitPreset<T>(preset, presets, cycleStatus, file);
     if (result != ReadFileResult::READ_OK) {
       return result;
     }
diff --git a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
index 31bd8a4..c31a645 100644
--- a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
@@ -260,6 +260,7 @@
 run_cmake_presets(GoodUserOnly)
 run_cmake_presets(GoodUserFromMain)
 run_cmake_presets(GoodUserFromUser)
+run_cmake_presets(V2InheritV3Optional)
 
 # Test CMakeUserPresets.json errors
 run_cmake_presets(UserDuplicateInUser)
diff --git a/Tests/RunCMake/CMakePresets/V2InheritV3Optional.cmake b/Tests/RunCMake/CMakePresets/V2InheritV3Optional.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/V2InheritV3Optional.cmake
diff --git a/Tests/RunCMake/CMakePresets/V2InheritV3Optional.json.in b/Tests/RunCMake/CMakePresets/V2InheritV3Optional.json.in
new file mode 100644
index 0000000..957b157
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/V2InheritV3Optional.json.in
@@ -0,0 +1,8 @@
+{
+  "version": 3,
+  "configurePresets": [
+    {
+      "name": "default"
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/V2InheritV3OptionalUser.json.in b/Tests/RunCMake/CMakePresets/V2InheritV3OptionalUser.json.in
new file mode 100644
index 0000000..f18c1b9
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/V2InheritV3OptionalUser.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "configurePresets": [
+    {
+      "name": "V2InheritV3Optional",
+      "inherits": "default",
+      "generator": "@RunCMake_GENERATOR@",
+      "binaryDir": "${sourceDir}/build"
+    }
+  ]
+}