Explorar o código

Merge topic 'compat-help-custom-modules'

b177294 cmake: Implement placeholder --help-custom-modules compatibility
Brad King %!s(int64=11) %!d(string=hai) anos
pai
achega
a0eb52c10c
Modificáronse 3 ficheiros con 59 adicións e 2 borrados
  1. 56 1
      Source/cmDocumentation.cxx
  2. 1 0
      Source/cmDocumentation.h
  3. 2 1
      Source/cmDocumentationFormatter.h

+ 56 - 1
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 << "<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;
+}

+ 1 - 0
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;

+ 2 - 1
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
   };
 };