[PATCH 2/4] doc: add target rst2man to build man pages using rst2man
David Bremner
david at tethera.net
Wed Mar 5 06:56:33 PST 2014
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
More information about the notmuch
mailing list