/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2000-2009 Kitware, Inc., Insight Software Consortium Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ #ifndef _cmDocumentation_h #define _cmDocumentation_h #include "cmStandardIncludes.h" #include "cmProperty.h" #include "cmDocumentationFormatter.h" #include "cmDocumentationSection.h" #include "cmake.h" namespace cmsys { class Directory; } /** Class to generate documentation. */ class cmDocumentation: public cmDocumentationEnums { public: cmDocumentation(); ~cmDocumentation(); /** * Check command line arguments for documentation options. Returns * true if documentation options are found, and false otherwise. * When true is returned, PrintRequestedDocumentation should be * called. exitOpt can be used for things like cmake -E, so that * all arguments after the -E are ignored and not searched for * help arguments. */ bool CheckOptions(int argc, const char* const* argv, const char* exitOpt =0); /** * Print help requested on the command line. Call after * CheckOptions returns true. Returns true on success, and false * otherwise. Failure can occur when output files specified on the * command line cannot be written. */ bool PrintRequestedDocumentation(std::ostream& os); /** Print help of the given type. */ bool PrintDocumentation(Type ht, std::ostream& os); void SetShowGenerators(bool showGen) { this->ShowGenerators = showGen; } /** Set the program name for standard document generation. */ void SetName(const char* name); /** Set a section of the documentation. Typical sections include Name, Usage, Description, Options */ void SetSection(const char *sectionName, cmDocumentationSection *section); void SetSection(const char *sectionName, std::vector &docs); void SetSection(const char *sectionName, const char *docs[][2]); void SetSections(std::map §ions); /** Add the documentation to the beginning/end of the section */ void PrependSection(const char *sectionName, const char *docs[][2]); void PrependSection(const char *sectionName, std::vector &docs); void PrependSection(const char *sectionName, cmDocumentationEntry &docs); void AppendSection(const char *sectionName, const char *docs[][2]); void AppendSection(const char *sectionName, std::vector &docs); void AppendSection(const char *sectionName, cmDocumentationEntry &docs); /** Set cmake root so we can find installed files */ void SetCMakeRoot(const char* root) { this->CMakeRoot = root;} /** Add common (to all tools) documentation section(s) */ void addCommonStandardDocSections(); /** Add the CMake standard documentation section(s) */ void addCMakeStandardDocSections(); /** Add the CTest standard documentation section(s) */ void addCTestStandardDocSections(); /** Add the CPack standard documentation section(s) */ void addCPackStandardDocSections(); private: void GlobHelp(std::vector& files, std::string const& pattern); void PrintNames(std::ostream& os, std::string const& pattern); bool PrintFiles(std::ostream& os, std::string const& pattern); bool PrintVersion(std::ostream& os); bool PrintHelpOneManual(std::ostream& os); bool PrintHelpOneCommand(std::ostream& os); bool PrintHelpOneModule(std::ostream& os); bool PrintHelpOnePolicy(std::ostream& os); bool PrintHelpOneProperty(std::ostream& os); bool PrintHelpOneVariable(std::ostream& os); bool PrintHelpListManuals(std::ostream& os); bool PrintHelpListCommands(std::ostream& os); bool PrintHelpListModules(std::ostream& os); bool PrintHelpListProperties(std::ostream& os); bool PrintHelpListVariables(std::ostream& os); bool PrintHelpListPolicies(std::ostream& os); bool PrintDocumentationUsage(std::ostream& os); const char* GetNameString() const; bool IsOption(const char* arg) const; bool ShowGenerators; std::string NameString; std::map AllSections; std::string CMakeRoot; std::string CurrentArgument; struct RequestedHelpItem { RequestedHelpItem(): HelpType(None) {} cmDocumentationEnums::Type HelpType; std::string Filename; std::string Argument; }; std::vector RequestedHelpItems; cmDocumentationFormatter Formatter; static void WarnFormFromFilename(RequestedHelpItem& request); }; #endif