From: Samuel Martin <s.martin49@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v3 4/4] gendoc infra: disable pdf manual generation if xsltproc is buggy
Date: Tue, 26 Aug 2014 20:49:07 +0200 [thread overview]
Message-ID: <1409078947-5093-4-git-send-email-s.martin49@gmail.com> (raw)
In-Reply-To: <1409078947-5093-1-git-send-email-s.martin49@gmail.com>
The PDF manual generation reaches the default xsltproc's template
recursion limit when processing the target package list; this makes the
PDF manual generation fail [1-3].
This limit can be raised with the '--maxvars' option. Unfortunately,
this option is not correctly handled in the latest xsltproc/libxslt
release (1.1.28), but this bug is already fixed in the libxslt
repository [4].
This patch disables the PDF manual generation (makes it fail with a
meaningful error message) when the xsltproc program found in the PATH
does not support the --maxvars option.
So, one can still generate the PDF manual if he/she extends PATH with
the location of a working xsltproc, by running:
$ PATH=/path/to/custom-xsltproc/bin:${PATH} make manual-pdf
[1] http://lists.busybox.net/pipermail/buildroot/2014-August/104390.html
[2] http://lists.busybox.net/pipermail/buildroot/2014-August/104418.html
[3] http://lists.busybox.net/pipermail/buildroot/2014-August/104421.html
[4] https://gitorious.org/libxslt/libxslt/commit/5af7ad745323004984287e48b42712e7305de35c
Reported-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Signed-off-by: Samuel Martin <s.martin49@gmail.com>
---
changes v2 -> v3:
- fix typoes (ThomasDS)
- rename USE_BUGGY_XSLTPROC -> MANUAL_XSLTPROC_IS_BROKEN (ThomasDS)
- comments and commit log rewording (ThomasDS)
changes v1 -> v2:
- simplify the xsltproc check logic
---
docs/manual/manual.mk | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/docs/manual/manual.mk b/docs/manual/manual.mk
index 09d8b18..49ddb0e 100644
--- a/docs/manual/manual.mk
+++ b/docs/manual/manual.mk
@@ -83,6 +83,28 @@ define MANUAL_$(2)_INSTALL_CMDS
endef
endif
+# PDF manual generation is broken because of a bug in xsltproc program provided
+# by libxslt <=1.1.28, which does not honor an option we need to set.
+# Fortunately, this bug is already fixed upstream:
+# https://gitorious.org/libxslt/libxslt/commit/5af7ad745323004984287e48b42712e7305de35c
+#
+# So, bail out when trying to build the pdf manual using a buggy version of the
+# xsltproc program.
+#
+# So, to overcome this issue and being able to build the pdf manual, you can
+# build xsltproc from it source repository, then run:
+# $ PATH=/path/to/custom-xsltproc/bin:${PATH} make manual
+MANUAL_XSLTPROC_IS_BROKEN = \
+ $$(shell xsltproc --maxvars 0 >/dev/null 2>/dev/null || echo y)
+
+ifeq ($(4)-$$(MANUAL_XSLTPROC_IS_BROKEN),pdf-y)
+$$(O)/docs/$(1)/$(1).$(4):
+ $$(error PDF manual generation is disabled because of a bug in \
+ xsltproc. To be able to generate the PDF manual, you should \
+ build xsltproc from the libxslt sources >=1.1.29 and pass it \
+ to make through the command line: \
+ 'PATH=/path/to/custom-xsltproc/bin:$$$${PATH} make manual-pdf')
+else
$$(O)/docs/$(1)/$(1).$(4): docs/$(1)/$(1).txt \
$$($$(call UPPERCASE,$(1))_SOURCES) \
manual-check-dependencies \
@@ -96,6 +118,7 @@ $$(O)/docs/$(1)/$(1).$(4): docs/$(1)/$(1).txt \
$$(BUILD_DIR)/$(1)/$(1).txt
# install the generated manual
$$(MANUAL_$(2)_INSTALL_CMDS)
+endif
endef
################################################################################
@@ -111,8 +134,11 @@ $(call GENDOC_INNER,$(pkgname),xhtml,html,html,HTML,\
--xsltproc-opts "--stringparam toc.section.depth 1")
$(call GENDOC_INNER,$(pkgname),chunked,split-html,chunked,split HTML,\
--xsltproc-opts "--stringparam toc.section.depth 1")
+# dblatex needs to pass the '--maxvars ...' option to xsltproc to prevent it
+# from reaching the template recursion limit when processing the (long) target
+# package table and bailing out.
$(call GENDOC_INNER,$(pkgname),pdf,pdf,pdf,PDF,\
- --dblatex-opts "-P latex.output.revhistory=0")
+ --dblatex-opts "-P latex.output.revhistory=0 -x '--maxvars 100000'")
$(call GENDOC_INNER,$(pkgname),text,text,text,text)
$(call GENDOC_INNER,$(pkgname),epub,epub,epub,ePUB)
clean: $(pkgname)-clean
--
2.1.0
next prev parent reply other threads:[~2014-08-26 18:49 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-26 18:49 [Buildroot] [PATCH v3 1/4] gendoc infra: cosmetic fixes Samuel Martin
2014-08-26 18:49 ` [Buildroot] [PATCH v3 2/4] gendoc infra: move manual build location into $(BUILD_DIR)/manual Samuel Martin
2014-09-07 15:03 ` Yann E. MORIN
2014-08-26 18:49 ` [Buildroot] [PATCH v3 3/4] gendoc infra: avoid a2x warning Samuel Martin
2014-08-26 18:49 ` Samuel Martin [this message]
2014-08-29 5:58 ` [Buildroot] [PATCH v3 4/4] gendoc infra: disable pdf manual generation if xsltproc is buggy Thomas De Schampheleire
2014-09-07 9:57 ` [Buildroot] [PATCH v3 1/4] gendoc infra: cosmetic fixes Yann E. MORIN
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1409078947-5093-4-git-send-email-s.martin49@gmail.com \
--to=s.martin49@gmail.com \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox