From df70fc4b4b7295f9f5c512c5e1e5c8c46a620944 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Tue, 28 Jan 2014 12:12:38 -0400 Subject: [PATCH] doc: add target rst2man to build man pages using rst2man 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 ec230125..47192473 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 00000000..720deb68 --- /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])))