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.
This commit is contained in:
Brad King 2014-01-08 11:14:06 -05:00
parent beb9cfae17
commit b17729460b
3 changed files with 59 additions and 2 deletions

View File

@ -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,8 +338,16 @@ bool cmDocumentation::CheckOptions(int argc, const char* const* argv,
GET_OPT_ARGUMENT(help.Filename);
cmSystemTools::Message(
"Warning: --help-custom-modules no longer supported");
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)
{
help.HelpType = cmDocumentation::OneManual;
@ -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 << "<html><title>" << name << "</title><body>\n"
<< summary << "<p/>\n" << detail << "</body></html>\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;
}

View File

@ -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;

View File

@ -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
};
};