Browse Source

Dynamically add documentation section specified in documented script.

Modify CPackDeb and CPackRPM as an example
Eric NOULARD 13 years ago
parent
commit
a6bce55aef
5 changed files with 25 additions and 9 deletions
  1. 1 1
      Modules/CPackDeb.cmake
  2. 1 1
      Modules/CPackRPM.cmake
  3. 1 2
      Source/CPack/cpack.cxx
  4. 18 3
      Source/cmDocumentation.cxx
  5. 4 2
      Source/cmDocumentation.h

+ 1 - 1
Modules/CPackDeb.cmake

@@ -1,4 +1,4 @@
-##section Variables specific to a CPack generator
+##section Variables specific to CPack Debian (DEB) generator
 ##end
 ##module
 # - The builtin (binary) CPack Deb generator (Unix only)

+ 1 - 1
Modules/CPackRPM.cmake

@@ -1,4 +1,4 @@
-##section Variables specific to a CPack generator
+##section Variables specific to CPack RPM generator
 ##end
 ##module
 # - The builtin (binary) CPack RPM generator (Unix only)

+ 1 - 2
Source/CPack/cpack.cxx

@@ -514,7 +514,6 @@ int main (int argc, char *argv[])
   if ( help )
     {
     // Construct and print requested documentation.
-    std::vector<cmDocumentationEntry> variables;
 
     doc.SetName("cpack");
     doc.SetSection("Name",cmDocumentationName);
@@ -545,7 +544,7 @@ int main (int argc, char *argv[])
       {
           doc.GetStructuredDocFromFile(
               (docedIt->first).c_str(),
-              commands,&cminst,(docedIt->second).c_str());
+              commands,&cminst);
       }
 
     std::map<std::string,cmDocumentationSection *> propDocs;

+ 18 - 3
Source/cmDocumentation.cxx

@@ -745,6 +745,18 @@ void cmDocumentation::addCPackStandardDocSections()
             "Variables specific to a CPack generator");
 }
 
+void cmDocumentation::addAutomaticVariableSections(const std::string& section)
+{
+  std::vector<std::string>::iterator it;
+  it = find(this->VariableSections.begin(),
+            this->VariableSections.end(),
+            section);
+  /* if the section does not exist then add it */
+  if (it==this->VariableSections.end())
+    {
+    this->VariableSections.push_back(section);
+    }
+}
 //----------------------------------------------------------------------------
 int cmDocumentation::getDocumentedModulesListInDir(
           std::string path,
@@ -818,8 +830,7 @@ static void trim(std::string& s)
 int cmDocumentation::GetStructuredDocFromFile(
         const char* fname,
         std::vector<cmDocumentationEntry>& commands,
-        cmake* cm,
-        const char *docSection)
+        cmake* cm)
 {
     typedef enum sdoce {
         SDOC_NONE, SDOC_MODULE, SDOC_MACRO, SDOC_FUNCTION, SDOC_VARIABLE,
@@ -835,6 +846,7 @@ int cmDocumentation::GetStructuredDocFromFile(
       {
       return nbDocItemFound;
       }
+    std::string section;
     std::string name;
     std::string full;
     std::string brief;
@@ -886,6 +898,8 @@ int cmDocumentation::GetStructuredDocFromFile(
             {
                docCtxIdx++;
                docContextStack[docCtxIdx]=SDOC_SECTION;
+               // 10 is the size of '##section' + 1
+               section = line.substr(10,std::string::npos);
                /* drop the rest of the line */
                line = "";
                newCtx = true;
@@ -900,11 +914,12 @@ int cmDocumentation::GetStructuredDocFromFile(
                            brief.c_str(),full.c_str()));
                    break;
                case SDOC_VARIABLE:
+                   this->addAutomaticVariableSections(section);
                    cm->DefineProperty
                        (name.c_str(), cmProperty::VARIABLE,
                         brief.c_str(),
                         full.c_str(),false,
-                        docSection);
+                        section.c_str());
                    break;
                case SDOC_MODULE:
                    /*  not implemented */

+ 4 - 2
Source/cmDocumentation.h

@@ -147,6 +147,9 @@ public:
   /** Add the CPack standard documentation section(s) */
   void addCPackStandardDocSections();
 
+  /** Add automatic variables sections */
+  void addAutomaticVariableSections(const std::string& section);
+
   /**
    * Retrieve the list of documented module located in
    * path which match the globing expression globExpr.
@@ -185,8 +188,7 @@ public:
    */
   int GetStructuredDocFromFile(const char* fname,
                                std::vector<cmDocumentationEntry>& commands,
-                               cmake* cm,
-                               const char *docSection);
+                               cmake* cm);
 private:
   void SetForm(Form f);
   void SetDocName(const char* docname);