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.
This commit is contained in:
David Bremner 2014-01-28 12:12:38 -04:00
parent d736260385
commit df70fc4b4b
2 changed files with 69 additions and 0 deletions

View file

@ -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)

62
doc/prerst2man.py Normal file
View file

@ -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])))