mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
presets: Extract configure dependency resolution to helper
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user