From b3480795c4fb890e8999fba580bb55a69fef1efb Mon Sep 17 00:00:00 2001
From: Will Schroeder <will.schroeder@kitware.com>
Date: Fri, 12 Jan 2001 12:43:00 -0500
Subject: ENH:Simple program dumps out internal documentation for CMake

---
 Source/cmDumpDocumentation.cxx | 12 ++++++++++++
 Source/cmMakefile.cxx          | 31 +++++++++++++++++++++++++++++++
 Source/cmMakefile.h            |  6 ++++++
 3 files changed, 49 insertions(+)
 create mode 100644 Source/cmDumpDocumentation.cxx

diff --git a/Source/cmDumpDocumentation.cxx b/Source/cmDumpDocumentation.cxx
new file mode 100644
index 0000000..7034e03
--- /dev/null
+++ b/Source/cmDumpDocumentation.cxx
@@ -0,0 +1,12 @@
+// Program extracts documentation describing rules from
+// the CMake system.
+// 
+#include "cmMakefile.h"
+
+int main()
+{
+  cmMakefile makefile;
+  makefile.DumpDocumentationToFile("cmake.txt");
+
+  return 0;
+}
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 05ed4d6..59f87c0 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -372,3 +372,34 @@ const char* cmMakefile::GetDefinition(const char* name)
     }
   return 0;
 }
+
+int cmMakefile::DumpDocumentationToFile(const char *fileName)
+{
+  // Open the supplied filename
+  std::ofstream f;
+  f.open(fileName, std::ios::out);
+  
+  if ( f.fail() )
+    {
+    return 0;
+    }
+  
+  // Loop over all registered rules and print out documentation
+  const char *name;
+  const char *terse;
+  const char *full;
+
+  for(StringRuleMakerMap::iterator j = m_RuleMakers.begin();
+      j != m_RuleMakers.end(); ++j)
+    {
+    name = (*j).second->GetName();
+    terse = (*j).second->TerseDocumentation();
+    full = (*j).second->FullDocumentation();
+    f << name << " - " << terse << std::endl
+      << "\t" << full << std::endl << std::endl;
+    }
+  
+
+  return 1;
+}
+
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 001ba4a..6a444b4 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -300,6 +300,12 @@ public:
   const char* GetDefineFlags()
     {return m_DefineFlags.c_str();}
 
+  /**
+   * Dump documentation to a file. If 0 is returned, the
+   * operation failed.
+   */
+  int DumpDocumentationToFile(const char *fileName);
+
 protected:
   bool m_Executables;
   std::string m_Prefix;
-- 
cgit v0.12