/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file LICENSE.rst or https://cmake.org/licensing for details. */ #include #include #include #include "cmCMakePresetsGraph.h" #include "cmStringAlgorithms.h" #include "cmUnreachable.h" template cmCMakePresetsGraph::PresetResolveResult cmCMakePresetsGraph::ResolvePreset( std::string const& presetName, std::map> const& presets) const { using Result = PresetResolveResult; Result result; auto presetPair = presets.find(presetName); if (presetPair == presets.end()) { result.StatusCode = Result::Status::NotFound; result.ErrorPresetName = presetName; return result; } if (presetPair->second.Unexpanded.Hidden) { result.StatusCode = Result::Status::Hidden; result.ErrorPresetName = presetName; return result; } if (!presetPair->second.Expanded) { result.StatusCode = Result::Status::InvalidMacroExpansion; result.ErrorPresetName = presetName; return result; } if (!presetPair->second.Expanded->ConditionResult) { result.StatusCode = Result::Status::Disabled; result.ErrorPresetName = presetName; return result; } result.Preset = &*presetPair->second.Expanded; return result; } // Explicit template instantiations template cmCMakePresetsGraph::PresetResolveResult< cmCMakePresetsGraph::ConfigurePreset> cmCMakePresetsGraph::ResolvePreset( std::string const&, std::map> const&) const; template cmCMakePresetsGraph::PresetResolveResult< cmCMakePresetsGraph::BuildPreset> cmCMakePresetsGraph::ResolvePreset( std::string const&, std::map> const&) const; template cmCMakePresetsGraph::PresetResolveResult< cmCMakePresetsGraph::TestPreset> cmCMakePresetsGraph::ResolvePreset( std::string const&, std::map> const&) const; template cmCMakePresetsGraph::PresetResolveResult< cmCMakePresetsGraph::PackagePreset> cmCMakePresetsGraph::ResolvePreset( std::string const&, std::map> const&) const; template cm::optional cmCMakePresetsGraph::FormatPresetError( PresetResolveStatus status, std::string const& errorPresetName, std::string const& directory) { using Status = PresetResolveStatus; switch (status) { case Status::NotFound: return cmStrCat("No such ", T::kind(), " preset in ", directory, ": \"", errorPresetName, '"'); case Status::Hidden: return cmStrCat("Cannot use hidden ", T::kind(), " preset in ", directory, ": \"", errorPresetName, '"'); case Status::InvalidMacroExpansion: return cmStrCat("Could not evaluate ", T::kind(), " preset \"", errorPresetName, "\": Invalid macro expansion"); case Status::Disabled: return cmStrCat("Cannot use disabled ", T::kind(), " preset in ", directory, ": \"", errorPresetName, '"'); case Status::Success: return cm::nullopt; } CM_UNREACHABLE; return cm::nullopt; } // Explicit template instantiations for FormatPresetError template cm::optional cmCMakePresetsGraph::FormatPresetError( PresetResolveStatus, std::string const&, std::string const&); template cm::optional cmCMakePresetsGraph::FormatPresetError( PresetResolveStatus, std::string const&, std::string const&); template cm::optional cmCMakePresetsGraph::FormatPresetError( PresetResolveStatus, std::string const&, std::string const&); template cm::optional cmCMakePresetsGraph::FormatPresetError( PresetResolveStatus, std::string const&, std::string const&);