[PATCH 2/4] doc: add target rst2man to build man pages using rst2man

Subject: [PATCH 2/4] doc: add target rst2man to build man pages using rst2man

Date: Wed, 5 Mar 2014 10:56:33 -0400

To: notmuch@notmuchmail.org

Cc:

From: David Bremner


Many people have docutils installed, but not sphinx. Allow these
people to build the man pages.
---
 doc/Makefile.local |  7 ++++++
 doc/prerst2man.py  | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)
 create mode 100644 doc/prerst2man.py

diff --git a/doc/Makefile.local b/doc/Makefile.local
index ec23012..4719247 100644
--- a/doc/Makefile.local
+++ b/doc/Makefile.local
@@ -7,10 +7,13 @@ SPHINXOPTS    := -q -c $(dir)
 SPHINXBUILD   = sphinx-build
 DOCBUILDDIR      := $(dir)/_build
 
+prerst2man := python $(dir)/prerst2man.py
+
 # Internal variables.
 ALLSPHINXOPTS   := -d $(DOCBUILDDIR)/doctrees $(SPHINXOPTS) $(dir)
 
 .PHONY: sphinx-html sphinx-man sphinx-texinfo sphinx-info
+.PHONY: rst2man
 
 sphinx-html:
 	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(DOCBUILDDIR)/html
@@ -24,4 +27,8 @@ sphinx-texinfo:
 sphinx-info: sphinx-texinfo
 	make -C $(DOCBUILDDIR)/texinfo info
 
+# fallback target in case sphinx not installed
+rst2man:
+	$(prerst2man) $(DOCBUILDDIR)/.. $(DOCBUILDDIR)/man
+
 CLEAN := $(CLEAN) $(DOCBUILDDIR)
diff --git a/doc/prerst2man.py b/doc/prerst2man.py
new file mode 100644
index 0000000..720deb6
--- /dev/null
+++ b/doc/prerst2man.py
@@ -0,0 +1,62 @@
+from sys import argv
+from datetime import date
+from os.path import dirname, isdir
+from os import makedirs, system
+import re
+
+sourcedir = argv[1]
+outdir = argv[2]
+
+if not isdir(outdir):
+    makedirs(outdir, 0755)
+
+execfile(sourcedir + "/conf.py")
+
+
+def header(file, startdocname, command, description, authors, section):
+    file.write("""
+{0:s}
+{1:s}
+{2:s}
+
+:Date:   {3:s}
+:Version: {4:s}
+:Manual section: {5:d}
+:Manual group: {6:s}
+
+""".format(
+'-' * len(description),
+description,
+'-' * len(description),
+date.today().isoformat(), release, section, project))
+
+blankre = re.compile("^\s*$")
+for page in man_pages:
+    outdirname = outdir + '/' + dirname(page[0])
+    if not isdir(outdirname):
+        makedirs(outdirname, 0755)
+    filename = outdir + '/' + page[0] + '.rst'
+    outfile = open(filename, 'w')
+    infile = open(sourcedir + '/' + page[0] + '.rst', 'r')
+
+    # this is a crude hack. We look for the first blank line, and
+    # insert the rst2man header there.
+    #
+    # XXX consider really parsing input
+
+    count = 0
+    lines = infile.readlines()
+    for line in lines:
+        outfile.write(line)
+        if (blankre.match(line)):
+            break
+        count = count + 1
+
+    del lines[0:count + 1]
+
+    header(outfile, *page)
+
+    outfile.write("".join(lines))
+    outfile.close()
+
+    os.system('set -x; rst2man {0} {1}'.format(filename, outdir + '/' + page[0] + '.' + str(page[4])))
-- 
1.8.5.3


Thread: