From b17729460ba66ec96ad0a79dd52c0557e81a895f Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 8 Jan 2014 11:14:06 -0500 Subject: [PATCH] cmake: Implement placeholder --help-custom-modules compatibility The implementation of the "cmake --help-custom-modules" was removed along with the rest of the old help generation infrastructure when documentation was converted to reStructuredText. In order to avoid breaking existing project builds outright when they use a custom command that runs a command like "cmake --help-custom-modules foo.1", generate the requested file with placeholder content explaining that the option is not supported anymore. --- Source/cmDocumentation.cxx | 57 ++++++++++++++++++++++++++++++- Source/cmDocumentation.h | 1 + Source/cmDocumentationFormatter.h | 3 +- 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/Source/cmDocumentation.cxx b/Source/cmDocumentation.cxx index 01f7a203a..9c27fc111 100644 --- a/Source/cmDocumentation.cxx +++ b/Source/cmDocumentation.cxx @@ -138,6 +138,8 @@ bool cmDocumentation::PrintDocumentation(Type ht, std::ostream& os) return this->PrintHelpListPolicies(os); case cmDocumentation::Version: return this->PrintVersion(os); + case cmDocumentation::OldCustomModules: + return this->PrintOldCustomModules(os); default: return false; } } @@ -336,7 +338,15 @@ bool cmDocumentation::CheckOptions(int argc, const char* const* argv, GET_OPT_ARGUMENT(help.Filename); cmSystemTools::Message( "Warning: --help-custom-modules no longer supported"); - return true; + if(help.Filename.empty()) + { + return true; + } + // Avoid breaking old project builds completely by at least generating + // the output file. Abuse help.Argument to give the file name to + // PrintOldCustomModules without disrupting our internal API. + help.HelpType = cmDocumentation::OldCustomModules; + help.Argument = cmSystemTools::GetFilenameName(help.Filename); } else if(strcmp(argv[i], "--help-commands") == 0) { @@ -864,3 +874,48 @@ bool cmDocumentation::IsOption(const char* arg) const return ((arg[0] == '-') || (strcmp(arg, "/V") == 0) || (strcmp(arg, "/?") == 0)); } + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintOldCustomModules(std::ostream& os) +{ + // CheckOptions abuses the Argument field to give us the file name. + std::string filename = this->CurrentArgument; + std::string ext = cmSystemTools::UpperCase( + cmSystemTools::GetFilenameLastExtension(filename)); + std::string name = cmSystemTools::GetFilenameWithoutLastExtension(filename); + + const char* summary = "cmake --help-custom-modules no longer supported\n"; + const char* detail = + "CMake versions prior to 3.0 exposed their internal module help page\n" + "generation functionality through the --help-custom-modules option.\n" + "CMake versions 3.0 and above use other means to generate their module\n" + "help pages so this functionality is no longer available to be exposed.\n" + "\n" + "This file was generated as a placeholder to provide this information.\n" + ; + if((ext == ".HTM") || (ext == ".HTML")) + { + os << "" << name << "\n" + << summary << "

\n" << detail << "\n"; + } + else if((ext.length()==2) && (ext[1] >='1') && (ext[1]<='9')) + { + os << + ".TH " << name << " " << ext[1] << " \"" << + cmSystemTools::GetCurrentDateTime("%B %d, %Y") << + "\" \"cmake " << cmVersion::GetCMakeVersion() << "\"\n" + ".SH NAME\n" + ".PP\n" << + name << " \\- " << summary << + "\n" + ".SH DESCRIPTION\n" + ".PP\n" << + detail + ; + } + else + { + os << name << "\n\n" << summary << "\n" << detail; + } + return true; +} diff --git a/Source/cmDocumentation.h b/Source/cmDocumentation.h index 05c044286..d5a7dd5eb 100644 --- a/Source/cmDocumentation.h +++ b/Source/cmDocumentation.h @@ -115,6 +115,7 @@ private: bool PrintHelpListVariables(std::ostream& os); bool PrintHelpListPolicies(std::ostream& os); bool PrintDocumentationUsage(std::ostream& os); + bool PrintOldCustomModules(std::ostream& os); const char* GetNameString() const; bool IsOption(const char* arg) const; diff --git a/Source/cmDocumentationFormatter.h b/Source/cmDocumentationFormatter.h index c7da52cd3..118f03d9d 100644 --- a/Source/cmDocumentationFormatter.h +++ b/Source/cmDocumentationFormatter.h @@ -28,7 +28,8 @@ public: { None, Version, Usage, ListManuals, ListCommands, ListModules, ListProperties, ListVariables, ListPolicies, - OneManual, OneCommand, OneModule, OneProperty, OneVariable, OnePolicy + OneManual, OneCommand, OneModule, OneProperty, OneVariable, OnePolicy, + OldCustomModules }; };