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