diff options
author | Gerald Combs <gerald@wireshark.org> | 2015-03-29 18:28:30 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-04-10 19:14:34 (GMT) |
commit | 588dcb33b7ff089a84ce5cbacf2696b4a3646b42 (patch) | |
tree | 33fd43e30550fdf09440d76b7d6d75a13eb21d58 | |
parent | 4e039a9a9814fd13142ae2c9876420ddf2414b8e (diff) | |
download | CMake-588dcb33b7ff089a84ce5cbacf2696b4a3646b42.zip CMake-588dcb33b7ff089a84ce5cbacf2696b4a3646b42.tar.gz CMake-588dcb33b7ff089a84ce5cbacf2696b4a3646b42.tar.bz2 |
cmake: Provide guidance when an invalid -G option is given
Print a list of generators if no generator or an invalid one is
supplied.
Signed-off-by: Gerald Combs <gerald@wireshark.org>
-rw-r--r-- | Source/cmDocumentation.cxx | 15 | ||||
-rw-r--r-- | Source/cmDocumentation.h | 1 | ||||
-rw-r--r-- | Source/cmDocumentationFormatter.h | 4 | ||||
-rw-r--r-- | Source/cmake.cxx | 16 | ||||
-rw-r--r-- | Source/cmake.h | 3 | ||||
-rw-r--r-- | Tests/RunCMake/CommandLine/G_bad-arg-stderr.txt | 4 | ||||
-rw-r--r-- | Tests/RunCMake/CommandLine/G_no-arg-stderr.txt | 4 |
7 files changed, 43 insertions, 4 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 7595155..3654aa7 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -818,6 +818,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]; @@ -828,6 +829,7 @@ void cmake::SetArgs(const std::vector<std::string>& args, { cmSystemTools::Error("Could not create named generator ", value.c_str()); + this->PrintGeneratorList(); } else { @@ -1961,6 +1963,18 @@ void cmake::GetGeneratorDocumentation(std::vector<cmDocumentationEntry>& v) } } +void cmake::PrintGeneratorList() +{ +#ifdef CMAKE_BUILD_WITH_CMAKE + cmDocumentation doc; + std::vector<cmDocumentationEntry> generators; + this->GetGeneratorDocumentation(generators); + doc.AppendSection("Generators",generators); + std::cerr << "\n"; + doc.PrintDocumentation(cmDocumentation::ListGenerators, std::cerr); +#endif +} + void cmake::UpdateConversionPathTable() { // Update the path conversion table with any specified file: @@ -2438,6 +2452,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]; @@ -2448,6 +2463,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 3acf4a8..0715d74 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -476,6 +476,9 @@ private: InstalledFilesMap InstalledFiles; void UpdateConversionPathTable(); + + // Print a list of valid generators to stderr. + void PrintGeneratorList(); }; #define CMAKE_STANDARD_OPTIONS_TABLE \ diff --git a/Tests/RunCMake/CommandLine/G_bad-arg-stderr.txt b/Tests/RunCMake/CommandLine/G_bad-arg-stderr.txt index 511208f..07f2b52 100644 --- a/Tests/RunCMake/CommandLine/G_bad-arg-stderr.txt +++ b/Tests/RunCMake/CommandLine/G_bad-arg-stderr.txt @@ -1 +1,3 @@ -^CMake Error: Could not create named generator NoSuchGenerator$ +^CMake Error: Could not create named generator NoSuchGenerator + +Generators diff --git a/Tests/RunCMake/CommandLine/G_no-arg-stderr.txt b/Tests/RunCMake/CommandLine/G_no-arg-stderr.txt index 56d23c2..2f491a2 100644 --- a/Tests/RunCMake/CommandLine/G_no-arg-stderr.txt +++ b/Tests/RunCMake/CommandLine/G_no-arg-stderr.txt @@ -1 +1,3 @@ -^CMake Error: No generator specified for -G$ +^CMake Error: No generator specified for -G + +Generators |