DocBook: Fix duplicate man pages

svn path=/dists/trunk/linux/; revision=22812
This commit is contained in:
Ben Hutchings 2015-07-08 01:00:56 +00:00
parent bea534ac5d
commit eb4b510b6d
3 changed files with 127 additions and 0 deletions

1
debian/changelog vendored
View File

@ -2,6 +2,7 @@ linux (4.1.1-1~exp2) UNRELEASED; urgency=medium
* Fix more issues that prevent a reproducible build:
- linux-doc: DocBook: generate consistent IDs
- linux-doc: DocBook: Fix duplicate man pages
-- Ben Hutchings <ben@decadent.org.uk> Tue, 07 Jul 2015 16:25:05 +0100

View File

@ -0,0 +1,125 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Wed, 08 Jul 2015 00:32:38 +0100
Subject: DocBook: Fix duplicate man pages
Bug-Debian: https://bugs.debian.org/769844
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.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/Documentation/DocBook/Makefile
+++ b/Documentation/DocBook/Makefile
@@ -56,6 +56,13 @@ htmldocs: $(HTML)
MAN := $(patsubst %.xml, %.9, $(BOOKS))
mandocs: $(MAN)
+ @dups=$(sed -n 's/.*<refname>\([^<]*\)<\/refname>.*/\1/p' \
+ $(patsubst %, %.noextra, $(BOOKS)))| sort | uniq -d); \
+ if [ -n "$$dups" ]; then \
+ echo >&2 "The following manual pages are generated more than once:"; \
+ printf >&2 '%s\n' "$$dups"; \
+ exit 1; \
+ fi
find $(obj)/man -name '*.9' | xargs gzip -nf
installmandocs: mandocs
@@ -150,7 +157,7 @@ quiet_cmd_db2html = HTML $@
cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi
quiet_cmd_db2man = MAN $@
- cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; fi
+ cmd_db2man = if grep -q refentry $<; then xmlif excludeextra=1 <$< >$<.noextra && xmlto man $(XMLTOFLAGS) -o $(obj)/man $<.noextra ; fi
%.9 : %.xml
@(which xmlto > /dev/null 2>&1) || \
(echo "*** You need to install xmlto ***"; \
@@ -217,6 +224,7 @@ clean-files := $(DOCBOOKS) \
$(patsubst %.xml, %.ps, $(DOCBOOKS)) \
$(patsubst %.xml, %.pdf, $(DOCBOOKS)) \
$(patsubst %.xml, %.html, $(DOCBOOKS)) \
+ $(patsubst %, %.noextra, $(DOCBOOKS)) \
$(patsubst %.xml, %.9, $(DOCBOOKS)) \
$(index)
--- a/Documentation/DocBook/gadget.tmpl
+++ b/Documentation/DocBook/gadget.tmpl
@@ -488,7 +488,10 @@ These are the same types and constants u
side drivers (and usbcore).
</para>
+<?xmlif if excludeextra='1'?>
+<?xmlif else?>
!Iinclude/linux/usb/ch9.h
+<?xmlif fi?>
</sect1>
<sect1 id="core"><title>Core Objects and Methods</title>
--- a/Documentation/DocBook/kernel-api.tmpl
+++ b/Documentation/DocBook/kernel-api.tmpl
@@ -58,8 +58,11 @@
<sect1><title>String Conversions</title>
!Elib/vsprintf.c
+<?xmlif if excludeextra='1'?>
+<?xmlif else?>
!Finclude/linux/kernel.h kstrtol
!Finclude/linux/kernel.h kstrtoul
+<?xmlif fi?>
!Elib/kstrtox.c
</sect1>
<sect1><title>String Manipulation</title>
@@ -178,7 +181,10 @@ X!Ekernel/module.c
<chapter id="hardware">
<title>Hardware Interfaces</title>
<sect1><title>Interrupt Handling</title>
+<?xmlif if excludeextra='1'?>
+<?xmlif else?>
!Ekernel/irq/manage.c
+<?xmlif fi?>
</sect1>
<sect1><title>DMA Channels</title>
--- a/Documentation/DocBook/device-drivers.tmpl
+++ b/Documentation/DocBook/device-drivers.tmpl
@@ -194,8 +194,13 @@ X!Edrivers/pnp/system.c
<chapter id="snddev">
<title>Sound Devices</title>
+<?xmlif if excludeextra='1'?>
+<?xmlif else?>
!Iinclude/sound/core.h
+<?xmlif fi?>
!Esound/sound_core.c
+<?xmlif if excludeextra='1'?>
+<?xmlif else?>
!Iinclude/sound/pcm.h
!Esound/core/pcm.c
!Esound/core/device.c
@@ -211,6 +216,7 @@ X!Edrivers/pnp/system.c
!Esound/core/hwdep.c
!Esound/core/pcm_native.c
!Esound/core/memalloc.c
+<?xmlif fi?>
<!-- FIXME: Removed for now since no structured comments in source
X!Isound/sound_firmware.c
-->

View File

@ -71,6 +71,7 @@ debian/emmc-don-t-initialize-partitions-on-rpmb-flagged-areas.patch
bugfix/all/make-highlights-deterministic-in-kernel-doc.patch
bugfix/all/remove-timestamps-from-compressed-man-pages.patch
bugfix/all/docbook-generate-consistent-ids.patch
bugfix/all/docbook-fix-duplicate-man-pages.patch
# Miscellaneous features
features/all/efi-autoload-efi-pstore.patch