From 0029686e8675493df4bf38633ea713bf5926d3be Mon Sep 17 00:00:00 2001 From: Tyler Yankee Date: Sat, 22 Aug 2026 20:37:10 -0400 Subject: [PATCH] presets: Extract configure dependency resolution to helper --- Source/cmCMakePresetsGraph.cxx | 146 ++++++++++++--------------------- Source/cmCMakePresetsGraph.h | 3 + 2 files changed, 55 insertions(+), 94 deletions(-) diff --git a/Source/cmCMakePresetsGraph.cxx b/Source/cmCMakePresetsGraph.cxx index e2d1934bd4..f2636e6590 100644 --- a/Source/cmCMakePresetsGraph.cxx +++ b/Source/cmCMakePresetsGraph.cxx @@ -1237,6 +1237,54 @@ std::string cmCMakePresetsGraph::GetGeneratorForPreset( return {}; } +template +bool cmCMakePresetsGraph::ResolveDependentPresets( + std::map>& presets) +{ + for (auto& it : presets) { + if (!it.second.Unexpanded.Hidden) { + auto const configurePreset = + this->ConfigurePresets.find(it.second.Unexpanded.ConfigurePreset); + if (configurePreset == this->ConfigurePresets.end()) { + cmCMakePresetsErrors::CONFIGURE_PRESET_NOT_FOUND( + it.first, T::kind(), it.second.Unexpanded.ConfigurePreset, + &this->parseState); + return false; + } + if (!it.second.Unexpanded.OriginFile->ReachableFiles.count( + configurePreset->second.Unexpanded.OriginFile)) { + cmCMakePresetsErrors::CONFIGURE_PRESET_UNREACHABLE_FROM_FILE( + it.first, T::kind(), it.second.Unexpanded.ConfigurePreset, + &this->parseState); + return false; + } + if (it.second.Unexpanded.InheritConfigureEnvironment.value_or(true)) { + it.second.Unexpanded.Environment.insert( + configurePreset->second.Unexpanded.Environment.begin(), + configurePreset->second.Unexpanded.Environment.end()); + } + } + if (!ExpandMacros(this, it.second.Unexpanded, it.second.Expanded)) { + cmCMakePresetsErrors::INVALID_MACRO_EXPANSION(it.first, + &this->parseState); + return false; + } + } + return true; +} + +template bool +cmCMakePresetsGraph::ResolveDependentPresets( + std::map>&); + +template bool +cmCMakePresetsGraph::ResolveDependentPresets( + std::map>&); + +template bool cmCMakePresetsGraph::ResolveDependentPresets< + cmCMakePresetsGraph::PackagePreset>( + std::map>&); + bool cmCMakePresetsGraph::ReadProjectPresetsInternal( std::string const& presetsFile, ReadOption readFilesOption) { @@ -1300,100 +1348,10 @@ bool cmCMakePresetsGraph::ReadProjectPresetsInternal( } } - for (auto& it : this->BuildPresets) { - if (!it.second.Unexpanded.Hidden) { - auto const configurePreset = - this->ConfigurePresets.find(it.second.Unexpanded.ConfigurePreset); - if (configurePreset == this->ConfigurePresets.end()) { - cmCMakePresetsErrors::CONFIGURE_PRESET_NOT_FOUND( - it.first, BuildPreset::kind(), it.second.Unexpanded.ConfigurePreset, - &this->parseState); - return false; - } - if (!it.second.Unexpanded.OriginFile->ReachableFiles.count( - configurePreset->second.Unexpanded.OriginFile)) { - cmCMakePresetsErrors::CONFIGURE_PRESET_UNREACHABLE_FROM_FILE( - it.first, BuildPreset::kind(), it.second.Unexpanded.ConfigurePreset, - &this->parseState); - return false; - } - - if (it.second.Unexpanded.InheritConfigureEnvironment.value_or(true)) { - it.second.Unexpanded.Environment.insert( - configurePreset->second.Unexpanded.Environment.begin(), - configurePreset->second.Unexpanded.Environment.end()); - } - } - - if (!ExpandMacros(this, it.second.Unexpanded, it.second.Expanded)) { - cmCMakePresetsErrors::INVALID_MACRO_EXPANSION(it.first, - &this->parseState); - return false; - } - } - - for (auto& it : this->TestPresets) { - if (!it.second.Unexpanded.Hidden) { - auto const configurePreset = - this->ConfigurePresets.find(it.second.Unexpanded.ConfigurePreset); - if (configurePreset == this->ConfigurePresets.end()) { - cmCMakePresetsErrors::CONFIGURE_PRESET_NOT_FOUND( - it.first, TestPreset::kind(), it.second.Unexpanded.ConfigurePreset, - &this->parseState); - return false; - } - if (!it.second.Unexpanded.OriginFile->ReachableFiles.count( - configurePreset->second.Unexpanded.OriginFile)) { - cmCMakePresetsErrors::CONFIGURE_PRESET_UNREACHABLE_FROM_FILE( - it.first, TestPreset::kind(), it.second.Unexpanded.ConfigurePreset, - &this->parseState); - return false; - } - - if (it.second.Unexpanded.InheritConfigureEnvironment.value_or(true)) { - it.second.Unexpanded.Environment.insert( - configurePreset->second.Unexpanded.Environment.begin(), - configurePreset->second.Unexpanded.Environment.end()); - } - } - - if (!ExpandMacros(this, it.second.Unexpanded, it.second.Expanded)) { - cmCMakePresetsErrors::INVALID_MACRO_EXPANSION(it.first, - &this->parseState); - return false; - } - } - - for (auto& it : this->PackagePresets) { - if (!it.second.Unexpanded.Hidden) { - auto const configurePreset = - this->ConfigurePresets.find(it.second.Unexpanded.ConfigurePreset); - if (configurePreset == this->ConfigurePresets.end()) { - cmCMakePresetsErrors::CONFIGURE_PRESET_NOT_FOUND( - it.first, PackagePreset::kind(), - it.second.Unexpanded.ConfigurePreset, &this->parseState); - return false; - } - if (!it.second.Unexpanded.OriginFile->ReachableFiles.count( - configurePreset->second.Unexpanded.OriginFile)) { - cmCMakePresetsErrors::CONFIGURE_PRESET_UNREACHABLE_FROM_FILE( - it.first, PackagePreset::kind(), - it.second.Unexpanded.ConfigurePreset, &this->parseState); - return false; - } - - if (it.second.Unexpanded.InheritConfigureEnvironment.value_or(true)) { - it.second.Unexpanded.Environment.insert( - configurePreset->second.Unexpanded.Environment.begin(), - configurePreset->second.Unexpanded.Environment.end()); - } - } - - if (!ExpandMacros(this, it.second.Unexpanded, it.second.Expanded)) { - cmCMakePresetsErrors::INVALID_MACRO_EXPANSION(it.first, - &this->parseState); - return false; - } + if (!ResolveDependentPresets(this->BuildPresets) || + !ResolveDependentPresets(this->TestPresets) || + !ResolveDependentPresets(this->PackagePresets)) { + return false; } for (auto& it : this->WorkflowPresets) { diff --git a/Source/cmCMakePresetsGraph.h b/Source/cmCMakePresetsGraph.h index f04dfdd1ec..859075c50f 100644 --- a/Source/cmCMakePresetsGraph.h +++ b/Source/cmCMakePresetsGraph.h @@ -435,6 +435,9 @@ public: PresetResolveStatus status, std::string const& errorPresetName, std::string const& directory); + template + bool ResolveDependentPresets(std::map>& presets); + std::map> ConfigurePresets; std::map> BuildPresets; std::map> TestPresets;