[cmake-developers] [PATCH] Have -G print a list of generators
Gerald Combs
gerald at wireshark.org
Fri Apr 10 12:30:10 EDT 2015
Hi,
The attached patch prints a list of generators if an empty or invalid
'-G' option is supplied.
-------------- next part --------------
From 6b01514b9293445c2e2efd299b4421c3ded4aa10 Mon Sep 17 00:00:00 2001
From: Gerald Combs <gerald at wireshark.org>
Date: Sun, 29 Mar 2015 11:28:30 -0700
Subject: [PATCH] Help: Provide guidance on generators.
Print a list of generators if no generator or an invalid one is
supplied.
Signed-off-by: Gerald Combs <gerald at wireshark.org>
---
Source/cmDocumentation.cxx | 15 +++++++++++++++
Source/cmDocumentation.h | 1 +
Source/cmDocumentationFormatter.h | 4 ++--
Source/cmake.cxx | 16 ++++++++++++++++
Source/cmake.h | 3 +++
5 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/Source/cmDocumentation.cxx b/Source/cmDocumentation.cxx
index 8c17536..4f34755 100644
--- a/Source/cmDocumentation.cxx
+++ b/Source/cmDocumentation.cxx
@@ -138,6 +138,8 @@ bool cmDocumentation::PrintDocumentation(Type ht, std::ostream& os)
return this->PrintHelpListVariables(os);
case cmDocumentation::ListPolicies:
return this->PrintHelpListPolicies(os);
+ case cmDocumentation::ListGenerators:
+ return this->PrintHelpListGenerators(os);
case cmDocumentation::Version:
return this->PrintVersion(os);
case cmDocumentation::OldCustomModules:
@@ -817,6 +819,19 @@ bool cmDocumentation::PrintHelpListPolicies(std::ostream& os)
}
//----------------------------------------------------------------------------
+bool cmDocumentation::PrintHelpListGenerators(std::ostream& os)
+{
+ std::map<std::string,cmDocumentationSection*>::iterator si;
+ si = this->AllSections.find("Generators");
+ if(si != this->AllSections.end())
+ {
+ this->Formatter.SetIndent(" ");
+ this->Formatter.PrintSection(os, *si->second);
+ }
+ return true;
+}
+
+//----------------------------------------------------------------------------
bool cmDocumentation::PrintHelpOneVariable(std::ostream& os)
{
std::string vname = cmSystemTools::HelpFileName(this->CurrentArgument);
diff --git a/Source/cmDocumentation.h b/Source/cmDocumentation.h
index b72b5fe..8854c36 100644
--- a/Source/cmDocumentation.h
+++ b/Source/cmDocumentation.h
@@ -117,6 +117,7 @@ private:
bool PrintHelpListProperties(std::ostream& os);
bool PrintHelpListVariables(std::ostream& os);
bool PrintHelpListPolicies(std::ostream& os);
+ bool PrintHelpListGenerators(std::ostream& os);
bool PrintOldCustomModules(std::ostream& os);
const char* GetNameString() const;
diff --git a/Source/cmDocumentationFormatter.h b/Source/cmDocumentationFormatter.h
index 59513cc..6e19b7d 100644
--- a/Source/cmDocumentationFormatter.h
+++ b/Source/cmDocumentationFormatter.h
@@ -26,8 +26,8 @@ public:
/** Types of help provided. */
enum Type
{
- None, Version, Usage, Help, Full, ListManuals,
- ListCommands, ListModules, ListProperties, ListVariables, ListPolicies,
+ None, Version, Usage, Help, Full, ListManuals, ListCommands,
+ ListModules, ListProperties, ListVariables, ListPolicies, ListGenerators,
OneManual, OneCommand, OneModule, OneProperty, OneVariable, OnePolicy,
OldCustomModules
};
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 51df7f2..5971e1f 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -816,6 +816,7 @@ void cmake::SetArgs(const std::vector<std::string>& args,
if(i >= args.size())
{
cmSystemTools::Error("No generator specified for -G");
+ this->PrintGeneratorList();
return;
}
value = args[i];
@@ -824,8 +825,10 @@ void cmake::SetArgs(const std::vector<std::string>& args,
this->CreateGlobalGenerator(value);
if(!gen)
{
+ cmDocumentation doc;
cmSystemTools::Error("Could not create named generator ",
value.c_str());
+ this->PrintGeneratorList();
}
else
{
@@ -1923,6 +1926,17 @@ void cmake::GetGeneratorDocumentation(std::vector<cmDocumentationEntry>& v)
}
}
+void cmake::PrintGeneratorList()
+{
+ cmDocumentation doc;
+ std::vector<cmDocumentationEntry> generators;
+ this->GetGeneratorDocumentation(generators);
+ doc.AppendSection("Generators",generators);
+ std::cerr << "\n";
+ doc.PrintDocumentation(cmDocumentation::ListGenerators, std::cerr);
+}
+
+
void cmake::UpdateConversionPathTable()
{
// Update the path conversion table with any specified file:
@@ -2408,6 +2422,7 @@ int cmake::GetSystemInformation(std::vector<std::string>& args)
if(i >= args.size())
{
cmSystemTools::Error("No generator specified for -G");
+ this->PrintGeneratorList();
return -1;
}
value = args[i];
@@ -2418,6 +2433,7 @@ int cmake::GetSystemInformation(std::vector<std::string>& args)
{
cmSystemTools::Error("Could not create named generator ",
value.c_str());
+ this->PrintGeneratorList();
}
else
{
diff --git a/Source/cmake.h b/Source/cmake.h
index 60ffcd4..9064122 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -468,6 +468,9 @@ private:
InstalledFilesMap InstalledFiles;
void UpdateConversionPathTable();
+
+ // Print a list of valid generators to stderr.
+ void PrintGeneratorList();
};
#define CMAKE_STANDARD_OPTIONS_TABLE \
--
1.9.5 (Apple Git-50.3)
More information about the cmake-developers
mailing list