1# $Source: /cvsroot/docbook/xsl/tools/make/Makefile.combine,v $
2# $Author: xmldoc $
3# $Date: 2006/04/19 06:25:42 $
4# $Revision: 1.1 $
5# vim: number
6#
7# -----------------------------------------------------------------
8#  ** Makefile.combine -- combine source files **
9# -----------------------------------------------------------------
10#
11#   This file is part of the DocBook Project XSL Stylesheet
12#   distribution.
13#
14#   See http://docbook.sourceforge.net/release/xsl/current/
15#   for copyright and other information.
16#
17# This makefile creates "wrapper" files that combine sets of
18# individual DocBook source files. The purpose of combining the
19# files is to speed up processing time. By default it puts 20
20# files into each wrapper. Use CHUNKSIZE to configure the number
21# of files per wrapper.
22#
23# Currently, this makefile has only a "man" target and is mainly
24# intended to speed up processing of large numbers if individual
25# refentry instances.
26
27# What file extension do you use for DocBook source files?
28DOCBOOK_FILE_EXTENSION = .xml
29SOURCE_FILES_DBK = $(wildcard *$(DOCBOOK_FILE_EXTENSION))
30
31MAKEFILE_DOCBOOK = Makefile.DocBook
32
33XSLTPROC=xsltproc
34XSLTPROC_FLAGS=
35
36SED=sed
37SED_FLAGS=-i
38
39CHUNKSIZE ?= 20
40
41WRAPPER_ELEMENT = reference
42WRAPPER_TITLE=Combined contents
43
44COMBINE_XSL = <?xml version="1.0"?> \
45<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \
46                xmlns:exsl="http://exslt.org/common" \
47                xmlns:xi="http://www.w3.org/2001/XInclude" \
48                exclude-result-prefixes="exsl xi" \
49                extension-element-prefixes="exsl" \
50                version="1.0"> \
51  <xsl:param name="files"/> \
52  <xsl:param name="chunk.size"/> \
53  <xsl:template match="/"> \
54    <xsl:call-template name="make.file"/> \
55  </xsl:template> \
56 \
57  <xsl:template name="make.file"> \
58    <xsl:param name="count" select="1"/> \
59    <xsl:param name="current.files" select="concat(normalize-space($$files), ^^ ^^)"/> \
60    <xsl:param name="more.files" \
61               select="concat(normalize-space(substring-after($$current.files, ^^ ^^)),^^ ^^)"/> \
62    <xsl:param name="file.number" select="1"/> \
63    <xsl:param name="filename" select="concat(^^./build/^^,$$file.number,^^.xml^^)"/> \
64 \
65    <xsl:choose> \
66      <xsl:when test="$$more.files = ^^ ^^"/> \
67      <xsl:when test="$$count mod $$chunk.size = 0"> \
68        <xsl:variable name="fileset" select="concat($$current.files, ^^ ^^, \
69          substring-before($$more.files, ^^ ^^))"/> \
70        <exsl:document href="{$$filename}" \
71                       method="xml" \
72                       encoding="UTF-8" \
73                       indent="yes" \
74                       omit-xml-declaration="yes" \
75                       media-type="" \
76                       standalone="no"> \
77          <$(WRAPPER_ELEMENT)> \
78            <title>$(WRAPPER_TITLE)</title> \
79            <xsl:call-template name="make.xinclude"> \
80              <xsl:with-param name="file"> \
81                <xsl:choose> \
82                  <xsl:when test="contains($$fileset, ^^ ^^)"> \
83                    <xsl:value-of \
84                        select="normalize-space(substring-before($$fileset, ^^ ^^))"/> \
85                  </xsl:when> \
86                  <xsl:otherwise> \
87                    <xsl:value-of select="$$fileset"/> \
88                  </xsl:otherwise> \
89                </xsl:choose> \
90              </xsl:with-param> \
91              <xsl:with-param \
92                  name="remaining.files" \
93                  select="concat(normalize-space(substring-after($$fileset, ^^ ^^)),^^ ^^)"/> \
94            </xsl:call-template> \
95          </$(WRAPPER_ELEMENT)> \
96        </exsl:document> \
97        <xsl:call-template name="make.file"> \
98          <xsl:with-param name="count" select="1"/> \
99          <xsl:with-param name="current.files"  \
100                          select="$$more.files"/> \
101          <xsl:with-param name="file.number" select="number($$file.number) + 1"/> \
102          <xsl:with-param name="filename" select="concat(^^./build/^^,$$file.number,^^.xml^^)"/> \
103        </xsl:call-template> \
104      </xsl:when> \
105      <xsl:otherwise> \
106        <xsl:call-template name="make.file"> \
107          <xsl:with-param name="count" select="$$count + 1"/> \
108          <xsl:with-param name="current.files"> \
109            <xsl:choose> \
110              <xsl:when test="$$count = 1 and $$file.number = 1"> \
111                <xsl:value-of  \
112                    select="concat(substring-before($$current.files, ^^ ^^), \
113                            ^^ ^^, \
114                            substring-before($$more.files, ^^ ^^))"/> \
115              </xsl:when> \
116              <xsl:when test="$$count = 1"> \
117                <xsl:value-of  \
118                    select="substring-before($$more.files, ^^ ^^)"/> \
119              </xsl:when> \
120              <xsl:otherwise> \
121                <xsl:value-of  \
122                    select="concat($$current.files, ^^ ^^, \
123                            substring-before($$more.files, ^^ ^^))"/> \
124              </xsl:otherwise> \
125            </xsl:choose> \
126          </xsl:with-param> \
127          <xsl:with-param name="more.files" \
128                          select="substring-after($$more.files, ^^ ^^)"/> \
129          <xsl:with-param name="file.number" select="$$file.number"/> \
130        </xsl:call-template> \
131      </xsl:otherwise> \
132    </xsl:choose> \
133  </xsl:template> \
134 \
135  <xsl:template name="make.xinclude"> \
136    <xsl:param name="file"/> \
137    <xsl:param name="remaining.files"/> \
138    <xsl:param name="count" select="1"/> \
139    <xsl:if test="not($$file = ^^^^)"> \
140      <xi:include href="../{$$file}"/> \
141      <xsl:call-template name="make.xinclude"> \
142        <xsl:with-param \
143            name="file" \
144            select="substring-before($$remaining.files, ^^ ^^)"/> \
145        <xsl:with-param \
146            name="remaining.files" \
147            select="substring-after($$remaining.files, ^^ ^^)"/> \
148        <xsl:with-param name="count" select="$$count + 1"/> \
149      </xsl:call-template> \
150    </xsl:if> \
151  </xsl:template> \
152 \
153</xsl:stylesheet>
154
155all: man
156
157man: build/man
158
159build/Makefile:
160	if [ ! -d build ]; then mkdir build; fi
161	cp $(MAKEFILE_DOCBOOK) $@
162
163combine.xsl: Makefile
164	@echo '$(COMBINE_XSL)' > $@
165	$(SED) $(SED_FLAGS) "s/\^\^/'/g" $@
166
167build/1.xml: combine.xsl
168	$(XSLTPROC) $(XSLTPROC_FLAGS) \
169	--stringparam files "$(SOURCE_FILES_DBK)" \
170	--stringparam chunk.size $(CHUNKSIZE) \
171	$< $<
172
173build/man: build/Makefile build/1.xml
174	time $(MAKE) -C build man \
175		MAN_PARAMS="--stringparam man.output.quietly 1 \
176		   --stringparam refentry.meta.get.quietly 1 \
177		   --stringparam man.charmap.enabled 0"
178
179debug:
180
181clean:
182	$(RM) -r build
183