/*========================================================================= Program: CMake - Cross-Platform Makefile Generator Module: $RCSfile: cmDumpDocumentation.cxx,v $ Language: C++ Date: $Date: 2007-12-13 22:56:49 $ Version: $Revision: 1.20 $ 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. =========================================================================*/ // Program extracts documentation describing commands from // the CMake system. // #include "cmake.h" #include "cmDocumentation.h" #include "cmVersion.h" //---------------------------------------------------------------------------- static const char *cmDocumentationName[][3] = { {0, " DumpDocumentation - Dump documentation for CMake.", 0}, {0,0,0} }; //---------------------------------------------------------------------------- static const char *cmDocumentationUsage[][3] = { {0, " DumpDocumentation [filename]", 0}, {0,0,0} }; //---------------------------------------------------------------------------- static const char *cmDocumentationDescription[][3] = { {0, "The \"DumpDocumentation\" executable is only available in the build " "tree. It is used for testing, coverage, and documentation.", 0}, CMAKE_STANDARD_INTRODUCTION, {0,0,0} }; //---------------------------------------------------------------------------- static const char *cmDocumentationOptions[][3] = { {"--all-for-coverage", "Dump all documentation to stdout. For testing.", 0}, {0,0,0} }; int DumpHTML(const char* outname) { std::ofstream fout(outname); if(!fout) { std::cerr << "failed to open output file: " << outname << "\n"; cmSystemTools::ReportLastSystemError(""); return -1; } cmake cmi; cmDocumentation doc; std::vector commands; cmi.GetCommandDocumentation(commands); cmOStringStream str; str << "Documentation for Commands of CMake " << cmVersion::GetCMakeVersion(); doc.SetSection(str.str().c_str(), commands); doc.Print(cmDocumentation::HTMLForm, fout); return 0; } int DumpForCoverageToStream(std::ostream& out) { cmake cmi; cmDocumentation doc; std::vector commands; std::vector generators; cmi.GetCommandDocumentation(commands); cmi.GetGeneratorDocumentation(generators); doc.SetSection("Name",cmDocumentationName); doc.SetSection("Usage",cmDocumentationUsage); doc.SetSection("Description",cmDocumentationDescription); doc.SetSection("options",cmDocumentationOptions); doc.SetSection("Commands",commands); doc.SetSection("Generators",generators); doc.PrintDocumentation(cmDocumentation::Usage, out); doc.PrintDocumentation(cmDocumentation::Full, out); return 0; } int DumpForCoverage(const char* outname) { if(outname) { std::ofstream fout(outname); if(!fout) { std::cerr << "failed to open output file: " << outname << "\n"; cmSystemTools::ReportLastSystemError(""); return -1; } return DumpForCoverageToStream(fout); } else { return DumpForCoverageToStream(std::cout); } } int main(int ac, char** av) { cmSystemTools::EnableMSVCDebugHook(); cmSystemTools::FindExecutableDirectory(av[0]); const char* outname = "cmake.html"; bool coverage = false; if(ac > 1) { if(strcmp(av[1], "--all-for-coverage") == 0) { coverage = true; if(ac > 2) { outname = av[2]; } else { outname = 0; } } else { outname = av[1]; } } if(coverage) { return DumpForCoverage(outname); } else { return DumpHTML(outname); } }