common: docs: skip the tmpl step completely
Edward Hervey
bilboed at bilboed.com
Tue Jun 9 01:29:23 PDT 2015
Hi,
Looks like this breaks make distcheck:
https://ci.gstreamer.net/job/GStreamer-master-distcheck/1743/console
On Mon, 2015-06-08 at 14:07 -0700, Stefan Kost wrote:
> Module: common
> Branch: master
> Commit: d9a33530a24c3ea24a6e13bd343b440c5656740e
> URL: http://cgit.freedesktop.org/gstreamer/common/commit/?id=d9a33
> 530a24c3ea24a6e13bd343b440c5656740e
>
> Author: Stefan Sauer <ensonic at users.sf.net>
> Date: Mon Jun 8 22:59:19 2015 +0200
>
> docs: skip the tmpl step completely
>
> Since all we want is to get the include into the docbook files, run
> an extra
> step to patch the generated docbook files.
>
> ---
>
> gtk-doc-plugins.mak | 16 +------
> mangle-db.py | 71 +++++++++++++++++++++++++++++
> mangle-tmpl.py | 125 -----------------------------------------
> ----------
> 3 files changed, 73 insertions(+), 139 deletions(-)
>
> diff --git a/gtk-doc-plugins.mak b/gtk-doc-plugins.mak
> index 767e55a..997a672 100644
> --- a/gtk-doc-plugins.mak
> +++ b/gtk-doc-plugins.mak
> @@ -54,11 +54,9 @@ EXTRA_DIST = \
> # maintainers and result is commited to git
> DOC_STAMPS = \
> scan-build.stamp \
> - tmpl-build.stamp \
> sgml-build.stamp \
> html-build.stamp \
> scan.stamp \
> - tmpl.stamp \
> sgml.stamp \
> html.stamp
>
> @@ -171,20 +169,9 @@ scan-build.stamp: $(HFILE_GLOB) $(EXTRA_HFILES)
> $(basefiles) scanobj-build.stamp
> --ignore-headers="$(IGNORE_HFILES)"; > \
> touch scan-build.stamp
>
> -#### generate templates; done on every build ####
> -
> -tmpl-build.stamp:
> - @echo ' DOC Building template files'
> - @$(PYTHON) \
> - $(top_srcdir)/common/mangle-tmpl.py
> $(srcdir)/$(INSPECT_DIR) tmpl
> - @touch tmpl-build.stamp
> -
> -tmpl.stamp: tmpl-build.stamp
> - @true
> -
> #### xml ####
>
> -sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB)
> $(top_srcdir)/common/plugins.xsl $(expand_content_files)
> +sgml-build.stamp: scan-build.stamp $(CFILE_GLOB)
> $(top_srcdir)/common/plugins.xsl $(expand_content_files)
> @echo ' DOC Building XML'
> @-mkdir -p xml
> @for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \
> @@ -200,6 +187,7 @@ sgml-build.stamp: tmpl.stamp scan-build.stamp
> $(CFILE_GLOB) $(top_srcdir)/common
> --output-format=xml \
> --ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \
> $(MKDB_OPTIONS)
> + @$(PYTHON) $(top_srcdir)/common/mangle-db.py xml
> @cp ../version.entities xml
> @touch sgml-build.stamp
>
> diff --git a/mangle-db.py b/mangle-db.py
> new file mode 100644
> index 0000000..463e5bc
> --- /dev/null
> +++ b/mangle-db.py
> @@ -0,0 +1,71 @@
> +# -*- Mode: Python -*-
> +# vi:si:et:sw=4:sts=4:ts=4
> +
> +"""
> +Insert includes for the element-*-details.xml files into the related
> docbook
> +files.
> +"""
> +
> +from __future__ import print_function, unicode_literals
> +
> +import codecs
> +import glob
> +import os
> +import sys
> +
> +import xml.dom.minidom
> +
> +def patch(related, details):
> + try:
> + doc = xml.dom.minidom.parse(related)
> + except IOError:
> + return
> +
> + # find the insertion point
> + elem = None
> + for e in doc.childNodes:
> + if e.nodeType == e.ELEMENT_NODE and e.localName ==
> 'refentry':
> + elem = e
> + break
> + if elem == None:
> + return
> +
> + elem2 = None
> + for e in elem.childNodes:
> + if e.nodeType == e.ELEMENT_NODE and e.localName ==
> 'refsect1':
> + id = e.getAttributeNode('id')
> + role = e.getAttributeNode('role')
> + if id and id.nodeValue.endswith('.description') and role
> and role.nodeValue == 'desc':
> + elem2 = e
> + break
> + if elem2 == None:
> + return
> +
> + # insert include
> + include = doc.createElement('include')
> + include.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude')
> + include.setAttribute('href', details)
> + fallback = doc.createElement('fallback')
> + fallback.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude'
> )
> + include.appendChild(fallback)
> + elem2.appendChild(include)
> +
> + # store patched file
> + result = codecs.open(related, mode="w", encoding="utf-8")
> + #result = open(related, "wb")
> + doc.writexml(result)
> + result.close()
> +
> +def main():
> + if not len(sys.argv) == 2:
> + sys.stderr.write('Please specify the xml/ dir')
> + sys.exit(1)
> +
> + xmldir = sys.argv[1]
> +
> + # parse all *-details.xml files and patch includes into the
> corresponding
> + # xml files
> + for details in glob.glob("%s/element-*-details.xml" % xmldir):
> + patch (details.replace("-details", ""),
> os.path.basename(details))
> +
> +main()
> diff --git a/mangle-tmpl.py b/mangle-tmpl.py
> deleted file mode 100644
> index 7a92d04..0000000
> --- a/mangle-tmpl.py
> +++ /dev/null
> @@ -1,125 +0,0 @@
> -# -*- Mode: Python -*-
> -# vi:si:et:sw=4:sts=4:ts=4
> -
> -"""
> -use the files from inspect/*.xml to create mininal tmpl/*.sgml files
> containing
> -'Short Description' and 'Long Description' to inject element details
> into the
> -docbook files produced by gtkdoc-mkdb
> -"""
> -
> -from __future__ import print_function, unicode_literals
> -
> -import glob
> -import sys
> -import os
> -
> -class Tmpl:
> - def __init__(self, filename):
> - self.filename = filename
> - self._sectionids = []
> - self._sections = {}
> -
> - def set_section(self, id, content):
> - """
> - Replace the given section id with the given content.
> - """
> - if not id in self._sectionids:
> - self._sectionids.append(id)
> - self._sections[id] = content
> -
> - def output(self):
> - """
> - Return the output of the current template in the tmpl/*.sgml
> format.
> - """
> - lines = []
> - for id in self._sectionids:
> - lines.append("<!-- ##### SECTION %s ##### -->\n" % id)
> - for line in self._sections[id]:
> - lines.append(line)
> -
> - return "".join(lines)
> -
> - def write(self):
> - """
> - Write out the template file again, backing up the previous
> one.
> - """
> - handle = open(self.filename, "w")
> - handle.write(self.output())
> - handle.close()
> -
> -import xml.dom.minidom
> -
> -def get_elements(file):
> - elements = {}
> - doc = xml.dom.minidom.parse(file)
> -
> - elem = None
> - for e in doc.childNodes:
> - if e.nodeType == e.ELEMENT_NODE and e.localName == 'plugin':
> - elem = e
> - break
> - if elem == None:
> - return None
> -
> - elem2 = None
> - for e in elem.childNodes:
> - if e.nodeType == e.ELEMENT_NODE and e.localName ==
> 'elements':
> - elem2 = e
> - break
> - if elem2 == None:
> - return None
> -
> - elem = elem2
> -
> - for e in elem.childNodes:
> - if e.nodeType == e.ELEMENT_NODE and e.localName ==
> 'element':
> - name = None
> - description = None
> -
> - for e2 in e.childNodes:
> - if e2.nodeType == e2.ELEMENT_NODE and e2.localName
> == 'name':
> - name = e2.childNodes[0].nodeValue.encode("UTF
> -8")
> - elif e2.nodeType == e2.ELEMENT_NODE and e2.localName
> == 'description':
> - if e2.childNodes:
> - description =
> e2.childNodes[0].nodeValue.encode("UTF-8")
> - else:
> - description = 'No description'
> -
> - if name != None and description != None:
> - elements[name] = {'description': description}
> -
> - return elements
> -
> -def main():
> - if not len(sys.argv) == 3:
> - sys.stderr.write('Please specify the inspect/ dir and the
> tmpl/ dir')
> - sys.exit(1)
> -
> - inspectdir = sys.argv[1]
> - tmpldir = sys.argv[2]
> -
> - if not os.path.exists (tmpldir):
> - os.mkdir(tmpldir)
> -
> - # parse all .xml files; build map of element name -> short desc
> - #for file in glob.glob("inspect/plugin-*.xml"):
> - elements = {}
> - for file in glob.glob("%s/plugin-*.xml" % inspectdir):
> - elements.update(get_elements(file))
> -
> - for element in elements.keys():
> - file = "%s/element-%s.sgml" % (tmpldir, element)
> - tmpl = Tmpl(file)
> -
> - description = elements[element]['description']
> - tmpl.set_section("Short_Description", "%s\n" % description)
> -
> - # add include for details
> - line = '<include xmlns="http://www.w3.org/2003/XInclude"
> href="' + \
> - 'element-' + element + '-details.xml">' + \
> - '<fallback xmlns="http://www.w3.org/2003/XInclude" />' +
> \
> - '</include>\n'
> - tmpl.set_section("Long_Description", line)
> - tmpl.write()
> -
> -main()
>
> _______________________________________________
> gstreamer-commits mailing list
> gstreamer-commits at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-commits
More information about the gstreamer-devel
mailing list