blob: af84396514581655803279b738754c60bc031536 [file] [log] [blame]
<?xml version="1.0"?>
<project name="hsqldb-ant-docbook" default="gen-docs"
xmlns:ivy="antlib:org.apache.ivy.ant">
<!--
USAGE
Purpose of this build file is to generate Whole HTML, Chunked HTML,
and PDF DocBook output documents from DocBook source located under a
doc-src subdirectory.
Must have Ivy v. 2.0 or later in Ant invocation CLASSPATH.
We suggest that you change-control a copy if the Ivy jar file in
the bootstrap-libs subdirectory, so things will work according to the
displayed message below (search below for "bootstrap-libs").
Normally you will "import" this file into your main Ant build file like
<import file="build-docbook.xml"/>
or, you can invoke targets in this file directly like
ant -f build-docbook.xml...
OVERRIDING Ant properties used in this file:
See inline instructions below for properties that you want to effect
only this build file.
For more general changes (say you want "javac.debug" to effect your own
build file as well as this one), set them however you want in your
parent Ant build file (perhaps by loading a "build.properties" or
"local.properties" file).
-->
<!-- Since the main HSQLDB build file imports this one, relative property
file specifications must be relative to the project root, not build/ -->
<!-- Put local env property changes in this NON-CHANGE-CONTROLLED file: -->
<property file="build/local-docbook.properties"/>
<!-- For change-controlled (by your project) ant-docbook-specific props: -->
<property file="build/docbook.properties"/>
<property name="oasis.stylesheet.url"
value="http://docbook.sourceforge.net/release/xsl-ns/current"/>
<!-- IMPORTANT: This value must exactly match the network href values in
our *.xsl files! -->
<!-- See
http://xml.apache.org/commons/components/resolver/resolver-article.html#ctrlresolver
about these xml.catalog.* settings for the Xml Commons resolver.
The docs say to use values yes/no for booleans, instead of true/false.
-->
<property name="xml.catalog.verbosity" value="0"/>
<!-- BEWARE: The verbosity setting seems to not work for some combination
of settings. Haven't figured out what combo, but setting it to 10 has no
effect for our particular setup. -->
<property name="xml.catalog.files"
value="${basedir}/stylesheets/rng-catalog.xml"/>
<property name="xml.catalog.prefer" value="public"/>
<property name="xml.catalog.allowPI" value="yes"/>
<property name="xml.catalog.staticCatalog" value="yes"/>
<property name="ivy.dep.file" value="build/ivy.xml"/>
<property name="distro.baseurl" value="http://hsqldb.org/doc/2.0"/>
<property name="docoutput.path" value="doc"/>
<property name="javac.debug" value="true"/>
<property name="java.threadstacksize" value="1M"/>
<!-- TODO: Once our repository is set up, change the repos.url value here -->
<property name="repos.url" value="http://pub.admc.com/lib-repos"/>
<property name="dbxirng.url"
value="http://www.docbook.org/xml/5.0/rng/docbook.rng"/>
<!-- The "xi" variant supports Xinclude -->
<property name="html.path" value="stylesheets/html.xsl"/>
<property name="chunk.path" value="stylesheets/chunk.xsl"/>
<property name="fo.path" value="stylesheets/fo.xsl"/>
<!-- Set nsstylebase.url, in your .properties file, to your local filesystem
or local http server location for the DocBok style sheets.
That makes the XSLT transformations execute much faster than when
pulling the sheets from OASIS Internet site.
Example transform. times: 34 s. vs. 1:49.
-->
<property name="nsstylebase.url" value="UNSET_STYLEBASE"/>
<!-- Without setting a default value, some error messages could contain the
misleading string "${nsstylebase.url}" in cases where user does not set a
value and resolution fails (not that there will be a resolution failure,
since this setting is optional). -->
<property name="dbcentx.url" value="UNSET_STYLEBASE"/>
<!-- ditto about the default value -->
<target name="fetch-images"
description="Fetch stock DocBook image files from Internet">
<echo>Copy the images directory from the latest stable version of the
docbook-xsl-ns package to
'${basedir}/doc-src/images/db'. docbook-xsl-ns is
available for download from the DocBook project at
http://sourceforge.net/packages/docbook.
We'll do this automatically for you once Ant has a task to transfer
entire directories of files.</echo>
</target>
<target name="regen-docs"
description="Clean and regen project DocBook docs. N.b this wipes javadocs too!"
depends="clean-docs, gen-docs"/>
<property name="_for.automation.blurb"
value="If you want to automate the antcalls and you don't mind using
Ant-contrib or Antelope, you can use one of their 'for' tasks with a DirSet."/>
<target name="gen-docs">
<fail>You must implement your own "gen-docs" target by editing
"build-docbook.xml" or overriding it in your own build file which imports
"build-docbook.xml".
Your "gen-docs" target must depend on -gen-docs-setup, do an "antcall" of
"docbook-transform" for each doc.name, then call -gen-docs-complete.
${_for.automation.blurb}</fail>
</target>
<target name="validate-docs">
<fail>You must implement your own "validate-docs" target
by editing "build-docbook.xml" or overriding it in your own build file which
imports "build-docbook.xml".
Your "validate-docs" target must do an "antcall" of "validate-doc" for each
doc.name.
${_for.automation.blurb}</fail>
</target>
<target name="-gen-docs-setup" depends="refresh-verbatim"/>
<target name="-gen-docs-complete">
<!-- This is the highest-maintenance target of this build file.
Must update the copy and fixcrlf filesets to copy exactly what
needs to go to doc output branch, and enforce EOLs in all text files.
The dependsets elsewhere in this file use targetfilesets, not
targetfilelists, so shouldn't need maintenance there.
IMPORTANT: FOR ALL copys and fixcrlfs, DO NOT USE
preservelastmodified, as that will defeat our dependsets.
Don't do anything with apidocs, since those are handled by
javadoc-specific tasks.
-->
<!-- First, just binaries. We enforce EOLs for all others -->
<copy todir="${docoutput.path}">
<!-- Fileset pretty simple, since the binaries always need to be
served to end users. -->
<fileset dir="doc-src"
excludes="**/.*, **/*.txt, **/entities/**, apidocs/**,
**/*.xml, **/*.java, **/*.sql, **/*.cfg, **/*.css,
**/*.ent, **/*.rc, **/*.html, **/*.properties"/>
</copy>
<!-- *.txt and *.xml because *.txt are speficially not copied from document
base dirs and *.xml not from root or document base dirs,
because these files are used for document authorship and management.-->
<fixcrlf destdir="${docoutput.path}" eol="crlf"
encoding="UTF-8" srcdir="doc-src"
includes="verbatim/**/*.txt, images/**/*.txt"
excludes="**/.*"/>
<fixcrlf destdir="${docoutput.path}" eol="crlf"
encoding="UTF-8" srcdir="doc-src"
excludes="**/.*, verbatim/**, images/**, **/entities/**,
*/*.txt, apidocs/**, readme-template.txt"
includes="**/*.txt"/>
<fixcrlf destdir="${docoutput.path}" eol="lf"
encoding="UTF-8" srcdir="doc-src"
includes="verbatim/**/*.xml, images/**/*.xml"
excludes="**/.*"/>
<fixcrlf destdir="${docoutput.path}" eol="lf"
encoding="UTF-8" srcdir="doc-src"
excludes="**/.*, verbatim/**, images/**, **/entities/**,
*.xml, */*.xml"
includes="**/*.xml"/>
<!-- All remaining text files -->
<fixcrlf destdir="${docoutput.path}" eol="lf"
encoding="UTF-8" srcdir="doc-src"
excludes="**/.*, **/entities/**, apidocs/**"
includes="**/*.java, **/*.sql, **/*.cfg, **/*.css,
**/*.rc, **/*.properties"/>
<!-- To allow substitution of ant-variables like ${x} in any of the text
files above, just move that file type from the fixcrlf above to the
copy below. -->
<copy todir="${docoutput.path}">
<fileset dir="doc-src" excludes="**/.*, **/entities/**, apidocs/**"
includes="**/*.html"/>
<filterchain>
<expandproperties/>
<fixcrlf eol="lf" encoding="UTF-8"/>
</filterchain>
</copy>
</target>
<target name="docbook-transform" depends="-fop-setup"
description="Generate DocBook output for specified source doc">
<fail unless="doc.name"
message="Ant property 'doc.name' is required by target 'docbook-transform'."/>
<available property="_htmlstyle.present" type="file" file="${html.path}"/>
<available property="_chunkstyle.present" type="file" file="${chunk.path}"/>
<available property="_fostyle.present" type="file" file="${fo.path}"/>
<fail unless="_htmlstyle.present"
message="DocBook 5 HTML style sheet missing: ${html.path}"/>
<fail unless="_chunkstyle.present"
message="DocBook 5 Chunk HTML style sheet missing: ${chunk.path}"/>
<fail unless="_fostyle.present"
message="DocBook 5 FO style sheet missing: ${fo.path}"/>
<dependset>
<srcfileset dir="doc-src" excludes="**/.*, *_lic.txt, readme*, index.html"
includes="*.*, entities/**, images/**, verbatim/**"/>
<!-- Remove *_lic.txt from excludes above and below if we add any
reference to license files from any of our DocBook documents.
-->
<targetfileset dir="tmp/doc-work"/>
<targetfileset dir="${docoutput.path}"
excludes="zaurus/**, apidocs/**, readme*, index.html, *_lic.txt"/>
</dependset>
<dependset>
<srcfileset dir="doc-src/${doc.name}" excludes="**/.*"/>
<targetfileset dir="${docoutput.path}/${doc.name}"/>
<targetfilelist dir="tmp/doc-work/${doc.name}" files="${doc.name}.fo"/>
</dependset>
<dependset>
<srcfilelist dir="tmp/doc-work/${doc.name}" files="${doc.name}.fo"/>
<targetfilelist dir="${docoutput.path}/${doc.name}"
files="${doc.name}.pdf"/>
</dependset>
<available property="skip.html" type="file" value="transform.skip"
file="${docoutput.path}/${doc.name}/${doc.name}.html"/>
<available property="skip.chunk" type="file" value="transform.skip"
file="${docoutput.path}/${doc.name}/index.html"/>
<available property="skip.fo" type="file" value="transform.skip"
file="${docoutput.path}/${doc.name}/${doc.name}.fo"/>
<available property="skip.pdf" type="file" value="fop.skip"
file="${docoutput.path}/${doc.name}/${doc.name}.pdf"/>
<property name="skip.html" value="dummy"/>
<property name="skip.chuk" value="dummy"/>
<property name="skip.pdf" value="dummy"/>
<antcall target="-transform">
<param name="style.path" value="${html.path}"/>
<param name="output.base"
value="${docoutput.path}/${doc.name}/${doc.name}.html"/>
<param name="html.format" value="true"/>
<param name="${skip.html}" value="true"/>
</antcall>
<antcall target="-transform">
<param name="style.path" value="${chunk.path}"/>
<param name="output.base"
value="${docoutput.path}/${doc.name}/dummy.html"/>
<param name="html.format" value="true"/>
<param name="${skip.chunk}" value="true"/>
</antcall>
<fixcrlf eol="lf" encoding="UTF-8" srcdir="doc/${doc.name}"
includes="*.html"/> <!-- Make output platform-independent -->
<antcall target="-transform">
<param name="style.path" value="${fo.path}"/>
<param name="output.base" value="tmp/doc-work/${doc.name}/${doc.name}.fo"/>
<param name="fop.format" value="true"/>
<param name="${skip.fo}" value="true"/>
</antcall>
<antcall target="-fop">
<param name="${skip.pdf}" value="true"/>
</antcall>
</target>
<target name="-fop" unless="fop.skip">
<fop format="application/pdf" basedir="doc-src/${doc.name}"
fofile="tmp/doc-work/${doc.name}/${doc.name}.fo"
outfile="${docoutput.path}/${doc.name}/${doc.name}.pdf"/>
<!-- basedir tells base location of image files -->
<!-- The fop tasks goes out to http://docbook.sourceforge.net to
fetch stuff -->
</target>
<target name="-transform" depends="-ivy-setup" unless="transform.skip">
<fail unless="distro.baseurl"
message="Ant property 'distro.baseurl' is required by target '-transform'."/>
<fail unless="doc.name"
message="Ant property 'doc.name' is required by target '-transform'."/>
<available file="${style.path}" type="file" property="_sheet.present"/>
<fail unless="_sheet.present"
message="Missing style sheet '${style.path}'"/>
<available file="doc-src/${doc.name}/${doc.name}.xml" type="file"
property="_srcxml.present"/>
<fail unless="_srcxml.present"
message="Missing DocBook source document 'doc-src/${doc.name}/${doc.name}.xml'"/>
<mkdir dir="tmp/doc-work/${doc.name}"/>
<echo file="tmp/doc-work/${doc.name}/dynamic.ent">&lt;!--Dynamically generated Entity Values loaded by a catalog for document
'${doc.name}' --&gt;
&lt;!ENTITY doc_basename "${doc.name}"&gt;
&lt;!ENTITY distro_baseurl "${distro.baseurl}"&gt;
</echo>
<ivy:cachepath conf="xalan" pathid="xalan.cpref"/>
<xslt style="${style.path}" basedir="doc-src/${doc.name}"
in="doc-src/${doc.name}/${doc.name}.xml"
out="${output.base}" classpathref="xalan.cpref">
<xmlcatalog classpathref="xalan.cpref" id="cat.ref">
<!-- WOULD MUCH PREFER TO DEFINE CATALOG EXTERNALLY.
Unfortunately, Ant's xmlcatalog is not seeing Apache's XML resolver.
-->
<!-- IMPORTANT! ***************************************
You must define Catalog mappings/replacements used in all of
your DocBook source right here, plus those needed in the validation
step need a duplicate entry in stylesheets/rng-catalog.xml.
Ant's xmlcatalog task is pretty limiting. No support for prefixes,
and external XML Commons Resolver and external catalog files
support are broken.
IMPORTANT! *************************************** -->
<dtd publicId="-//OASIS/ENTITIES DocBook Character Entities V4.5//EN"
location="${dbcentx.url}"/>
<entity location="${nsstylebase.url}/html/docbook.xsl"
publicId="${oasis.stylesheet.url}/html/docbook.xsl"/>
<entity location="${nsstylebase.url}/html/chunk.xsl"
publicId="${oasis.stylesheet.url}/html/chunk.xsl"/>
<entity location="${nsstylebase.url}/fo/docbook.xsl"
publicId="${oasis.stylesheet.url}/fo/docbook.xsl"/>
<entity location="tmp/doc-work/${doc.name}/dynamic.ent"
publicId="-//HSQLDB/ENTITIES/DocSpecificDynamicEntities"/>
</xmlcatalog>
<!-- There is probably no reason to use if/unless to exclude
format-specific or feature-specific settings, since settings
that don't apply to a specific stylesheet will just be ignored. -->
<!-- N.b.: "use.extensions" turns on all other *.extension properties.
(The boolean *.extension ones, not *.*.extensions).
If you want any off with "use.extensions" on, you must
turn them off individually.
"fop1.extensions" an exception? See table at
http://www.sagehill.net/docbookxsl/InstallingAProcessor.html#SaxonExtensions
-->
<param name="use.extensions" expression="1"/>
<param name="admon.graphics" expression="1"/>
<param name="admon.graphics.path" expression="../images/db/"/>
<param name="admon.graphics.extension" expression=".png"/>
<param name="css.decoration" expression="1"/>
<param name="annotation.support" expression="1"/>
<param name="navig.graphics" expression="1"/>
<param name="navig.graphics.path" expression="../images/db/"/>
<param name="table.borders.with.css" expression="1"/>
<param name="callouts.gaphics" expression="1"/>
<param name="callouts.gaphics.path" expression="../images/db/callouts/"/>
<param name="graphic.default.extension" expression=".png"/>
<param name="callouts.gaphics.extension" expression=".png"/>
<param name="html.stylesheet" expression="../docbook.css"
if="html.format"/>
<param name="shade.verbatim" expression="1" unless="html.format"/>
<param name="textdata.default.encoding" expression="ISO-8859-1"/>
<param name="use.id.as.filename" expression="1"/>
<param name="variablelist.as.table" expression="1"/>
<param name="index.on.type" expression="1"/>
<param name="body.start.indent" expression="0" if="fop.format"/>
<param name="table.cell.border.thickness" expression="1pt"
if="fop.format"/>
<param name="html.cellspacing" expression="0" if="html.format"/>
<!-- With this on, formatting is terrible unless column content
lengths are symmetical -->
<param name="tablecolumns.extension" expression="0"/>
<!-- Docbook-supplied png nav icons suck -->
<param name="navig.graphics.extension" expression=".png"/>
<!-- "fop.extensions" for old FOP versions -->
<param name="fop1.extensions" expression="1" if="fop.format"/>
<!-- This tells sections shown in single HTML pages, not levels shown in
the TOC, which is governed by "toc.section.depth" -->
<param name="chunk.section.depth" expression="0"/>
<!-- Defaults to 1 -->
<!-- This has no effect, because the Docbook .xsl files specify the
output encoding literally.
<param name="chunker.output.encoding" expression="UTF-8"/>
-->
<outputproperty name="encoding" value="UTF-8"/>
<outputproperty name="indent" value="yes"/>
</xslt>
</target>
<target name="clean-docs" description="Remove all derived doc artifacts">
<delete dir="tmp/doc-work"/>
<delete includeemptydirs="true">
<fileset dir="${docoutput.path}" excludes="zaurus/**"/>
</delete>
</target>
<target name="-fop-setup" depends="-ivy-setup">
<ivy:cachepath conf="fop" pathid="fop.cpref"/>
<taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"
classpathref="fop.cpref"/>
</target>
<target name="-ivy-setup">
<available property="_ivy.present" classname="org.apache.ivy.ant.IvyTask"/>
<fail unless="_ivy.present">
Add Ivy jar file to Ant CLASSPATH.
Obtain a 2.x version of an Apache Ivy jar file (perhaps at
http://ant.apache.org/ivy/), and run a command like the following, changing the
jar file path to wherever you have it saved. For any Bourne shell (incl. Bash):
export ANT_ARGS; ANT_ARGS='-lib $HOME/ivy-2.1.0.jar -noclasspath'
OR for any CMD-like Windows shell:
SET ANT_ARGS=-lib "%HOMEDRIVE%%HOMEPATH%/ivy-2.1.0.jar" -noclasspath</fail>
<available property="_ivysettings.present" file="build/ivysettings.xml"
type="file"/>
<antcall target="-ensure-ivysettings"/>
<ivy:settings/>
</target>
<target name="-ensure-ivysettings" unless="_ivysettings.present">
<copy file="build/ivysettings-sample.xml" tofile="build/ivysettings.xml"/>
<echo>Just created a local 'ivysettings.xml' file for you.
Customize this as you wish and/or set Ivy properties (or any other
docbook-specific local build properties) in a 'local.properties'
file.</echo>
</target>
<target name="validate-doc" unless="validation.skip"
depends="-validation-setup, -ivy-setup"
description="Validate specified DocBook source document">
<fail unless="doc.name"
message="Ant property 'doc.name' is required by target 'validate'."/>
<ivy:resolve conf="msv"/>
<!-- The resolve downloads and makes the 3rd party libs accessed by
our admc-rs-msv jar file through its manifests classpath entry. -->
<ivy:cachepath conf="admc-rs-msv" pathid="admc-rs-msv.cpref"/>
<pathconvert property="jar.file" refid="admc-rs-msv.cpref"/>
<java fork="true" failonerror="true"
jar="${jar.file}" dir="doc-src/${doc.name}">
<sysproperty key="xml.catalog.verbosity"
value="${xml.catalog.verbosity}"/>
<sysproperty key="xml.catalog.files" value="${xml.catalog.files}"/>
<sysproperty key="xml.catalog.prefer" value="${xml.catalog.prefer}"/>
<sysproperty key="xml.catalog.allowPI" value="${xml.catalog.allowPI}"/>
<sysproperty key="xml.catalog.staticCatalog"
value="${xml.catalog.staticCatalog}"/>
<jvmarg value="-Xss${java.threadstacksize}"/>
<arg value="-v"/>
<arg value="${dbxirng.url}"/>
<arg value="${doc.name}.xml"/>
</java>
</target>
<target name="validation-help" depends="-ivy-setup"
description="Display advice about validating files manually">
<ivy:resolve conf="msv"/>
<!-- The resolve downloads and makes the 3rd party libs accessed by
our admc-rs-msv jar file through its manifests classpath entry. -->
<ivy:cachepath conf="admc-rs-msv" pathid="admc-rs-msv.cpref"/>
<pathconvert property="jar.file" refid="admc-rs-msv.cpref"/>
<echo>'cd' to the directory containing the XML source files, and run
something like
java -Xss${java.threadstacksize} -Dxml.catalog.files=${xml.catalog.files} -jar ${jar.file} -v ${dbxirng.url} file.xml...
See the XML Commons docs about the Java System Properties to
use for XML catalog resolution:
http://xml.apache.org/commons/components/resolver/resolver-article.html#ctrlresolver
</echo>
</target>
<target name="refresh-verbatim"
description="Update files under doc-src/verbatim">
<!-- It's good to apply preservelastmodified to stuff under doc-src/,
but be very careful if applying it to doc/..., since that could
break our dependsets. -->
<copy todir="doc-src/verbatim" preservelastmodified="true">
<fileset dir=".">
<present targetdir="doc-src/verbatim"/>
</fileset>
</copy>
</target>
<target name="-validation-setup">
<fail message="Something is wrong. '-validation-setup' is abstract"/>
</target>
</project>