DocBook: Avoid building man pages repeatedly and inconsistently
commitb44158b17099ed5c7c8f4bfb7029942adbfbc318
authorBen Hutchings <ben@decadent.org.uk>
Wed, 8 Jul 2015 19:07:05 +0000 (8 20:07 +0100)
committerJonathan Corbet <corbet@lwn.net>
Fri, 10 Jul 2015 17:03:21 +0000 (10 11:03 -0600)
treebf9265f8010b3177c1f2625e0982e509f3c80e97
parentb48ed85145711b28f9024dcdaf6c0238d7b5042c
DocBook: Avoid building man pages repeatedly and inconsistently

Some kernel-doc sections are included in multiple DocBook files.  This
means the mandocs target will generate the same manual page multiple
times with different metadata (author name/address and manual title,
taken from the including DocBook file).  If it's invoked in a parallel
build, the output is nondeterminstic.

For each section that is duplicated, mark the less specific manual's
inclusion as 'extra' and exclude it during conversion to manual pages.
Use xmlif for this, as that is bundled with xmlto which we already
use.

I would have preferred to use more conventional markup for this, but
each of the following approaches failed:

1. Wrap the extra inclusions with a new element and add a template to
   the stylesheet to include/exclude them.  Unfortunately DocBook XSL
   doesn't seem to support foreign elements at an intermediate level
   in the document tree.
2. Use DocBook profiling.  This works but requires passing an absolute
   path to the profile stylesheet to xmlto, so it's not portable.
3. Use SGML marked sections.  docbook2x can handle these but xmlto
   chokes on them.

Reported-by: Jérémy Bobbio <lunar@debian.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Documentation/DocBook/Makefile
Documentation/DocBook/device-drivers.tmpl
Documentation/DocBook/gadget.tmpl
Documentation/DocBook/kernel-api.tmpl