From 916d29532f2491e832f5deecd68937051bd0882e Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Mon, 9 Jan 2017 23:13:02 +1100 Subject: waf: Create an XML Catalogue. --- common/waf.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) (limited to 'common/waf.py') diff --git a/common/waf.py b/common/waf.py index 33fff4d..9eb7173 100644 --- a/common/waf.py +++ b/common/waf.py @@ -86,6 +86,15 @@ def build_dir_setup(ctx, buildtype): output_node = ctx.path.get_bld().make_node(buildtype) output_dir = output_node.abspath() doctrees = os.path.join(os.path.dirname(output_dir), 'doctrees', buildtype) + # + # Gather the data for the catalogue + # + if build_dir not in ctx.catalogue: + ctx.catalogue[build_dir] = { + 'builddir': build_dir, + 'buildtype': [] + } + ctx.catalogue[build_dir]['buildtype'].append(buildtype) return build_dir, output_node, output_dir, doctrees def pdf_resources(ctx, buildtype): @@ -313,6 +322,75 @@ def cmd_configure_path(ctx): cmd_configure(ctx) +def xml_catalogue(ctx): + # + # Read the conf.py files in each directory to gather the doc details. + # + sp = sys.path[:] + for t in ctx.cur_tasks: + if t.get_cwd().is_src(): + doc = os.path.basename(t.get_cwd().get_src().abspath()) + sys.path.insert(0, str(t.get_cwd())) + # + # Import using the imp API so the module is reloaded for us. + # + import imp + mf = imp.find_module('conf') + try: + bconf = imp.load_module('bconf', mf[0], mf[1], mf[2]) + finally: + mf[0].close() + sys.path = sp[:] + if doc in ctx.catalogue: + ctx.catalogue[doc]['title'] = bconf.project + ctx.catalogue[doc]['version'] = bconf.version + ctx.catalogue[doc]['release'] = bconf.release + ctx.catalogue[doc]['latex'] = bconf.latex_documents[0][1] + bconf = None + + import xml.dom.minidom as xml + cat = xml.Document() + + root = cat.createElement('rtems-docs') + root.setAttribute('date', 'today') + cat.appendChild(root) + + for d in ctx.catalogue: + doc = cat.createElement('doc') + name = cat.createElement('name') + text = cat.createTextNode(d) + name.appendChild(text) + title = cat.createElement('title') + text = cat.createTextNode(ctx.catalogue[d]['title']) + title.appendChild(text) + release = cat.createElement('release') + text = cat.createTextNode(ctx.catalogue[d]['release']) + release.appendChild(text) + version = cat.createElement('version') + text = cat.createTextNode(ctx.catalogue[d]['version']) + version.appendChild(text) + doc.appendChild(name) + doc.appendChild(title) + doc.appendChild(release) + doc.appendChild(version) + for b in ctx.catalogue[d]['buildtype']: + if b == 'latex': + b = 'pdf' + ref = ctx.catalogue[d]['latex'].replace('.tex', '.pdf') + elif b == 'html': + ref = '%s/index.html' % (d) + else: + ref = 'undefined' + output = cat.createElement(b) + text = cat.createTextNode(ref) + output.appendChild(text) + doc.appendChild(output) + root.appendChild(doc) + + catnode = ctx.path.get_bld().make_node('catalogue.xml') + catnode.write(cat.toprettyxml(indent = ' ' * 2, newl = os.linesep)) + + cat.unlink() CONF_FRAG = """ sys.path.append(os.path.abspath('../../common/')) -- cgit v1.2.3