| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451 |
- /*=========================================================================
- Program: CMake - Cross-Platform Makefile Generator
- Module: $RCSfile$
- Language: C++
- Date: $Date$
- Version: $Revision$
- Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
- See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notices for more information.
- =========================================================================*/
- #include "cmDocumentation.h"
- #include "cmSystemTools.h"
- #include "cmVersion.h"
- #include <cmsys/Directory.hxx>
- const cmDocumentationEntry cmDocumentation::cmSection::EmptySection ={0,0,0};
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationStandardOptions[] =
- {
- {"--copyright [file]", "Print the CMake copyright and exit.",
- "If a file is specified, the copyright is written into it."},
- {"--help", "Print usage information and exit.",
- "Usage describes the basic command line interface and its options."},
- {"--help-full [file]", "Print full help and exit.",
- "Full help displays most of the documentation provided by the UNIX "
- "man page. It is provided for use on non-UNIX platforms, but is "
- "also convenient if the man page is not installed. If a file is "
- "specified, the help is written into it."},
- {"--help-html [file]", "Print full help in HTML format.",
- "This option is used by CMake authors to help produce web pages. "
- "If a file is specified, the help is written into it."},
- {"--help-man [file]", "Print full help as a UNIX man page and exit.",
- "This option is used by the cmake build to generate the UNIX man page. "
- "If a file is specified, the help is written into it."},
- {"--version [file]", "Show program name/version banner and exit.",
- "If a file is specified, the version is written into it."},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmModulesDocumentationDescription[] =
- {
- {0,
- " CMake Modules - Modules coming with CMake, the Cross-Platform Makefile "
- "Generator.", 0},
- // CMAKE_DOCUMENTATION_OVERVIEW,
- {0,
- "This is the documentation for the modules and scripts coming with CMake. "
- "Using these modules you can check the computer system for "
- "installed software packages, features of the compiler and the "
- "existance of headers to name just a few.", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmCustomModulesDocumentationDescription[] =
- {
- {0,
- " Custom CMake Modules - Additional Modules for CMake.", 0},
- // CMAKE_DOCUMENTATION_OVERVIEW,
- {0,
- "This is the documentation for additional modules and scripts for CMake. "
- "Using these modules you can check the computer system for "
- "installed software packages, features of the compiler and the "
- "existance of headers to name just a few.", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmPropertiesDocumentationDescription[] =
- {
- {0,
- " CMake Properties - Properties supported by CMake, "
- "the Cross-Platform Makefile Generator.", 0},
- // CMAKE_DOCUMENTATION_OVERVIEW,
- {0,
- "This is the documentation for the properties supported by CMake. "
- "Properties can have different scopes. They can either be assigned to a "
- "source file, a directory, a target or globally to CMake. By modifying the "
- "values of properties the behaviour of the buildsystem can be customized.",
- 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmCompatCommandsDocumentationDescription[] =
- {
- {0,
- " CMake Compatibility Listfile Commands - "
- "Obsolete commands supported by CMake for compatibility.", 0},
- // CMAKE_DOCUMENTATION_OVERVIEW,
- {0,
- "This is the documentation for now obsolete listfile commands from previous "
- "CMake versions, which are still supported for compatibility reasons. You "
- "should instead use the newer, faster and shinier new commands. ;-)", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationCommandsHeader[] =
- {
- {0,
- "The following commands are available in CMakeLists.txt code:", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationGlobalPropertiesHeader[] =
- {
- {0,
- "The following global properties are available in CMakeLists.txt code:", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationDirectoryPropertiesHeader[] =
- {
- {0
- ,"The following directory properties are available in CMakeLists.txt code:"
- ,0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationTargetPropertiesHeader[] =
- {
- {0,
- "The following target properties are available in CMakeLists.txt code:", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationTestPropertiesHeader[] =
- {
- {0
- ,"The following properties for tests are available in CMakeLists.txt code:"
- ,0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationSourceFilePropertiesHeader[] =
- {
- {0
- ,"The following source file properties are available in CMakeLists.txt code:"
- , 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationVariablePropertiesHeader[] =
- {
- {0, "The following variables are available in CMakeLists.txt code:", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry
- cmDocumentationCachedVariablePropertiesHeader[] =
- {
- {0,"The following cache variables are available in CMakeLists.txt code:", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationModulesHeader[] =
- {
- {0,
- "The following modules are provided with CMake. "
- "They can be used with INCLUDE(ModuleName).", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationCustomModulesHeader[] =
- {
- {0,
- "The following modules are also available for CMake. "
- "They can be used with INCLUDE(ModuleName).", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationGeneratorsHeader[] =
- {
- {0,
- "The following generators are available on this platform:", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- static const cmDocumentationEntry cmDocumentationStandardSeeAlso[] =
- {
- {0,
- "The following resources are available to get help using CMake:", 0},
- {"Home Page",
- "http://www.cmake.org",
- "The primary starting point for learning about CMake."},
- {"Frequently Asked Questions",
- "http://www.cmake.org/Wiki/CMake_FAQ",
- "A Wiki is provided containing answers to frequently asked questions. "},
- {"Online Documentation",
- "http://www.cmake.org/HTML/Documentation.html",
- "Links to available documentation may be found on this web page."},
- {"Mailing List",
- "http://www.cmake.org/HTML/MailingLists.html",
- "For help and discussion about using cmake, a mailing list is provided at "
- "[email protected]. "
- "The list is member-post-only but one may sign up on the CMake web page. "
- "Please first read the full documentation at "
- "http://www.cmake.org before posting questions to the list."},
- {0,
- "Summary of helpful links:\n"
- " Home: http://www.cmake.org\n"
- " Docs: http://www.cmake.org/HTML/Documentation.html\n"
- " Mail: http://www.cmake.org/HTML/MailingLists.html\n"
- " FAQ: http://www.cmake.org/Wiki/CMake_FAQ\n"
- , 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- const cmDocumentationEntry cmDocumentationAuthor[] =
- {
- {0,
- "This manual page was generated by the \"--help-man\" option.", 0},
- {0,0,0}
- };
- //----------------------------------------------------------------------------
- const cmDocumentationEntry cmDocumentationCopyright[] =
- {
- {0,
- "Copyright (c) 2002 Kitware, Inc., Insight Consortium. "
- "All rights reserved.", 0},
- {0,
- "Redistribution and use in source and binary forms, with or without "
- "modification, are permitted provided that the following conditions are "
- "met:", 0},
- {"",
- "Redistributions of source code must retain the above copyright notice, "
- "this list of conditions and the following disclaimer.", 0},
- {"",
- "Redistributions in binary form must reproduce the above copyright "
- "notice, this list of conditions and the following disclaimer in the "
- "documentation and/or other materials provided with the distribution.",
- 0},
- {"",
- "The names of Kitware, Inc., the Insight Consortium, or the names of "
- "any consortium members, or of any contributors, may not be used to "
- "endorse or promote products derived from this software without "
- "specific prior written permission.", 0},
- {"",
- "Modified source versions must be plainly marked as such, and must "
- "not be misrepresented as being the original software.", 0},
- {0,
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "
- "``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT "
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR "
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR "
- "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, "
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, "
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR "
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF "
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING "
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS "
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", 0},
- {0, 0, 0}
- };
- //----------------------------------------------------------------------------
- cmDocumentation::cmDocumentation()
- :NameSection ("Name", "NAME")
- ,UsageSection ("Usage", "SYNOPSIS")
- ,DescriptionSection ("", "DESCRIPTION")
- ,OptionsSection ("Command-Line Options", "OPTIONS")
- ,CommandsSection ("Listfile Commands", "COMMANDS")
- ,CompatCommandsSection("Compatibility Listfile Commands",
- "COMPATIBILITY COMMANDS")
- ,ModulesSection ("Standard CMake Modules", "MODULES")
- ,CustomModulesSection ("Custom CMake Modules", "CUSTOM MODULES")
- ,GeneratorsSection ("Generators", "GENERATORS")
- ,SeeAlsoSection ("See Also", "SEE ALSO")
- ,CopyrightSection ("Copyright", "COPYRIGHT")
- ,AuthorSection ("Author", "AUTHOR")
- ,GlobalPropertiesSection ("Standard Properties", "GLOBAL PROPERTIES")
- ,DirectoryPropertiesSection ("Directory Properties",
- "DIRECTORY PROPERTIES")
- ,TargetPropertiesSection ("Target Properties", "TARGET PROPERTIES")
- ,TestPropertiesSection ("Test Properties", "TEST PROPERTIES")
- ,SourceFilePropertiesSection ("Sourcefile Properties",
- "SOURCEFILE PROPERTIES")
- ,VariablePropertiesSection ("Variables", "VARIABLES")
- ,CachedVariablePropertiesSection("Cached Variables", "CACHE VARIABLES")
- ,CurrentFormatter(0)
- {
- this->SetForm(TextForm);
- this->PropertySections[cmProperty::GLOBAL] = &this->GlobalPropertiesSection;
- this->PropertySections[cmProperty::DIRECTORY] =
- &this->DirectoryPropertiesSection;
- this->PropertySections[cmProperty::TARGET] = &this->TargetPropertiesSection;
- this->PropertySections[cmProperty::TEST] = &this->TestPropertiesSection;
- this->PropertySections[cmProperty::SOURCE_FILE] =
- &this->SourceFilePropertiesSection;
- this->PropertySections[cmProperty::VARIABLE] =
- &this->VariablePropertiesSection;
- this->PropertySections[cmProperty::CACHED_VARIABLE] =
- &this->CachedVariablePropertiesSection;
- }
- //----------------------------------------------------------------------------
- cmDocumentation::~cmDocumentation()
- {
- for(std::vector< char* >::iterator i = this->ModuleStrings.begin();
- i != this->ModuleStrings.end(); ++i)
- {
- delete [] *i;
- }
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintCopyright(std::ostream& os)
- {
- for(const cmDocumentationEntry* op = cmDocumentationCopyright;
- op->brief; ++op)
- {
- if(op->name)
- {
- os << " * ";
- this->TextFormatter.SetIndent(" ");
- this->TextFormatter.PrintColumn(os, op->brief);
- }
- else
- {
- this->TextFormatter.SetIndent("");
- this->TextFormatter.PrintColumn(os, op->brief);
- }
- os << "\n";
- }
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintVersion(std::ostream& os)
- {
- os << this->GetNameString() << " version "
- << cmVersion::GetCMakeVersion() << "\n";
- return true;
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::AddSection(const char* name,
- const cmDocumentationEntry* d)
- {
- this->Names.push_back(name);
- this->Sections.push_back(d);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::AddSection(const cmSection& section)
- {
- if (!section.IsEmpty())
- {
- this->Names.push_back(section.GetName(this->CurrentFormatter->GetForm()));
- this->Sections.push_back(section.GetEntries());
- }
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::ClearSections()
- {
- this->Names.erase(this->Names.begin(), this->Names.end());
- this->Sections.erase(this->Sections.begin(), this->Sections.end());
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentation(Type ht, std::ostream& os)
- {
- if ((this->CurrentFormatter->GetForm() != HTMLForm)
- && (this->CurrentFormatter->GetForm() != ManForm))
- {
- this->PrintVersion(os);
- }
- switch (ht)
- {
- case cmDocumentation::Usage:
- return this->PrintDocumentationUsage(os);
- case cmDocumentation::Single:
- return this->PrintDocumentationSingle(os);
- case cmDocumentation::SingleModule:
- return this->PrintDocumentationSingleModule(os);
- case cmDocumentation::SingleProperty:
- return this->PrintDocumentationSingleProperty(os);
- case cmDocumentation::List:
- return this->PrintDocumentationList(os);
- case cmDocumentation::ModuleList:
- return this->PrintModuleList(os);
- case cmDocumentation::PropertyList:
- return this->PrintPropertyList(os);
- case cmDocumentation::Full:
- return this->PrintDocumentationFull(os);
- case cmDocumentation::Modules:
- return this->PrintDocumentationModules(os);
- case cmDocumentation::CustomModules:
- return this->PrintDocumentationCustomModules(os);
- case cmDocumentation::Properties:
- return this->PrintDocumentationProperties(os);
- case cmDocumentation::Commands:
- return this->PrintDocumentationCurrentCommands(os);
- case cmDocumentation::CompatCommands:
- return this->PrintDocumentationCompatCommands(os);
- case cmDocumentation::Copyright:
- return this->PrintCopyright(os);
- case cmDocumentation::Version:
- return true;
- default: return false;
- }
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::CreateModulesSection()
- {
- std::string cmakeModules = this->CMakeRoot;
- cmakeModules += "/Modules";
- cmsys::Directory dir;
- dir.Load(cmakeModules.c_str());
- if (dir.GetNumberOfFiles() > 0)
- {
- this->ModulesSection.Append(cmDocumentationModulesHeader[0]);
- this->CreateModuleDocsForDir(dir, this->ModulesSection);
- cmDocumentationEntry e = { 0, 0, 0 };
- this->ModulesSection.Append(e);
- }
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::CreateCustomModulesSection()
- {
- bool sectionHasHeader = false;
- std::vector<std::string> dirs;
- cmSystemTools::ExpandListArgument(this->CMakeModulePath, dirs);
- for(std::vector<std::string>::const_iterator dirIt = dirs.begin();
- dirIt != dirs.end();
- ++dirIt)
- {
- cmsys::Directory dir;
- dir.Load(dirIt->c_str());
- if (dir.GetNumberOfFiles() > 0)
- {
- if (!sectionHasHeader)
- {
- this->CustomModulesSection.Append(
- cmDocumentationCustomModulesHeader[0]);
- sectionHasHeader = true;
- }
- this->CreateModuleDocsForDir(dir, this->CustomModulesSection);
- }
- }
- if(sectionHasHeader)
- {
- cmDocumentationEntry e = { 0, 0, 0 };
- this->CustomModulesSection.Append(e);
- }
- return true;
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::CreateModuleDocsForDir(cmsys::Directory& dir,
- cmSection &moduleSection)
- {
- for(unsigned int i = 0; i < dir.GetNumberOfFiles(); ++i)
- {
- std::string fname = dir.GetFile(i);
- if(fname.length() > 6)
- {
- if(fname.substr(fname.length()-6, 6) == ".cmake")
- {
- std::string moduleName = fname.substr(0, fname.length()-6);
- if (this->ModulesFound.find(moduleName) == this->ModulesFound.end())
- {
- this->ModulesFound.insert(moduleName);
- std::string path = dir.GetPath();
- path += "/";
- path += fname;
- this->CreateSingleModule(path.c_str(), moduleName.c_str(),
- moduleSection);
- }
- }
- }
- }
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::CreateSingleModule(const char* fname,
- const char* moduleName,
- cmSection &moduleSection)
- {
- std::ifstream fin(fname);
- if(!fin)
- {
- std::cerr << "Internal error: can not open module." << fname << std::endl;
- return false;
- }
- std::string line;
- std::string text;
- std::string brief;
- brief = " ";
- bool newParagraph = true;
- while ( fin && cmSystemTools::GetLineFromStream(fin, line) )
- {
- if(line.size() && line[0] == '#')
- {
- // blank line
- if(line.size() <= 2)
- {
- text += "\n";
- newParagraph = true;
- }
- else if(line[2] == '-')
- {
- brief = line.c_str()+4;
- }
- else
- {
- // two spaces
- if(line[1] == ' ' && line[2] == ' ')
- {
- if(!newParagraph)
- {
- text += "\n";
- newParagraph = true;
- }
- // Skip #, and leave space for preformatted
- text += line.c_str()+1;
- text += "\n";
- }
- else if(line[1] == ' ')
- {
- if(!newParagraph)
- {
- text += " ";
- }
- newParagraph = false;
- // skip # and space
- text += line.c_str()+2;
- }
- else
- {
- if(!newParagraph)
- {
- text += " ";
- }
- newParagraph = false;
- // skip #
- text += line.c_str()+1;
- }
- }
- }
- else
- {
- if(text.length() < 2 && brief.length() == 1)
- {
- return false;
- }
- char* pname = strcpy(new char[strlen(moduleName)+1], moduleName);
- char* ptext = strcpy(new char[text.length()+1], text.c_str());
- this->ModuleStrings.push_back(pname);
- this->ModuleStrings.push_back(ptext);
- char* pbrief = strcpy(new char[brief.length()+1], brief.c_str());
- this->ModuleStrings.push_back(pbrief);
- cmDocumentationEntry e = { pname, pbrief, ptext };
- moduleSection.Append(e);
- return true;
- }
- }
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintRequestedDocumentation(std::ostream& os)
- {
- bool result = true;
-
- // Loop over requested documentation types.
- for(std::vector<RequestedHelpItem>::const_iterator
- i = this->RequestedHelpItems.begin();
- i != this->RequestedHelpItems.end();
- ++i)
- {
- this->SetForm(i->HelpForm);
- this->CurrentArgument = i->Argument;
- // If a file name was given, use it. Otherwise, default to the
- // given stream.
- std::ofstream* fout = 0;
- std::ostream* s = &os;
- if(i->Filename.length() > 0)
- {
- fout = new std::ofstream(i->Filename.c_str(), std::ios::out);
- if(fout)
- {
- s = fout;
- }
- else
- {
- result = false;
- }
- }
-
- // Print this documentation type to the stream.
- if(!this->PrintDocumentation(i->HelpType, *s) || !*s)
- {
- result = false;
- }
-
- // Close the file if we wrote one.
- if(fout)
- {
- delete fout;
- }
- }
- return result;
- }
- #define GET_OPT_ARGUMENT(target) \
- if((i+1 < argc) && !this->IsOption(argv[i+1])) \
- { \
- target = argv[i+1]; \
- i = i+1; \
- };
- cmDocumentation::Form cmDocumentation::GetFormFromFilename(
- const std::string& filename)
- {
- std::string ext = cmSystemTools::GetFilenameExtension(filename);
- ext = cmSystemTools::UpperCase(ext);
- if ((ext == ".HTM") || (ext == ".HTML"))
- {
- return cmDocumentation::HTMLForm;
- }
- // ".1" to ".9" should be manpages
- if ((ext.length()==2) && (ext[1] >='1') && (ext[1]<='9'))
- {
- return cmDocumentation::ManForm;
- }
- return cmDocumentation::TextForm;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::CheckOptions(int argc, const char* const* argv)
- {
- // Providing zero arguments gives usage information.
- if(argc == 1)
- {
- RequestedHelpItem help;
- help.HelpType = cmDocumentation::Usage;
- help.HelpForm = cmDocumentation::UsageForm;
- this->RequestedHelpItems.push_back(help);
- return true;
- }
- // Search for supported help options.
- bool result = false;
- for(int i=1; i < argc; ++i)
- {
- RequestedHelpItem help;
- // Check if this is a supported help option.
- if((strcmp(argv[i], "-help") == 0) ||
- (strcmp(argv[i], "--help") == 0) ||
- (strcmp(argv[i], "/?") == 0) ||
- (strcmp(argv[i], "-usage") == 0) ||
- (strcmp(argv[i], "-h") == 0) ||
- (strcmp(argv[i], "-H") == 0))
- {
- help.HelpType = cmDocumentation::Usage;
- help.HelpForm = cmDocumentation::UsageForm;
- GET_OPT_ARGUMENT(help.Argument);
- help.Argument = cmSystemTools::UpperCase(help.Argument);
- // special case for single command
- if (!help.Argument.empty())
- {
- help.HelpType = cmDocumentation::Single;
- }
- }
- else if(strcmp(argv[i], "--help-properties") == 0)
- {
- help.HelpType = cmDocumentation::Properties;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-modules") == 0)
- {
- help.HelpType = cmDocumentation::Modules;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-custom-modules") == 0)
- {
- help.HelpType = cmDocumentation::CustomModules;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-commands") == 0)
- {
- help.HelpType = cmDocumentation::Commands;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-compatcommands") == 0)
- {
- help.HelpType = cmDocumentation::CompatCommands;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-full") == 0)
- {
- help.HelpType = cmDocumentation::Full;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-html") == 0)
- {
- help.HelpType = cmDocumentation::Full;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = cmDocumentation::HTMLForm;
- }
- else if(strcmp(argv[i], "--help-man") == 0)
- {
- help.HelpType = cmDocumentation::Full;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = cmDocumentation::ManForm;
- }
- else if(strcmp(argv[i], "--help-command") == 0)
- {
- help.HelpType = cmDocumentation::Single;
- GET_OPT_ARGUMENT(help.Argument);
- GET_OPT_ARGUMENT(help.Filename);
- help.Argument = cmSystemTools::UpperCase(help.Argument);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-module") == 0)
- {
- help.HelpType = cmDocumentation::SingleModule;
- GET_OPT_ARGUMENT(help.Argument);
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-property") == 0)
- {
- help.HelpType = cmDocumentation::SingleProperty;
- GET_OPT_ARGUMENT(help.Argument);
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = this->GetFormFromFilename(help.Filename);
- }
- else if(strcmp(argv[i], "--help-command-list") == 0)
- {
- help.HelpType = cmDocumentation::List;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = cmDocumentation::TextForm;
- }
- else if(strcmp(argv[i], "--help-module-list") == 0)
- {
- help.HelpType = cmDocumentation::ModuleList;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = cmDocumentation::TextForm;
- }
- else if(strcmp(argv[i], "--help-property-list") == 0)
- {
- help.HelpType = cmDocumentation::PropertyList;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = cmDocumentation::TextForm;
- }
- else if(strcmp(argv[i], "--copyright") == 0)
- {
- help.HelpType = cmDocumentation::Copyright;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = cmDocumentation::UsageForm;
- }
- else if((strcmp(argv[i], "--version") == 0) ||
- (strcmp(argv[i], "-version") == 0) ||
- (strcmp(argv[i], "/V") == 0))
- {
- help.HelpType = cmDocumentation::Version;
- GET_OPT_ARGUMENT(help.Filename);
- help.HelpForm = cmDocumentation::UsageForm;
- }
- if(help.HelpType != None)
- {
- // This is a help option. See if there is a file name given.
- result = true;
- this->RequestedHelpItems.push_back(help);
- }
- }
- return result;
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::Print(Form f, std::ostream& os)
- {
- this->SetForm(f);
- Print(os);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::Print(std::ostream& os)
- {
- for(unsigned int i=0; i < this->Sections.size(); ++i)
- {
- this->CurrentFormatter->PrintSection(os,this->Sections[i], this->Names[i]);
- }
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::SetName(const char* name)
- {
- this->NameString = name?name:"";
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::SetNameSection(const cmDocumentationEntry* section)
- {
- this->NameSection.Set(0, section, 0);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::SetUsageSection(const cmDocumentationEntry* section)
- {
- this->UsageSection.Set(0, section, 0);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation
- ::SetDescriptionSection(const cmDocumentationEntry* section)
- {
- this->DescriptionSection.Set(0, section, 0);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::SetOptionsSection(const cmDocumentationEntry* section)
- {
- this->OptionsSection.Set(0, section, cmDocumentationStandardOptions);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::SetCommandsSection(const cmDocumentationEntry* section)
- {
- this->CommandsSection.Set(cmDocumentationCommandsHeader, section, 0);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::SetCompatCommandsSection(const cmDocumentationEntry*
- section)
- {
- this->CompatCommandsSection.Set(cmDocumentationCommandsHeader, section, 0);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation
- ::SetPropertiesSection(const cmDocumentationEntry* section,
- cmProperty::ScopeType type)
- {
- switch(type)
- {
- case cmProperty::GLOBAL:
- this->GlobalPropertiesSection.Set(
- cmDocumentationGlobalPropertiesHeader, section, 0);
- break;
- case cmProperty::DIRECTORY:
- this->DirectoryPropertiesSection.Set(
- cmDocumentationDirectoryPropertiesHeader, section, 0);
- break;
- case cmProperty::TARGET:
- this->TargetPropertiesSection.Set(
- cmDocumentationTargetPropertiesHeader, section, 0);
- break;
- case cmProperty::TEST:
- this->TestPropertiesSection.Set(
- cmDocumentationTestPropertiesHeader, section, 0);
- break;
- case cmProperty::SOURCE_FILE:
- this->SourceFilePropertiesSection.Set(
- cmDocumentationSourceFilePropertiesHeader, section, 0);
- break;
- case cmProperty::VARIABLE:
- this->VariablePropertiesSection.Set(
- cmDocumentationVariablePropertiesHeader, section, 0);
- break;
- case cmProperty::CACHED_VARIABLE:
- this->CachedVariablePropertiesSection.Set(
- cmDocumentationCachedVariablePropertiesHeader, section, 0);
- break;
- default:
- break;
- }
- }
- //----------------------------------------------------------------------------
- void cmDocumentation
- ::SetGeneratorsSection(const cmDocumentationEntry* section)
- {
- this->GeneratorsSection.Set(cmDocumentationGeneratorsHeader, section, 0);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::SetSeeAlsoList(const cmDocumentationEntry* also)
- {
- this->SeeAlsoSection.Clear();
- this->SeeAlsoString = ".B ";
- for(const cmDocumentationEntry* i = also; i->brief; ++i)
- {
- this->SeeAlsoString += i->brief;
- this->SeeAlsoString += (i+1)->brief? "(1), ":"(1)";
- }
- cmDocumentationEntry e = {0, 0, 0};
- e.brief = this->SeeAlsoString.c_str();
- this->SeeAlsoSection.Append(e);
- for(const cmDocumentationEntry* i = cmDocumentationStandardSeeAlso;
- i->brief; ++i)
- {
- this->SeeAlsoSection.Append(*i);
- }
- e.brief = 0;
- this->SeeAlsoSection.Append(e);
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationSingle(std::ostream& os)
- {
- if(this->CommandsSection.IsEmpty())
- {
- os << "Internal error: commands list is empty." << std::endl;
- return false;
- }
- if(this->CurrentArgument.length() == 0)
- {
- os << "Argument --help-command needs a command name.\n";
- return false;
- }
- for(const cmDocumentationEntry* entry = this->CommandsSection.GetEntries();
- entry->brief; ++entry)
- {
- if(entry->name && this->CurrentArgument == entry->name)
- {
- this->PrintDocumentationCommand(os, entry);
- return true;
- }
- }
- for(const cmDocumentationEntry*
- entry = this->CompatCommandsSection.GetEntries();
- entry->brief;
- ++entry)
- {
- if(entry->name && this->CurrentArgument == entry->name)
- {
- this->PrintDocumentationCommand(os, entry);
- return true;
- }
- }
- // Argument was not a command. Complain.
- os << "Argument \"" << this->CurrentArgument.c_str()
- << "\" to --help-command is not a CMake command. "
- << "Use --help-command-list to see all commands.\n";
- return false;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationSingleModule(std::ostream& os)
- {
- if(this->CurrentArgument.length() == 0)
- {
- os << "Argument --help-module needs a module name.\n";
- return false;
- }
-
- std::string moduleName;
- // find the module
- std::vector<std::string> dirs;
- cmSystemTools::ExpandListArgument(this->CMakeModulePath, dirs);
- for(std::vector<std::string>::const_iterator dirIt = dirs.begin();
- dirIt != dirs.end();
- ++dirIt)
- {
- moduleName = *dirIt;
- moduleName += "/";
- moduleName += this->CurrentArgument;
- moduleName += ".cmake";
- if(cmSystemTools::FileExists(moduleName.c_str()))
- {
- break;
- }
- moduleName = "";
- }
- if (moduleName.empty())
- {
- moduleName = this->CMakeRoot;
- moduleName += "/Modules/";
- moduleName += this->CurrentArgument;
- moduleName += ".cmake";
- if(!cmSystemTools::FileExists(moduleName.c_str()))
- {
- moduleName = "";
- }
- }
- if(!moduleName.empty()
- && this->CreateSingleModule(moduleName.c_str(),
- this->CurrentArgument.c_str(),
- this->ModulesSection))
- {
- this->PrintDocumentationCommand(os, this->ModulesSection.GetEntries());
- os << "\n Defined in: ";
- os << moduleName << "\n";
- return true;
- }
- // Argument was not a module. Complain.
- os << "Argument \"" << this->CurrentArgument.c_str()
- << "\" to --help-module is not a CMake module.\n";
- return false;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationSingleProperty(std::ostream& os)
- {
- if(this->GlobalPropertiesSection.IsEmpty())
- {
- os << "Internal error: properties list is empty." << std::endl;
- return false;
- }
- if(this->CurrentArgument.length() == 0)
- {
- os << "Argument --help-property needs a property name.\n";
- return false;
- }
- for(std::map<cmProperty::ScopeType, cmSection*>::const_iterator
- sectionIt = this->PropertySections.begin();
- sectionIt != this->PropertySections.end();
- ++sectionIt)
- {
- for(const cmDocumentationEntry*
- entry = sectionIt->second->GetEntries(); entry->brief; ++entry)
- {
- if(entry->name && this->CurrentArgument == entry->name)
- {
- this->PrintDocumentationCommand(os, entry);
- return true;
- }
- }
- }
- // Argument was not a command. Complain.
- os << "Argument \"" << this->CurrentArgument.c_str()
- << "\" to --help-property is not a CMake property. "
- << "Use --help-property-list to see all properties.\n";
- return false;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationList(std::ostream& os)
- {
- if(this->CommandsSection.IsEmpty())
- {
- os << "Internal error: commands list is empty." << std::endl;
- return false;
- }
- for(const cmDocumentationEntry* entry = this->CommandsSection.GetEntries();
- entry->brief; ++entry)
- {
- if(entry->name)
- {
- os << entry->name << std::endl;
- }
- }
- os << "\nCompatibility commands:" << std::endl;
- for(const cmDocumentationEntry*
- entry = this->CompatCommandsSection.GetEntries();
- entry->brief;
- ++entry)
- {
- if(entry->name)
- {
- os << entry->name << std::endl;
- }
- }
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintPropertyList(std::ostream& os)
- {
- if(this->GlobalPropertiesSection.IsEmpty())
- {
- os << "Internal error: properties list is empty." << std::endl;
- return false;
- }
- for(const cmDocumentationEntry*
- entry = this->GlobalPropertiesSection.GetEntries();
- entry->brief;
- ++entry)
- {
- if(entry->name)
- {
- os << entry->name << std::endl;
- }
- }
- for(std::map<cmProperty::ScopeType, cmSection*>::const_iterator
- sectionIt = this->PropertySections.begin();
- sectionIt != this->PropertySections.end();
- ++sectionIt)
- {
- for(const cmDocumentationEntry*
- entry = sectionIt->second->GetEntries(); entry->brief; ++entry)
- {
- if(entry->name)
- {
- os << entry->name << std::endl;
- }
- }
- }
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintModuleList(std::ostream& os)
- {
- this->CreateCustomModulesSection();
- this->CreateModulesSection();
- if(this->ModulesSection.IsEmpty())
- {
- os << "Internal error: modules list is empty." << std::endl;
- return false;
- }
- for(const cmDocumentationEntry* entry = this->ModulesSection.GetEntries();
- entry->brief; ++entry)
- {
- if(entry->name)
- {
- os << entry->name << std::endl;
- }
- }
- if(!this->CustomModulesSection.IsEmpty())
- {
- os << "\nCUSTOM MODULES\n" << std::endl;
- for(const cmDocumentationEntry*
- entry = this->CustomModulesSection.GetEntries(); entry->brief; ++entry)
- {
- if(entry->name)
- {
- os << entry->name << std::endl;
- }
- }
- }
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationUsage(std::ostream& os)
- {
- this->CreateUsageDocumentation();
- this->Print(os);
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationFull(std::ostream& os)
- {
- this->CreateFullDocumentation();
- this->CurrentFormatter->PrintHeader(GetNameString(), os);
- this->Print(os);
- this->CurrentFormatter->PrintFooter(os);
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationModules(std::ostream& os)
- {
- this->CreateModulesDocumentation();
- this->CurrentFormatter->PrintHeader(GetNameString(), os);
- this->Print(os);
- this->CurrentFormatter->PrintFooter(os);
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationCustomModules(std::ostream& os)
- {
- this->CreateCustomModulesDocumentation();
- this->CurrentFormatter->PrintHeader(GetNameString(), os);
- this->Print(os);
- this->CurrentFormatter->PrintFooter(os);
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationProperties(std::ostream& os)
- {
- this->CreatePropertiesDocumentation();
- this->CurrentFormatter->PrintHeader(GetNameString(), os);
- this->Print(os);
- this->CurrentFormatter->PrintFooter(os);
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationCurrentCommands(std::ostream& os)
- {
- this->CreateCurrentCommandsDocumentation();
- this->CurrentFormatter->PrintHeader(GetNameString(), os);
- this->Print(os);
- this->CurrentFormatter->PrintFooter(os);
- return true;
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::PrintDocumentationCompatCommands(std::ostream& os)
- {
- this->CreateCompatCommandsDocumentation();
- this->CurrentFormatter->PrintHeader(GetNameString(), os);
- this->Print(os);
- this->CurrentFormatter->PrintFooter(os);
- return true;
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::PrintDocumentationCommand(std::ostream& os,
- const cmDocumentationEntry* entry)
- {
- cmDocumentationEntry singleCommandSection[3] =
- {
- {entry->name, entry->brief, entry->full},
- {0,0,0}
- };
- this->ClearSections();
- this->AddSection(0, &singleCommandSection[0]);
- this->Print(os);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::CreateUsageDocumentation()
- {
- this->ClearSections();
- this->AddSection(this->UsageSection);
- this->AddSection(this->OptionsSection);
- this->AddSection(this->GeneratorsSection);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::CreateFullDocumentation()
- {
- this->ClearSections();
- this->CreateCustomModulesSection();
- this->CreateModulesSection();
- this->AddSection(this->NameSection);
- this->AddSection(this->UsageSection);
- this->AddSection(this->DescriptionSection);
- this->AddSection(this->OptionsSection);
- this->AddSection(this->GeneratorsSection);
- this->AddSection(this->CommandsSection);
- this->AddSection(this->CompatCommandsSection);
- this->AddSection(this->ModulesSection);
- this->AddSection(this->GlobalPropertiesSection);
- this->AddSection(this->DirectoryPropertiesSection);
- this->AddSection(this->TargetPropertiesSection);
- this->AddSection(this->TestPropertiesSection);
- this->AddSection(this->SourceFilePropertiesSection);
- this->AddSection(this->VariablePropertiesSection);
- this->AddSection(this->CachedVariablePropertiesSection);
-
- this->AddSection(this->CopyrightSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationCopyright);
- if(this->CurrentFormatter->GetForm() == ManForm)
- {
- this->AddSection(this->SeeAlsoSection);
- this->AddSection(this->AuthorSection.GetName(ManForm),
- cmDocumentationAuthor);
- }
- else
- {
- this->AddSection(this->SeeAlsoSection.GetName(TextForm),
- cmDocumentationStandardSeeAlso);
- }
- }
- void cmDocumentation::CreateCurrentCommandsDocumentation()
- {
- this->ClearSections();
- this->AddSection(this->CommandsSection);
- this->AddSection(this->CopyrightSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationCopyright);
- this->AddSection(this->SeeAlsoSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationStandardSeeAlso);
- }
- void cmDocumentation::CreateCompatCommandsDocumentation()
- {
- this->ClearSections();
- this->AddSection(this->DescriptionSection.GetName(
- this->CurrentFormatter->GetForm()),
- cmCompatCommandsDocumentationDescription);
- this->AddSection(this->CompatCommandsSection);
- this->AddSection(this->CopyrightSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationCopyright);
- this->AddSection(this->SeeAlsoSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationStandardSeeAlso);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::CreateModulesDocumentation()
- {
- this->ClearSections();
- this->CreateModulesSection();
- this->AddSection(this->DescriptionSection.GetName(
- this->CurrentFormatter->GetForm()), cmModulesDocumentationDescription);
- this->AddSection(this->ModulesSection);
- this->AddSection(this->CopyrightSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationCopyright);
- this->AddSection(this->SeeAlsoSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationStandardSeeAlso);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::CreateCustomModulesDocumentation()
- {
- this->ClearSections();
- this->CreateCustomModulesSection();
- this->AddSection(this->DescriptionSection.GetName(
- this->CurrentFormatter->GetForm()),
- cmCustomModulesDocumentationDescription);
- this->AddSection(this->CustomModulesSection);
- this->AddSection(this->CopyrightSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationCopyright);
- this->AddSection(this->SeeAlsoSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationStandardSeeAlso);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::CreatePropertiesDocumentation()
- {
- this->ClearSections();
- this->AddSection(this->DescriptionSection.GetName(
- this->CurrentFormatter->GetForm()), cmPropertiesDocumentationDescription);
- this->AddSection(this->GlobalPropertiesSection);
- this->AddSection(this->DirectoryPropertiesSection);
- this->AddSection(this->TargetPropertiesSection);
- this->AddSection(this->TestPropertiesSection);
- this->AddSection(this->SourceFilePropertiesSection);
- this->AddSection(this->VariablePropertiesSection);
- this->AddSection(this->CachedVariablePropertiesSection);
- this->AddSection(this->CopyrightSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationCopyright);
- this->AddSection(this->SeeAlsoSection.GetName(
- this->CurrentFormatter->GetForm()), cmDocumentationStandardSeeAlso);
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::SetForm(Form f)
- {
- switch(f)
- {
- case HTMLForm:
- this->CurrentFormatter = &this->HTMLFormatter;
- break;
- case ManForm:
- this->CurrentFormatter = &this->ManFormatter;
- break;
- case TextForm:
- this->CurrentFormatter = &this->TextFormatter;
- break;
- case UsageForm:
- this->CurrentFormatter = & this->UsageFormatter;
- break;
- }
- }
- //----------------------------------------------------------------------------
- void cmDocumentation::cmSection::Set(const cmDocumentationEntry* header,
- const cmDocumentationEntry* section,
- const cmDocumentationEntry* footer)
- {
- this->Entries.erase(this->Entries.begin(), this->Entries.end());
- if(header)
- {
- for(const cmDocumentationEntry* op = header; op->brief; ++op)
- {
- this->Entries.push_back(*op);
- }
- }
- if(section)
- {
- for(const cmDocumentationEntry* op = section; op->brief; ++op)
- {
- this->Entries.push_back(*op);
- }
- }
- if(footer)
- {
- for(const cmDocumentationEntry* op = footer; op->brief; ++op)
- {
- this->Entries.push_back(*op);
- }
- }
- cmDocumentationEntry empty = {0,0,0};
- this->Entries.push_back(empty);
- }
- //----------------------------------------------------------------------------
- const char* cmDocumentation::GetNameString() const
- {
- if(this->NameString.length() > 0)
- {
- return this->NameString.c_str();
- }
- else
- {
- return "CMake";
- }
- }
- //----------------------------------------------------------------------------
- bool cmDocumentation::IsOption(const char* arg) const
- {
- return ((arg[0] == '-') || (strcmp(arg, "/V") == 0) ||
- (strcmp(arg, "/?") == 0));
- }
|