mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-03 22:30:29 +00:00
cmCMakePresetsGraph: generalize printing presets of different types
This commit is contained in:
@@ -61,6 +61,8 @@ using ImmediateMacroExpander =
|
|||||||
cmCMakePresetsGraphInternal::ImmediateMacroExpander<T>;
|
cmCMakePresetsGraphInternal::ImmediateMacroExpander<T>;
|
||||||
using cmCMakePresetsGraphInternal::ExpandMacros;
|
using cmCMakePresetsGraphInternal::ExpandMacros;
|
||||||
|
|
||||||
|
bool gSkipNewLine = true;
|
||||||
|
|
||||||
void InheritString(std::string& child, std::string const& parent)
|
void InheritString(std::string& child, std::string const& parent)
|
||||||
{
|
{
|
||||||
if (child.empty()) {
|
if (child.empty()) {
|
||||||
@@ -504,15 +506,6 @@ ExpandMacroResult VisitEnv(std::string& value, CycleStatus& status,
|
|||||||
return ExpandMacroResult::Ok;
|
return ExpandMacroResult::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
void printPrecedingNewline()
|
|
||||||
{
|
|
||||||
static bool skipNewLine = true;
|
|
||||||
if (!skipNewLine) {
|
|
||||||
std::cout << '\n';
|
|
||||||
}
|
|
||||||
skipNewLine = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintPresets(
|
void PrintPresets(
|
||||||
std::vector<cmCMakePresetsGraph::Preset const*> const& presets)
|
std::vector<cmCMakePresetsGraph::Preset const*> const& presets)
|
||||||
{
|
{
|
||||||
@@ -529,18 +522,52 @@ void PrintPresets(
|
|||||||
auto longestLength = (*longestPresetName)->Name.length();
|
auto longestLength = (*longestPresetName)->Name.length();
|
||||||
|
|
||||||
for (auto const* preset : presets) {
|
for (auto const* preset : presets) {
|
||||||
auto name = cmStrCat(" \"", preset->Name, '"');
|
std::string name = cmStrCat(" \"", preset->Name, '"');
|
||||||
auto const& description = preset->DisplayName;
|
if (!preset->DisplayName.empty()) {
|
||||||
if (!description.empty()) {
|
|
||||||
int const width = static_cast<int>(longestLength + name.length() -
|
int const width = static_cast<int>(longestLength + name.length() -
|
||||||
preset->Name.length());
|
preset->Name.length());
|
||||||
std::cout << std::left << std::setw(width) << name << " - "
|
std::cout << std::left << std::setw(width) << name << " - "
|
||||||
<< description << '\n';
|
<< preset->DisplayName << '\n';
|
||||||
} else {
|
} else {
|
||||||
std::cout << name << '\n';
|
std::cout << name << '\n';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct AlwaysTrue
|
||||||
|
{
|
||||||
|
template <typename T>
|
||||||
|
constexpr bool operator()(T const&) const noexcept
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename PresetType, typename Filter = AlwaysTrue>
|
||||||
|
void PrintPresetList(
|
||||||
|
cmCMakePresetsGraph const* const graph,
|
||||||
|
std::map<std::string, cmCMakePresetsGraph::PresetPair<PresetType>>
|
||||||
|
cmCMakePresetsGraph::*data,
|
||||||
|
std::vector<std::string> cmCMakePresetsGraph::*index, Filter filter = {})
|
||||||
|
{
|
||||||
|
std::vector<cmCMakePresetsGraph::Preset const*> presets;
|
||||||
|
presets.reserve((graph->*index).size());
|
||||||
|
for (auto const& p : graph->*index) {
|
||||||
|
auto const& preset = (graph->*data).at(p);
|
||||||
|
if (!preset.Unexpanded.Hidden && preset.Expanded &&
|
||||||
|
preset.Expanded->ConditionResult && filter(preset.Unexpanded)) {
|
||||||
|
presets.push_back(
|
||||||
|
static_cast<cmCMakePresetsGraph::Preset const*>(&preset.Unexpanded));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!presets.empty()) {
|
||||||
|
std::cout << (gSkipNewLine ? "" : "\n") << "Available "
|
||||||
|
<< PresetType::kind() << " presets:\n\n";
|
||||||
|
gSkipNewLine = false;
|
||||||
|
PrintPresets(presets);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -945,11 +972,7 @@ bool cmCMakePresetsGraph::BuildPreset::VisitPresetInherit(
|
|||||||
bool cmCMakePresetsGraph::BuildPreset::VisitPresetAfterInherit(
|
bool cmCMakePresetsGraph::BuildPreset::VisitPresetAfterInherit(
|
||||||
int /* version */, cmJSONState* /*stat*/)
|
int /* version */, cmJSONState* /*stat*/)
|
||||||
{
|
{
|
||||||
auto& preset = *this;
|
return this->Hidden || !this->ConfigurePreset.empty();
|
||||||
if (!preset.Hidden && preset.ConfigurePreset.empty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cmCMakePresetsGraph::TestPreset::VisitPresetInherit(
|
bool cmCMakePresetsGraph::TestPreset::VisitPresetInherit(
|
||||||
@@ -1059,11 +1082,7 @@ bool cmCMakePresetsGraph::TestPreset::VisitPresetInherit(
|
|||||||
bool cmCMakePresetsGraph::TestPreset::VisitPresetAfterInherit(
|
bool cmCMakePresetsGraph::TestPreset::VisitPresetAfterInherit(
|
||||||
int /* version */, cmJSONState* /*state*/)
|
int /* version */, cmJSONState* /*state*/)
|
||||||
{
|
{
|
||||||
auto& preset = *this;
|
return this->Hidden || !this->ConfigurePreset.empty();
|
||||||
if (!preset.Hidden && preset.ConfigurePreset.empty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cmCMakePresetsGraph::PackagePreset::VisitPresetInherit(
|
bool cmCMakePresetsGraph::PackagePreset::VisitPresetInherit(
|
||||||
@@ -1092,11 +1111,7 @@ bool cmCMakePresetsGraph::PackagePreset::VisitPresetInherit(
|
|||||||
bool cmCMakePresetsGraph::PackagePreset::VisitPresetAfterInherit(
|
bool cmCMakePresetsGraph::PackagePreset::VisitPresetAfterInherit(
|
||||||
int /* version */, cmJSONState* /*state*/)
|
int /* version */, cmJSONState* /*state*/)
|
||||||
{
|
{
|
||||||
auto& preset = *this;
|
return this->Hidden || !this->ConfigurePreset.empty();
|
||||||
if (!preset.Hidden && preset.ConfigurePreset.empty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cmCMakePresetsGraph::WorkflowPreset::VisitPresetInherit(
|
bool cmCMakePresetsGraph::WorkflowPreset::VisitPresetInherit(
|
||||||
@@ -1380,109 +1395,49 @@ void cmCMakePresetsGraph::ClearPresets()
|
|||||||
|
|
||||||
void cmCMakePresetsGraph::PrintConfigurePresetList() const
|
void cmCMakePresetsGraph::PrintConfigurePresetList() const
|
||||||
{
|
{
|
||||||
PrintConfigurePresetList([](ConfigurePreset const&) { return true; });
|
PrintPresetList<ConfigurePreset>(this,
|
||||||
|
&cmCMakePresetsGraph::ConfigurePresets,
|
||||||
|
&cmCMakePresetsGraph::ConfigurePresetOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmCMakePresetsGraph::PrintConfigurePresetList(
|
void cmCMakePresetsGraph::PrintConfigurePresetList(
|
||||||
std::function<bool(ConfigurePreset const&)> const& filter) const
|
std::function<bool(ConfigurePreset const&)> const& filter) const
|
||||||
{
|
{
|
||||||
std::vector<cmCMakePresetsGraph::Preset const*> presets;
|
PrintPresetList<ConfigurePreset>(
|
||||||
for (auto const& p : this->ConfigurePresetOrder) {
|
this, &cmCMakePresetsGraph::ConfigurePresets,
|
||||||
auto const& preset = this->ConfigurePresets.at(p);
|
&cmCMakePresetsGraph::ConfigurePresetOrder, filter);
|
||||||
if (!preset.Unexpanded.Hidden && preset.Expanded &&
|
|
||||||
preset.Expanded->ConditionResult && filter(preset.Unexpanded)) {
|
|
||||||
presets.push_back(
|
|
||||||
static_cast<cmCMakePresetsGraph::Preset const*>(&preset.Unexpanded));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!presets.empty()) {
|
|
||||||
printPrecedingNewline();
|
|
||||||
std::cout << "Available configure presets:\n\n";
|
|
||||||
PrintPresets(presets);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmCMakePresetsGraph::PrintBuildPresetList() const
|
void cmCMakePresetsGraph::PrintBuildPresetList() const
|
||||||
{
|
{
|
||||||
std::vector<cmCMakePresetsGraph::Preset const*> presets;
|
PrintPresetList<BuildPreset>(this, &cmCMakePresetsGraph::BuildPresets,
|
||||||
for (auto const& p : this->BuildPresetOrder) {
|
&cmCMakePresetsGraph::BuildPresetOrder);
|
||||||
auto const& preset = this->BuildPresets.at(p);
|
|
||||||
if (!preset.Unexpanded.Hidden && preset.Expanded &&
|
|
||||||
preset.Expanded->ConditionResult) {
|
|
||||||
presets.push_back(
|
|
||||||
static_cast<cmCMakePresetsGraph::Preset const*>(&preset.Unexpanded));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!presets.empty()) {
|
|
||||||
printPrecedingNewline();
|
|
||||||
std::cout << "Available build presets:\n\n";
|
|
||||||
PrintPresets(presets);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmCMakePresetsGraph::PrintTestPresetList() const
|
void cmCMakePresetsGraph::PrintTestPresetList() const
|
||||||
{
|
{
|
||||||
std::vector<cmCMakePresetsGraph::Preset const*> presets;
|
PrintPresetList<TestPreset>(this, &cmCMakePresetsGraph::TestPresets,
|
||||||
for (auto const& p : this->TestPresetOrder) {
|
&cmCMakePresetsGraph::TestPresetOrder);
|
||||||
auto const& preset = this->TestPresets.at(p);
|
|
||||||
if (!preset.Unexpanded.Hidden && preset.Expanded &&
|
|
||||||
preset.Expanded->ConditionResult) {
|
|
||||||
presets.push_back(
|
|
||||||
static_cast<cmCMakePresetsGraph::Preset const*>(&preset.Unexpanded));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!presets.empty()) {
|
|
||||||
printPrecedingNewline();
|
|
||||||
std::cout << "Available test presets:\n\n";
|
|
||||||
PrintPresets(presets);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmCMakePresetsGraph::PrintPackagePresetList() const
|
void cmCMakePresetsGraph::PrintPackagePresetList() const
|
||||||
{
|
{
|
||||||
this->PrintPackagePresetList([](PackagePreset const&) { return true; });
|
PrintPresetList<PackagePreset>(this, &cmCMakePresetsGraph::PackagePresets,
|
||||||
|
&cmCMakePresetsGraph::PackagePresetOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmCMakePresetsGraph::PrintPackagePresetList(
|
void cmCMakePresetsGraph::PrintPackagePresetList(
|
||||||
std::function<bool(PackagePreset const&)> const& filter) const
|
std::function<bool(PackagePreset const&)> const& filter) const
|
||||||
{
|
{
|
||||||
std::vector<cmCMakePresetsGraph::Preset const*> presets;
|
PrintPresetList<PackagePreset>(this, &cmCMakePresetsGraph::PackagePresets,
|
||||||
for (auto const& p : this->PackagePresetOrder) {
|
&cmCMakePresetsGraph::PackagePresetOrder,
|
||||||
auto const& preset = this->PackagePresets.at(p);
|
filter);
|
||||||
if (!preset.Unexpanded.Hidden && preset.Expanded &&
|
|
||||||
preset.Expanded->ConditionResult && filter(preset.Unexpanded)) {
|
|
||||||
presets.push_back(
|
|
||||||
static_cast<cmCMakePresetsGraph::Preset const*>(&preset.Unexpanded));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!presets.empty()) {
|
|
||||||
printPrecedingNewline();
|
|
||||||
std::cout << "Available package presets:\n\n";
|
|
||||||
PrintPresets(presets);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmCMakePresetsGraph::PrintWorkflowPresetList() const
|
void cmCMakePresetsGraph::PrintWorkflowPresetList() const
|
||||||
{
|
{
|
||||||
std::vector<cmCMakePresetsGraph::Preset const*> presets;
|
PrintPresetList<WorkflowPreset>(this, &cmCMakePresetsGraph::WorkflowPresets,
|
||||||
for (auto const& p : this->WorkflowPresetOrder) {
|
&cmCMakePresetsGraph::WorkflowPresetOrder);
|
||||||
auto const& preset = this->WorkflowPresets.at(p);
|
|
||||||
if (!preset.Unexpanded.Hidden && preset.Expanded &&
|
|
||||||
preset.Expanded->ConditionResult) {
|
|
||||||
presets.push_back(
|
|
||||||
static_cast<cmCMakePresetsGraph::Preset const*>(&preset.Unexpanded));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!presets.empty()) {
|
|
||||||
printPrecedingNewline();
|
|
||||||
std::cout << "Available workflow presets:\n\n";
|
|
||||||
PrintPresets(presets);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmCMakePresetsGraph::PrintAllPresets() const
|
void cmCMakePresetsGraph::PrintAllPresets() const
|
||||||
|
|||||||
@@ -142,6 +142,8 @@ public:
|
|||||||
bool VisitPresetInherit(Preset const& parent) override;
|
bool VisitPresetInherit(Preset const& parent) override;
|
||||||
bool VisitPresetBeforeInherit() override;
|
bool VisitPresetBeforeInherit() override;
|
||||||
bool VisitPresetAfterInherit(int version, cmJSONState* state) override;
|
bool VisitPresetAfterInherit(int version, cmJSONState* state) override;
|
||||||
|
|
||||||
|
static char const* kind() { return "configure"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class BuildPreset : public Preset
|
class BuildPreset : public Preset
|
||||||
@@ -174,6 +176,8 @@ public:
|
|||||||
bool VisitPresetInherit(Preset const& parent) override;
|
bool VisitPresetInherit(Preset const& parent) override;
|
||||||
bool VisitPresetAfterInherit(int /* version */,
|
bool VisitPresetAfterInherit(int /* version */,
|
||||||
cmJSONState* /*state*/) override;
|
cmJSONState* /*state*/) override;
|
||||||
|
|
||||||
|
static char const* kind() { return "build"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class TestPreset : public Preset
|
class TestPreset : public Preset
|
||||||
@@ -309,6 +313,8 @@ public:
|
|||||||
bool VisitPresetInherit(Preset const& parent) override;
|
bool VisitPresetInherit(Preset const& parent) override;
|
||||||
bool VisitPresetAfterInherit(int /* version */,
|
bool VisitPresetAfterInherit(int /* version */,
|
||||||
cmJSONState* /*state*/) override;
|
cmJSONState* /*state*/) override;
|
||||||
|
|
||||||
|
static char const* kind() { return "test"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class PackagePreset : public Preset
|
class PackagePreset : public Preset
|
||||||
@@ -346,6 +352,8 @@ public:
|
|||||||
bool VisitPresetInherit(Preset const& parent) override;
|
bool VisitPresetInherit(Preset const& parent) override;
|
||||||
bool VisitPresetAfterInherit(int /* version */,
|
bool VisitPresetAfterInherit(int /* version */,
|
||||||
cmJSONState* /*state*/) override;
|
cmJSONState* /*state*/) override;
|
||||||
|
|
||||||
|
static char const* kind() { return "package"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class WorkflowPreset : public Preset
|
class WorkflowPreset : public Preset
|
||||||
@@ -383,6 +391,8 @@ public:
|
|||||||
bool VisitPresetInherit(Preset const& parent) override;
|
bool VisitPresetInherit(Preset const& parent) override;
|
||||||
bool VisitPresetAfterInherit(int /* version */,
|
bool VisitPresetAfterInherit(int /* version */,
|
||||||
cmJSONState* /* state */) override;
|
cmJSONState* /* state */) override;
|
||||||
|
|
||||||
|
static char const* kind() { return "workflow"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
Reference in New Issue
Block a user