presets: Extract configure dependency resolution to helper

This commit is contained in:
Tyler Yankee
2026-08-23 07:25:05 -04:00
parent 30a6e89923
commit 0029686e86
2 changed files with 55 additions and 94 deletions
+52 -94
View File
@@ -1237,6 +1237,54 @@ std::string cmCMakePresetsGraph::GetGeneratorForPreset(
return {}; return {};
} }
template <typename T>
bool cmCMakePresetsGraph::ResolveDependentPresets(
std::map<std::string, PresetPair<T>>& 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<cmCMakePresetsGraph::BuildPreset>(
std::map<std::string, PresetPair<cmCMakePresetsGraph::BuildPreset>>&);
template bool
cmCMakePresetsGraph::ResolveDependentPresets<cmCMakePresetsGraph::TestPreset>(
std::map<std::string, PresetPair<cmCMakePresetsGraph::TestPreset>>&);
template bool cmCMakePresetsGraph::ResolveDependentPresets<
cmCMakePresetsGraph::PackagePreset>(
std::map<std::string, PresetPair<cmCMakePresetsGraph::PackagePreset>>&);
bool cmCMakePresetsGraph::ReadProjectPresetsInternal( bool cmCMakePresetsGraph::ReadProjectPresetsInternal(
std::string const& presetsFile, ReadOption readFilesOption) std::string const& presetsFile, ReadOption readFilesOption)
{ {
@@ -1300,100 +1348,10 @@ bool cmCMakePresetsGraph::ReadProjectPresetsInternal(
} }
} }
for (auto& it : this->BuildPresets) { if (!ResolveDependentPresets(this->BuildPresets) ||
if (!it.second.Unexpanded.Hidden) { !ResolveDependentPresets(this->TestPresets) ||
auto const configurePreset = !ResolveDependentPresets(this->PackagePresets)) {
this->ConfigurePresets.find(it.second.Unexpanded.ConfigurePreset); return false;
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;
}
} }
for (auto& it : this->WorkflowPresets) { for (auto& it : this->WorkflowPresets) {
+3
View File
@@ -435,6 +435,9 @@ public:
PresetResolveStatus status, std::string const& errorPresetName, PresetResolveStatus status, std::string const& errorPresetName,
std::string const& directory); std::string const& directory);
template <class T>
bool ResolveDependentPresets(std::map<std::string, PresetPair<T>>& presets);
std::map<std::string, PresetPair<ConfigurePreset>> ConfigurePresets; std::map<std::string, PresetPair<ConfigurePreset>> ConfigurePresets;
std::map<std::string, PresetPair<BuildPreset>> BuildPresets; std::map<std::string, PresetPair<BuildPreset>> BuildPresets;
std::map<std::string, PresetPair<TestPreset>> TestPresets; std::map<std::string, PresetPair<TestPreset>> TestPresets;