summaryrefslogtreecommitdiffstats
path: root/common/latex.py
diff options
context:
space:
mode:
Diffstat (limited to 'common/latex.py')
-rw-r--r--common/latex.py145
1 files changed, 145 insertions, 0 deletions
diff --git a/common/latex.py b/common/latex.py
new file mode 100644
index 0000000..186a64f
--- /dev/null
+++ b/common/latex.py
@@ -0,0 +1,145 @@
+#
+# Support for Latex used to build the PDF output format.
+#
+
+import os
+import platform
+import re
+
+package_test_preamble = ['\\newif\\ifsphinxKeepOldNames \\sphinxKeepOldNamestrue',
+ '\documentclass[a4paper,11pt,english]{report}']
+package_test_postamble = ['\\begin{document} test \\end{document}']
+package_tests = {
+ 'Bjarne' : ['\\usepackage[Bjarne]{fncychap}'],
+ 'alltt' : ['\\usepackage{alltt}'],
+ 'amsmath' : ['\\usepackage{amsmath}'],
+ 'amssymb' : ['\\usepackage{amssymb}'],
+ 'amstext' : ['\\usepackage{amstext}'],
+ 'array' : ['\\usepackage{array}'],
+ 'atbegshi' : ['\\usepackage{atbegshi}'],
+ 'babel' : ['\\usepackage{babel}'],
+ 'babel' : ['\\usepackage{babel}'],
+ 'calc' : ['\\usepackage{calc}'],
+ 'capt-of' : ['\\usepackage{capt-of}'],
+ 'charter' : ['\\usepackage{charter}'],
+ 'cmap' : ['\\usepackage{cmap}'],
+ 'color' : ['\\usepackage{color}'],
+ 'eqparbox' : ['\\usepackage{eqparbox}'],
+ 'etoolbox' : ['\\usepackage{etoolbox}'],
+ 'fancybox' : ['\\usepackage{fancybox}'],
+ 'fancyhdr' : ['\\usepackage{fancyhdr}'],
+ 'fancyvrb' : ['\\usepackage{fancyvrb}'],
+ 'float' : ['\\usepackage{float}'],
+ 'fncychap' : ['\\usepackage{fncychap}'],
+ 'fontenc' : ['\\usepackage[T1]{fontenc}'],
+ 'footnote' : ['\\usepackage{footnote}'],
+ 'framed' : ['\\usepackage{framed}'],
+ 'graphicx' : ['\\usepackage{graphicx}'],
+ 'hypcap' : ['\\usepackage{hyperref}',
+ '\\usepackage{hypcap}'],
+ 'hyperref' : ['\\usepackage{hyperref}'],
+ 'ifplatform' : ['\\usepackage{ifplatform}'],
+ 'ifthen' : ['\\usepackage{ifthen}'],
+ 'inconsolata' : ['\\usepackage{inconsolata}'],
+ 'inputenc' : ['\\usepackage{inputenc}'],
+ 'keyval' : ['\\usepackage{keyval}'],
+ 'kvoptions' : ['\\usepackage{kvoptions}'],
+ 'lato' : ['\\usepackage{lato}'],
+ 'lineno' : ['\\usepackage{lineno}'],
+ 'longtable' : ['\\usepackage{longtable}'],
+ 'makeidx' : ['\\usepackage{makeidx}'],
+ 'multirow' : ['\\usepackage{multirow}'],
+ 'parskip' : ['\\usepackage{parskip}'],
+ 'pdftexcmds' : ['\\usepackage{pdftexcmds}'],
+ 'textcomp' : ['\\usepackage{textcomp}'],
+ 'threeparttable' : ['\\usepackage{threeparttable}'],
+ 'times' : ['\\usepackage{times}'],
+ 'titlesec' : ['\\usepackage{titlesec}'],
+ 'upquote' : ['\\usepackage{upquote}'],
+ 'utf8' : ['\\usepackage[utf8]{inputenc}'],
+ 'wrapfig' : ['\\usepackage{wrapfig}'],
+ 'xcolor' : ['\\usepackage{xcolor}'],
+ 'xstring' : ['\\usepackage{xstring}'],
+}
+
+#
+# Add per host support. If there is a version clash for the same texlive
+# package create a directory, add to that directory and use the path in this
+# name here.
+#
+hosts = {
+ # All versions of CentOS until told otherwise
+ 'Linux/centos' : { '.*' : ['capt-of.sty',
+ 'eqparbox.sty',
+ 'environ.sty',
+ 'inconsolata.sty',
+ 'ifplatform.sty',
+ 'lato.sty',
+ 'trimspaces.sty',
+ 'slantsc.sty',
+ 'upquote.sty'] }
+}
+
+def tex_test(test):
+ return os.linesep.join(package_test_preamble +
+ package_tests[test] +
+ package_test_postamble)
+
+def host_name():
+ uname = os.uname()
+ if uname[0] == 'Linux':
+ distro = platform.dist()
+ name = '%s/%s' % (uname[0], distro[0])
+ version = distro[1]
+ else:
+ name = uname[0]
+ version = uname[2]
+ return name, version
+
+def local_packages():
+ host, version = host_name()
+ packages = None
+ if host in hosts:
+ for version in list(hosts[host].keys()):
+ if re.compile(version).match(version) is not None:
+ packages = hosts[host][version]
+ return packages
+
+def configure_tests(conf):
+
+ #
+ # Using a hint from ita (thank you) :
+ # https://github.com/waf-project/waf/blob/master/demos/tex/wscript
+ #
+ def build_latex_test(bld):
+ def write_tex_test(tsk):
+ tsk.outputs[0].write(tex_test(tsk.env.TEST))
+
+ test = bld.kw['tex_test']
+ bld.env.TEST = test
+
+ bld.to_log('%s.tex %s' % (test, '=' * (40 - len(test) + 5)))
+ bld.to_log(tex_test(test))
+ bld.to_log('=' * 40)
+
+ bld(rule = write_tex_test, target = 'main.tex')
+ bld(features = 'tex', type = 'pdflatex', source = 'main.tex', prompt = 0)
+
+ tests = sorted(package_tests.keys())
+ excludes = [p[:p.rfind('.')] for p in local_packages()]
+ for e in excludes:
+ if e in tests:
+ tests.remove(e)
+
+ fails = 0
+ for t in tests:
+ r = conf.test(build_fun = build_latex_test,
+ msg = "Checking for Tex package '%s'" % (t),
+ tex_test = t,
+ okmsg = 'ok',
+ errmsg = 'not found (please install)',
+ mandatory = False)
+ if r is None:
+ fails += 1
+ if fails > 0:
+ conf.fatal('There are %d Tex package failures. Please fix.' % (fails))