CMakePresets: Check presets with their own file version

06e6981 added support for optional binaryDir and generator, but
use the dependent preset's file version instead of the current
preset's file version. Check presets with their own file version
instead of their dependent's file version.

Fixes: #22428
This commit is contained in:
Kyle Edwards 2021-07-27 11:45:57 -04:00
parent f7cf69e34a
commit 3e42bf3e05
5 changed files with 25 additions and 5 deletions

View File

@ -78,7 +78,8 @@ void InheritVector(std::vector<T>& child, const std::vector<T>& parent)
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 @@ ReadFileResult VisitPreset(
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 @@ ReadFileResult VisitPreset(
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 @@ ReadFileResult ComputePresetInheritance(
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;
}

View File

@ -260,6 +260,7 @@ unset(CMakePresets_FILE)
run_cmake_presets(GoodUserOnly)
run_cmake_presets(GoodUserFromMain)
run_cmake_presets(GoodUserFromUser)
run_cmake_presets(V2InheritV3Optional)
# Test CMakeUserPresets.json errors
run_cmake_presets(UserDuplicateInUser)

View File

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

View File

@ -0,0 +1,11 @@
{
"version": 2,
"configurePresets": [
{
"name": "V2InheritV3Optional",
"inherits": "default",
"generator": "@RunCMake_GENERATOR@",
"binaryDir": "${sourceDir}/build"
}
]
}