• B
    Documentation: fix build with Asciidoctor 2 · f6461b82
    brian m. carlson 提交于
    Our documentation toolchain has traditionally been built around DocBook
    4.5.  This version of DocBook is the last DTD-based version of DocBook.
    In 2009, DocBook 5 was introduced using namespaces and its syntax is
    expressed in RELAX NG, which is more expressive and allows a wider
    variety of syntax forms.
    
    Asciidoctor, one of the alternatives for building our documentation,
    moved support for DocBook 4.5 out of core in its recent 2.0 release and
    now only supports DocBook 5 in the main release.  The DocBoook 4.5
    converter is still available as a separate component, but this is not
    available in most distro packages.  This would not be a problem but for
    the fact that we use xmlto, which is still stuck in the DocBook 4.5 era.
    
    xmlto performs DTD validation as part of the build process.  This is not
    problematic for DocBook 4.5, which has a valid DTD, but it clearly
    cannot work for DocBook 5, since no DTD can adequately express its full
    syntax.  In addition, even if xmlto did support RELAX NG validation,
    that wouldn't be sufficient because it uses the libxml2-based xmllint to
    do so, which has known problems with validating interleaves in RELAX NG.
    
    Fortunately, there's an easy way forward: ask Asciidoctor to use its
    DocBook 5 backend and tell xmlto to skip validation.  Asciidoctor has
    supported DocBook 5 since v0.1.4 in 2013 and xmlto has supported
    skipping validation for probably longer than that.
    
    We also need to teach xmlto how to use the namespaced DocBook XSLT
    stylesheets instead of the non-namespaced ones it usually uses.
    Normally these stylesheets are interchangeable, but the non-namespaced
    ones have a bug that causes them not to strip whitespace automatically
    from certain elements when namespaces are in use.  This results in
    additional whitespace at the beginning of list elements, which is
    jarring and unsightly.
    
    We can do this by passing a custom stylesheet with the -x option that
    simply imports the namespaced stylesheets via a URL.  Any system with
    support for XML catalogs will automatically look this URL up and
    reference a local copy instead without us having to know where this
    local copy is located.  We know that anyone using xmlto will already
    have catalogs set up properly since the DocBook 4.5 DTD used during
    validation is also looked up via catalogs.  All major Linux
    distributions distribute the necessary stylesheets and have built-in
    catalog support, and Homebrew does as well, albeit with a requirement to
    set an environment variable to enable catalog support.
    
    On the off chance that someone lacks support for catalogs, it is
    possible for xmlto (via xmllint) to download the stylesheets from the
    URLs in question, although this will likely perform poorly enough to
    attract attention.  People still have the option of using the prebuilt
    documentation that we ship, so happily this should not be an impediment.
    
    Finally, we need to filter out some messages from other stylesheets that
    occur when invoking dblatex in the CI job.  This tool strips namespaces
    much like the unnamespaced DocBook stylesheets and prints similar
    messages.  If we permit these messages to be printed to standard error,
    our documentation CI job will fail because we check standard error for
    unexpected output.  Due to dblatex's reliance on Python 2, we may need
    to revisit its use in the future, in which case this problem may go
    away, but this can be delayed until a future patch.
    
    The final message we filter is due to libxslt on modern Debian and
    Ubuntu.  The patch which they use to implement reproducible ID
    generation also prints messages about the ID generation.  While this
    doesn't affect our current CI images since they use Ubuntu 16.04 which
    lacks this patch, if we upgrade to Ubuntu 18.04 or a modern Debian,
    these messages will appear and, like the above messages, cause a CI
    failure.
    Signed-off-by: Nbrian m. carlson <sandals@crustytoothpaste.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    f6461b82
install-dependencies.sh 1.9 KB