A. Sample makefile for generating publications.

############################################################################
# File         : xml.mak
# Function     : Produce DocBook based documentation output
# Dependencies : NMAKE.EXE (Microsoft)
#
############################################################################

#----------------------------------------------
# Set the name of the main XML source
#----------------------------------------------
SOURCE=docbook_win32_xml_setup

#----------------------------------------------
# Configure the home of the tools...
#----------------------------------------------
XFC_HOME=d:\tools\xml\xfc-09
SAXON_HOME=d:\tools\xml\saxon6_5_1
FOP_HOME=d:\tools\xml\fop-0.20.3
JHHOME=c:\jh1.1
JAVAJAR=$(JAVA_HOME)\bin\jar

#----------------------------------------------
# Configure the home of HTML Help Workshop in 
# PATH environment variable
#----------------------------------------------
PATH=$(PATH);C:\"Program Files\HTML Help Workshop"

#----------------------------------------------
# Configure location of stylesheets
#----------------------------------------------
XSL_HOME=d:\tools\xml\docbook-xsl

XSL_HTML=$(XSL_HOME)\html\docbook.xsl 
XSL_XHTML=$(XSL_HOME)\xhtml\docbook.xsl 
XSL_HTML_HELP=$(XSL_HOME)\htmlhelp\htmlhelp.xsl 
XSL_JAVA_HELP=$(XSL_HOME)\javahelp\javahelp.xsl 
XSL_HTML_CHUNK=$(XSL_HOME)\html\chunk.xsl 
XSL_XHTML_CHUNK=$(XSL_HOME)\xhtml\chunk.xsl 
XSL_FO=$(XSL_HOME)\fo\docbook.xsl 

#----------------------------------------------
# Configure XSL parameters for HTML generation
#----------------------------------------------
XSL_HTML_PARM_1=shade.verbatim="1" section.autolabel="1"
XSL_HTML_PARM_2=callout.graphics.path="images/callouts/gif/"
XSL_HTML_PARM_3=callout.graphics="1" callout.graphics.extension=".gif"
XSL_HTML_PARMS=$(XSL_HTML_PARM_1) $(XSL_HTML_PARM_2) $(XSL_HTML_PARM_3)

#----------------------------------------------
# Configure XSL parameters for PDF generation
#----------------------------------------------
XSL_FO_PARM_01=paper.type="A4"
XSL_FO_PARM_02=draft.watermark.image=" "
XSL_FO_PARM_03=ulink.show="1" ulink.footnotes="0" ulink.hyphenate=" "
XSL_FO_PARM_04=section.autolabel="1"
XSL_FO_PARM_05=generate.index="1"
XSL_FO_PARM_06=page.margin.top="0.5in"
XSL_FO_PARM_07=body.margin.top="0.5in"
XSL_FO_PARM_08=page.margin.bottom="0.5in"
XSL_FO_PARM_09=body.margin.bottom="0.5in"

# fop.extensions="1" enables bookmarks: 
# not to be used in RTF generation 
# due to bug in XFC
XSL_FO_PARM_10=fop.extensions="1"

XSL_FO_PARMS=$(XSL_HTML_PARMS) $(XSL_FO_PARM_01)
XSL_FO_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_02)
XSL_FO_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_03)
XSL_FO_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_04)
XSL_FO_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_05)
XSL_FO_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_06)
XSL_FO_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_07)
XSL_FO_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_08)
XSL_FO_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_09)

XSL_RTF_PARMS=$(XSL_FO_PARMS)
XSL_PDF_PARMS=$(XSL_FO_PARMS)  $(XSL_FO_PARM_10)

#----------------------------------------------
# All code to follow need not to be changed if you 
# adhere to the following directory structure:
#
#  <your DocBook project directory>
#     |
#     +----- ~temp     (intermediate build products)
#     |
#     +----- source    (DocBook XML sources)
#     |  |
#     |  +----- img
#     |
#     +----- target    (generated publications)
#        |
#        +----- html
#        |
#        +----- html-chunk
#        |
#        +----- htmlhelp
#        |
#        +----- javahelp
#        |
#        +----- pdf
#        |
#        +----- rtf
#        |
#        +----- xhtml
#        |
#        +----- xhtml-chunk
#
#----------------------------------------------

#----------------------------------------------
# Directory structure
#----------------------------------------------
S=.
PATH2ROOT=..
PATH2TARGET=..\target
T_XML_TEMP=$(PATH2ROOT)\~temp
T_XML_HTML=$(PATH2TARGET)\html
T_XML_XHTML=$(PATH2TARGET)\xhtml
T_XML_PDF=$(PATH2TARGET)\pdf
T_XML_RTF=$(PATH2TARGET)\rtf
T_XML_HTML_CHUNK=$(PATH2TARGET)\html-chunk
T_XML_XHTML_CHUNK=$(PATH2TARGET)\xhtml-chunk
T_XML_HTML_HELP=$(PATH2TARGET)\htmlhelp
T_XML_JAVA_HELP=$(PATH2TARGET)\javahelp

#----------------------------------------------
# Win32 Tooling: HTML Help Workshop
#----------------------------------------------
HHC=hhc.exe

#----------------------------------------------
# Java tooling
#----------------------------------------------
HSVIEWER=$(JHHOME)\demos\bin\hsviewer1_1

#----------------------------------------------
# Program macro's
#----------------------------------------------
XFC_CLASSPATH=$(XFC_HOME)\xfc.jar;$(XFC_HOME)\jaxp.jar
XFC_CLASSPATH=$(XFC_CLASSPATH);$(XFC_HOME)\sax.jar;$(XFC_HOME)\xp.jar
XFC=java -cp $(XFC_CLASSPATH) com.xmlmind.fo.converter.Driver

SAXON=java -jar $(SAXON_HOME)\saxon.jar

FOP_CLASSPATH=$(FOP_HOME)\build\fop.jar;$(FOP_HOME)\lib\batik.jar
FOP_CLASSPATH=$(FOP_CLASSPATH);$(FOP_HOME)\lib\xalan-2.0.0.jar
FOP_CLASSPATH=$(FOP_CLASSPATH);$(FOP_HOME)\lib\xerces-1.2.3.jar
FOP_CLASSPATH=$(FOP_CLASSPATH);$(FOP_HOME)\lib\avalon-framework-4.0.jar
FOP_CLASSPATH=$(FOP_CLASSPATH);$(FOP_HOME)\lib\logkit-1.0.jar;
FOP_CLASSPATH=$(FOP_CLASSPATH);$(FOP_HOME)\lib\jimi-1.0.jar 
FOP=java -cp $(FOP_CLASSPATH) org.apache.fop.apps.Fop

#----------------------------------------------
# rules
#----------------------------------------------
.SUFFIXES: .xml .html
.SUFFIXES: .xml .fo
.SUFFIXES: .fo-pdf  .pdf
.SUFFIXES: .fo-rtf  .rtf
.SUFFIXES: .xml .xhtml
.SUFFIXES: .xml .chm
.SUFFIXES: .xml .hs

#----------------------------------------------
# Products
#----------------------------------------------
all: html xhtml pdf rtf \
     html-chunk xhtml-chunk \
     htmlhelp javahelp

html: $(T_XML_HTML)\$(SOURCE).html
xhtml: $(T_XML_XHTML)\$(SOURCE).xhtml
pdf: $(T_XML_TEMP)\$(SOURCE).fo-pdf $(T_XML_PDF)\$(SOURCE).pdf
rtf: $(T_XML_TEMP)\$(SOURCE).fo-rtf $(T_XML_RTF)\$(SOURCE).rtf
htmlhelp: $(T_XML_HTML_HELP)\$(SOURCE).chm
html-chunk: $(T_XML_HTML_CHUNK)\index.html
xhtml-chunk: $(T_XML_XHTML_CHUNK)\index.html
javahelp: $(T_XML_JAVA_HELP)\$(SOURCE).jar

#----------------------------------------------
{$(S)}.xml{$(T_XML_HTML)}.html:
   @echo Generating $(@B).html ...
   @$(SAXON) -o $(T_XML_HTML)\$(@B).html $(S)\$(@B).xml $(XSL_HTML) $(XSL_HTML_PARMS)
#----------------------------------------------
{$(S)}.xml{$(T_XML_XHTML)}.xhtml:
   @echo Generating $(@B).xhtml ...
   @$(SAXON) -o $(T_XML_XHTML)\$(@B).xhtml $(S)\$(@B).xml $(XSL_XHTML)
#----------------------------------------------
{$(S)}.xml{$(T_XML_TEMP)}.fo-pdf:
   @echo Generating $(@B).fo-pdf ...
   @$(SAXON) -o $(T_XML_TEMP)\$(@B).fo-pdf $(S)\$(@B).xml $(XSL_FO) $(XSL_PDF_PARMS)
#----------------------------------------------
{$(S)}.xml{$(T_XML_TEMP)}.fo-rtf:
   @echo Generating $(@B).fo-rtf ...
   @$(SAXON) -o $(T_XML_TEMP)\$(@B).fo-rtf $(S)\$(@B).xml $(XSL_FO) $(XSL_RTF_PARMS)
#----------------------------------------------
{$(T_XML_TEMP)}.fo-pdf{$(T_XML_PDF)}.pdf:
   @echo Generating $(@B).pdf ...
   @copy $(T_XML_TEMP)\$(@B).fo-pdf 
   @$(FOP) -q -fo $(@B).fo-pdf -pdf $(T_XML_PDF)\$(@B).pdf
   @del $(@B).fo-pdf
#----------------------------------------------
{$(T_XML_TEMP)}.fo-rtf{$(T_XML_RTF)}.rtf:
   @echo Generating $(@B).rtf ...
   @copy $(T_XML_TEMP)\$(@B).fo-rtf
   $(XFC) $(@B).fo-rtf $(T_XML_RTF)\$(@B).rtf
   @del $(@B).fo-rtf 
   
#----------------------------------------------
$(T_XML_HTML_CHUNK)\index.html: $(S)\$(SOURCE).xml
   @echo Generating html chunks ...
   @$(SAXON) $(S)\$(SOURCE).xml  $(XSL_HTML_CHUNK) $(XSL_HTML_PARMS)
   @move *.html $(T_XML_HTML_CHUNK)
#----------------------------------------------
$(T_XML_XHTML_CHUNK)\index.html: $(S)\$(SOURCE).xml
   @echo Generating xhtml chunks ...
   @$(SAXON) $(S)\$(SOURCE).xml  $(XSL_XHTML_CHUNK)
   @move *.html $(T_XML_XHTML_CHUNK)

#----------------------------------------------
{$(S)}.xml{$(T_XML_HTML_HELP)}.chm:
   @echo Generating $(@B).chm ...
   @$(SAXON) $(S)\$(@B).xml $(XSL_HTML_HELP)
   @-1 $(HHC) htmlhelp.hhp
   @move *.html $(T_XML_TEMP)
   @move *.hhp  $(T_XML_TEMP)
   @move *.hhc  $(T_XML_TEMP)
   @move *.chm  $(T_XML_HTML_HELP)\$(SOURCE).chm

#----------------------------------------------
$(T_XML_JAVA_HELP)\$(SOURCE).jar: $(S)\$(SOURCE).xml
   @echo Generating JavaHelp ...
   @$(SAXON) $(S)\$(SOURCE).xml $(XSL_JAVA_HELP)
   @$(JAVAJAR) cf $(T_XML_JAVA_HELP)\$(SOURCE).jar  jhelp*.* *.html img\*.*
   @if exist *.html   del *.html    /Q
   @if exist jhelp*.* del jhelp*.*  /Q   
     
#----------------------------------------------
saxon:
   $(SAXON) -?
hhc:
   $(HHC) -?
fop:
   $(FOP) -?
xfc:
   $(XFC) -help
v-javahelp: javahelp
   $(HSVIEWER) jhelpset.hs $(T_XML_JAVA_HELP)\$(SOURCE).jar
showjar:
   $(JAVAJAR) tf $(T_XML_JAVA_HELP)\$(SOURCE).jar
v-pdf: pdf
   @start /B $(T_XML_PDF)\$(SOURCE).pdf
   
#-----------------------
clean:
   @if exist $(T_XML_TEMP)\*.h*  del $(T_XML_TEMP)\*.h*
   @if exist $(T_XML_TEMP)\*.fo  del $(T_XML_TEMP)\*.fo
   
   @if exist $(T_XML_HTML)\*.h*  del $(T_XML_HTML)\*.h*
   @if exist $(T_XML_XHTML)\*.x* del $(T_XML_XHTML)\*.x*
   @if exist $(T_XML_PDF)\*.pdf  del $(T_XML_PDF)\*.pdf
   
   @if exist $(T_XML_HTML_CHUNK)\*.h*  del $(T_XML_HTML_CHUNK)\*.h*
   @if exist $(T_XML_XHTML_CHUNK)\*.h* del $(T_XML_XHTML_CHUNK)\*.h*
   @if exist $(T_XML_HTML_HELP)\*.c*   del $(T_XML_HTML_HELP)\*.c*
   
   @if exist $(T_XML_JAVA_HELP)\*.h*  del $(T_XML_JAVA_HELP)\*.h*
   @if exist $(T_XML_JAVA_HELP)\*.j*  del $(T_XML_JAVA_HELP)\*.j*
   @if exist $(T_XML_JAVA_HELP)\*.x*  del $(T_XML_JAVA_HELP)\*.x*
   
#-----------------------
# end of makefile