From a6bce55aefd332f148a2753d5be0ec4383534473 Mon Sep 17 00:00:00 2001 From: Eric NOULARD Date: Sat, 18 Feb 2012 22:07:39 +0100 Subject: Dynamically add documentation section specified in documented script. Modify CPackDeb and CPackRPM as an example --- Modules/CPackDeb.cmake | 2 +- Modules/CPackRPM.cmake | 2 +- Source/CPack/cpack.cxx | 3 +-- Source/cmDocumentation.cxx | 21 ++++++++++++++++++--- Source/cmDocumentation.h | 6 ++++-- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Modules/CPackDeb.cmake b/Modules/CPackDeb.cmake index 0916843..fe81dc9 100644 --- a/Modules/CPackDeb.cmake +++ b/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) diff --git a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake index f76e91e..ae81ab7 100644 --- a/Modules/CPackRPM.cmake +++ b/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) diff --git a/Source/CPack/cpack.cxx b/Source/CPack/cpack.cxx index c541610..6f5055c 100644 --- a/Source/CPack/cpack.cxx +++ b/Source/CPack/cpack.cxx @@ -514,7 +514,6 @@ int main (int argc, char *argv[]) if ( help ) { // Construct and print requested documentation. - std::vector 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 propDocs; diff --git a/Source/cmDocumentation.cxx b/Source/cmDocumentation.cxx index 02f69f1..17e35d8 100644 --- a/Source/cmDocumentation.cxx +++ b/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::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& 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 */ diff --git a/Source/cmDocumentation.h b/Source/cmDocumentation.h index 00dba1a..11bef16 100644 --- a/Source/cmDocumentation.h +++ b/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& commands, - cmake* cm, - const char *docSection); + cmake* cm); private: void SetForm(Form f); void SetDocName(const char* docname); -- cgit v0.12