<?xml version="1.0"?>
<!-- ===========================================================================

                           * ================== *
                           |  FOP build system  |
                           * ================== *

Building instructions
=====================

First, make sure your current working directory is where this very file is
located. Then type

  ./build.sh (on unixes)
  build (on Windows)

If everything is right and all the required packages are visible, this action
will generate a file called "fop.jar" in the "./build" directory.

If you experience any problems with the build please visit the FOP website for
more information: http://xml.apache.org/fop


Build targets
=============

The build system is not only responsible for compiling Fop into a jar file,
but is also responsible for creating the HTML documentation, javadocs,
distributions and web site. In fact, the file you have here is _exactly_ what
is used by fop maintainers to take care of everything in the Fop
project, no less and no more.

Call the build script (see above) with the parameter "-projecthelp" to get a
list of possible build targets.

============================================================================ -->
<project default="all" basedir=".">

  <!-- used to set values for testing etc. -->
  <!-- build-local.properties is not stored in CVS and overrides values from build.properties -->
  <property file="${basedir}/build-local.properties"/>
  <property file="${basedir}/build.properties"/>

  <property name="optional.lib.dir" value="${basedir}/lib"/>

  <fileset dir="${basedir}" id="dist.bin">
    <include name="conf/**"/>
    <include name="docs/**"/>
    <include name="CHANGES"/>
    <include name="LICENSE"/>
    <include name="README"/>
    <include name="STATUS"/>
    <include name="fop.bat"/>
    <include name="fop.sh"/>
    <exclude name="src/**"/>
    <exclude name="dist/**"/>
    <exclude name="build/**"/>
    <exclude name="lib/**"/>
  </fileset>

  <fileset dir="${basedir}" id="dist.bin.lib">
    <include name="lib/xercesImpl-2.2.1.jar"/>
    <include name="lib/xalan-2.4.1.jar"/>
    <include name="lib/xml-apis.jar"/>
    <include name="lib/batik.jar"/>
    <include name="lib/avalon-framework*.jar"/>
  </fileset>

  <fileset dir="${basedir}" id="dist.src">
    <exclude name="lib/classes/**"/>
    <exclude name="lib/org/**"/>
    <exclude name="lib/src/**"/>
    <exclude name="build/**"/>
    <include name="src/**"/>
    <include name="conf/**"/>
    <include name="docs/**"/>
    <include name="lib/**"/>
    <include name="CHANGES"/>
    <include name="LICENSE"/>
    <include name="README"/>
    <include name="STATUS"/>
    <include name="build*"/>
    <include name="fop.bat"/>
    <include name="fop.sh"/>
  </fileset>

  <path id="libs-build-classpath">
    <fileset dir="${basedir}/lib">
      <include name="*.jar"/>
    </fileset>
    <fileset dir="${optional.lib.dir}">
      <include name="*.jar"/>
    </fileset>
  </path>

  <path id="libs-basic-run-classpath">
    <fileset dir="${basedir}/lib">
      <include name="*.jar"/>
      <exclude name="ant.jar"/>
    </fileset>
    <fileset dir="${optional.lib.dir}">
      <include name="*.jar"/>
    </fileset>
  </path>

  <path id="libs-run-classpath">
    <path refid="libs-basic-run-classpath"/>
    <fileset dir="${basedir}/build">
      <include name="fop.jar"/>
    </fileset>
  </path>

  <path id="checkstylepath">
    <fileset dir="${basedir}/lib">
      <include name="checkstyle-all-*.jar"/>
    </fileset>
    <fileset dir="${optional.lib.dir}">
      <include name="checkstyle-all-*.jar"/>
    </fileset>
  </path>

  <patternset id="exclude-jimi">
    <exclude name="org/apache/fop/image/JimiImage.java" unless="jimi.present"/>
  </patternset>

  <patternset id="exclude-jai">
    <exclude name="org/apache/fop/image/JAIImage.java" unless="jai.present"/>
  </patternset>

  <patternset id="exclude-jce-dependencies">
    <exclude name="org/apache/fop/pdf/PDFEncryptionJCE.java" unless="jce.present"/>
  </patternset>

  <patternset id="base-sources">
    <include name="**/*.java"/>
    <exclude name="**/*${ignore_this}"/>
  </patternset>

  <patternset id="graphics-configuration-source">
    <include name="org/apache/fop/svg/GraphicsConfiguration.java"/>
  </patternset>


  <!-- =================================================================== -->
  <!-- Initialization target                                               -->
  <!-- =================================================================== -->
  <target name="init" depends="init-avail, init-filters-jdk14, init-filters-jdk13">
    <tstamp/>
    <property name="Name" value="Fop"/>
    <property name="name" value="fop"/>
    <property name="NAME" value="FOP"/>
    <property name="version" value="1.0dev"/>
    <filter token="version" value="${version}"/>
    <property name="year" value="1999-2003"/>

    <echo message="------------------- ${Name} ${version} [${year}] ----------------"/>
    <echo message="See build.properties and build-local.properties for additional build settings"/>

    <property name="build.compiler" value="classic"/>
    <property name="debug" value="on"/>
    <property name="optimize" value="off"/>
    <property name="deprecation" value="on"/>

    <property name="textfontencoding" value="WinAnsiEncoding"/>

    <property name="src.dir" value="${basedir}/src"/>
    <property name="src.java" value="${src.dir}/java"/>
    <property name="src.codegen" value="${src.dir}/codegen"/>
    <property name="docs.dir" value="${basedir}/docs"/>
    <property name="xdocs.dir" value="${src.dir}/documentation/content/xdocs"/>
    <property name="fo.examples.dir" value="${basedir}/examples/fo/basic"/>
    <property name="lib.dir" value="${basedir}/lib"/>
    <property name="hyph.dir" value="${src.dir}/hyph"/>
    <property name="conf.dir" value="${basedir}/conf"/>
    <property name="packages" value="org.apache.fop.*"/>

    <property name="viewer.resources.src.dir" value="${src.java}/org/apache/fop/render/awt/viewer/resources"/>
    <property name="viewer.images.src.dir" value="${src.java}/org/apache/fop/render/awt/viewer/images"/>

    <property name="build.dir" value="${basedir}/build"/>
    <property name="build.src" value="${build.dir}/src"/>
    <property name="build.gensrc" value="${build.dir}/gensrc"/>
    <property name="build.docsrc" value="${build.dir}/docsrc"/>
    <property name="build.codegen" value="${build.src}/codegen"/>
    <property name="build.dest" value="${build.dir}/classes"/>
    <property name="build.docs" value="${build.dir}/docs"/>
    <property name="build.javadocs" value="${build.dir}/javadocs"/>
    <property name="build.examples.dir" value="${build.dir}/examples"/>

    <property name="viewer.resources.dest.dir" value="${build.dest}/org/apache/fop/render/awt/viewer/resources"/>
    <property name="viewer.images.dest.dir" value="${build.dest}/org/apache/fop/render/awt/viewer/Images"/>

    <property name="dist.bin.dir" value="${basedir}/dist-bin"/>
    <property name="dist.src.dir" value="${basedir}/dist-src"/>
    <property name="dist.bin.result.dir" value="${dist.bin.dir}/${Name}-${version}"/>
    <property name="dist.src.result.dir" value="${dist.src.dir}/${Name}-${version}"/>

    <property name="properties.dir" value="org/apache/fop/fo/properties"/>
    <property name="fonts.dir" value="org/apache/fop/fonts/base14"/>
    <property name="replacestring" value="org/apache/fop"/>
    <property name="ignore_this" value="ignore_this.dummy"/>
    <property name="jimi" value="JimiImage.java"/>
    <property name="jai" value="JAIImage.java"/>

    <property name="xslt" value="org.apache.xalan.xslt.Process"/>
    <property name="src.properties.xsl" value="${src.codegen}/properties.xsl"/>
    <property name="src.propmaker.xsl" value="${src.codegen}/propmaker.xsl"/>

    <property name="propinc.xsl" value="${src.codegen}/propinc.xsl"/>
    <property name="src.charlist.xsl" value="${src.codegen}/code-point-mapping.xsl"/>
    <property name="encodings.xml" value="${src.codegen}/encodings.xml"/>
    <property name="charlist.xsl" value="${src.codegen}/code-point-mapping.xsl"/>
    <property name="fontfile.xsl" value="${src.codegen}/font-file.xsl"/>
    <property name="t1fontfile.xsl" value="${src.codegen}/t1font-file.xsl"/>
    <property name="ttffontfile.xsl" value="${src.codegen}/ttffontfile.xsl"/>

    <property name="Courier.xml" value="${src.codegen}/Courier.xml"/>
    <property name="Courier-Oblique.xml" value="${src.codegen}/CourierOblique.xml"/>
    <property name="Courier-Bold.xml" value="${src.codegen}/CourierBold.xml"/>
    <property name="Courier-BoldOblique.xml" value="${src.codegen}/CourierBoldOblique.xml"/>
    <property name="Helvetica.xml" value="${src.codegen}/Helvetica.xml"/>
    <property name="Helvetica-Oblique.xml" value="${src.codegen}/HelveticaOblique.xml"/>
    <property name="Helvetica-Bold.xml" value="${src.codegen}/HelveticaBold.xml"/>
    <property name="Helvetica-BoldOblique.xml" value="${src.codegen}/HelveticaBoldOblique.xml"/>
    <property name="Times-Roman.xml" value="${src.codegen}/TimesRoman.xml"/>
    <property name="Times-Italic.xml" value="${src.codegen}/TimesItalic.xml"/>
    <property name="Times-Bold.xml" value="${src.codegen}/TimesBold.xml"/>
    <property name="Times-BoldItalic.xml" value="${src.codegen}/TimesBoldItalic.xml"/>
    <property name="ZapfDingbats.xml" value="${src.codegen}/ZapfDingbats.xml"/>
    <property name="Symbol.xml" value="${src.codegen}/Symbol.xml"/>

    <property name="tools.pkg" value="org/apache/fop/tools"/>

    <property name="main.class" value="org.apache.fop.apps.Fop"/>

  </target>

  <target name="init-avail">
    <echo message="${ant.version}"/>

    <available property="jimi.present" classname="com.sun.jimi.core.Jimi"
        classpathref="libs-build-classpath"/>
    <condition property="jimi.message" value="Jimi Support PRESENT">
      <equals arg1="${jimi.present}" arg2="true"/>
    </condition>
    <condition property="jimi.message" value="Jimi Support NOT Present">
      <not>
        <equals arg1="${jimi.present}" arg2="true"/>
      </not>
    </condition>
    <echo message="${jimi.message}"/>

    <available property="jai.present" classname="javax.media.jai.JAI"
        classpathref="libs-build-classpath"/>
    <condition property="jai.message" value="JAI Support PRESENT">
      <equals arg1="${jai.present}" arg2="true"/>
    </condition>
    <condition property="jai.message" value="JAI Support NOT Present">
      <not>
        <equals arg1="${jai.present}" arg2="true"/>
      </not>
    </condition>
    <echo message="${jai.message}"/>

    <available property="jce.present" classname="javax.crypto.Cipher"
        classpathref="libs-build-classpath"/>
    <condition property="jce.message" value="JCE Support PRESENT">
      <equals arg1="${jce.present}" arg2="true"/>
    </condition>
    <condition property="jce.message" value="JCE Support NOT Present">
      <not>
        <equals arg1="${jce.present}" arg2="true"/>
      </not>
    </condition>
    <echo message="${jce.message}"/>

    <available property="jdk14.present" classname="java.lang.CharSequence"/>

    <available property="junit.present" classname="junit.framework.TestCase"
        classpathref="libs-build-classpath"/>
    <condition property="junit.message" value="JUnit Support PRESENT">
      <equals arg1="${junit.present}" arg2="true"/>
    </condition>
    <condition property="junit.message" value="JUnit Support NOT Present - Committers are required to have JUnit working">
      <not>
        <equals arg1="${junit.present}" arg2="true"/>
      </not>
    </condition>
    <echo message="${junit.message}"/>
  </target>

  <target name="init-filters-jdk13" depends="init-avail" unless="jdk14.present">
    <echo message="Use GraphicsConfiguration adapter for JDK 1.3 or earlier."/>
    <path id="graphics-configuration-adapter">
      <pathelement location="src/java-1.3"/>
    </path>
  </target>

  <target name="init-filters-jdk14" depends="init-avail" if="jdk14.present">
    <echo message="Use GraphicsConfiguration adapter for JDK 1.4."/>
    <path id="graphics-configuration-adapter">
      <pathelement location="src/java-1.4"/>
    </path>
  </target>

  <!-- =================================================================== -->
  <!-- Help on usage                                                       -->
  <!-- =================================================================== -->
  <target name="usage">
    <echo message="Use the -projecthelp option instead"/>
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the build directory                                        -->
  <!-- =================================================================== -->
  <target name="prepare" depends="init">
    <!-- create directories -->
    <echo message="Preparing the build directories"/>
    <mkdir dir="${build.src}"/>
    <mkdir dir="${build.gensrc}"/>
    <mkdir dir="${build.gensrc}/${properties.dir}"/>
    <mkdir dir="${build.gensrc}/${fonts.dir}"/>
    <mkdir dir="${build.dest}/hyph"/>
  </target>


  <!-- =================================================================== -->
  <!-- Generate the source code                                            -->
  <!-- =================================================================== -->
  <target name="codegen" depends="prepare" description="Generates the java files from the xml resources">
    <!-- resetting codegen directory -->
    <echo message="Resetting codegen directory"/>

    <!-- copy codegen directory -->
    <!--copy todir="${build.codegen}">
      <fileset dir="${src.codegen}"/>
    </copy-->

    <!-- generate the java files from xml resources -->
    <echo message="Generating the java files from xml resources"/>

    <style in="${encodings.xml}" style="${charlist.xsl}"
        out="${build.gensrc}/${replacestring}/fonts//CodePointMapping.java"/>
    <!--
    <style basedir="src/codegen" includes="Helvetica*.xml,Times*.xml,Courier*.xml"
        style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14" extension=".java">
        <param name="encoding" expression="${textfontencoding}"/>
    </style>
    -->
    <style in="${Courier.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/Courier.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Courier-Oblique.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/CourierOblique.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Courier-Bold.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/CourierBold.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Courier-BoldOblique.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/CourierBoldOblique.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Helvetica.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/Helvetica.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Helvetica-Bold.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/HelveticaBold.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Helvetica-Oblique.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/HelveticaOblique.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Helvetica-BoldOblique.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/HelveticaBoldOblique.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Times-Roman.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/TimesRoman.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Times-Italic.xml}" style="${fontfile.xsl}"
        destdir="${build.gensrc}/${replacestring}/fonts/base14"
        out="${build.gensrc}/${replacestring}/fonts/base14/TimesItalic.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Times-Bold.xml}" style="${fontfile.xsl}"
        out="${build.gensrc}/${replacestring}/fonts/base14/TimesBold.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Times-BoldItalic.xml}" style="${fontfile.xsl}"
        out="${build.gensrc}/${replacestring}/fonts/base14/TimesBoldItalic.java">
      <param name="encoding" expression="${textfontencoding}"/>
    </style>
    <style in="${Symbol.xml}" style="${fontfile.xsl}"
        out="${build.gensrc}/${replacestring}/fonts/base14/Symbol.java"/>
    <style in="${ZapfDingbats.xml}" style="${fontfile.xsl}"
        out="${build.gensrc}/${replacestring}/fonts/base14/ZapfDingbats.java"/>

  </target>

  <!-- =================================================================== -->
  <!-- Compiles the source directory                                       -->
  <!-- =================================================================== -->
  <target name="compile-src" depends="codegen, prepare">
    <echo message="Compiling the sources "/>
    <!-- create directories -->
    <mkdir dir="${build.dest}"/>

    <mkdir dir="${viewer.resources.dest.dir}"/>
    <copy todir="${viewer.resources.dest.dir}">
      <fileset dir="${viewer.resources.src.dir}"/>
    </copy>
    <mkdir dir="${viewer.images.dest.dir}"/>
    <copy todir="${viewer.images.dest.dir}">
      <fileset dir="${viewer.images.src.dir}"/>
    </copy>

    <javac destdir="${build.dest}" debug="${debug}" deprecation="${deprecation}" optimize="${optimize}">
      <src path="${build.gensrc}"/>
      <src path="${src.java}"/>
      <patternset refid="exclude-jce-dependencies"/>
      <patternset refid="exclude-jai"/>
      <patternset refid="exclude-jimi"/>
      <classpath refid="libs-build-classpath"/>
      <patternset refid="base-sources"/>
      <src refid="graphics-configuration-adapter"/>
      <patternset refid="graphics-configuration-source"/>
    </javac>
  </target>

  <target name="compile" depends="compile-src" description="Compiles the source code"/>

  <!-- =================================================================== -->
  <!-- compiles hyphenation patterns                                       -->
  <!-- =================================================================== -->
  <target name="hyphenation" depends="prepare">
    <path id="hyph-classpath">
      <path refid="libs-build-classpath"/>
      <pathelement location="${build.dir}/classes"/>
    </path>
    <taskdef name="serHyph" classname="org.apache.fop.tools.anttasks.SerializeHyphPattern" classpathref="hyph-classpath"/>
    <serHyph includes="*.xml"
             sourceDir="${hyph.dir}"
             targetDir="${build.dest}/hyph"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the class package                                           -->
  <!-- =================================================================== -->
  <target name="package" depends="compile,hyphenation" description="Generates the jar files">
    <echo message="Creating the jar file ${build.dir}/${name}.jar"/>

    <tstamp>
      <format property="ts" pattern="yyyyMMdd-HHmmss-z"/>
    </tstamp>
    <pathconvert property="manifest-classpath" dirsep="/" pathsep=" " refid="libs-run-classpath">
      <map from="${basedir}${file.separator}lib${file.separator}" to=""/>
      <map from="${basedir}${file.separator}build${file.separator}fop.jar" to=""/>
      <map from="${optional.lib.dir}${file.separator}" to=""/>
    </pathconvert>

    <jar jarfile="${build.dir}/${name}.jar" basedir="${build.dest}" includes="org/**,hyph/**">
      <manifest>
        <attribute name="Main-Class" value="${main.class}"/>
        <attribute name="Class-Path" value="${manifest-classpath}"/>
        <attribute name="Implementation-Title" value="${Name}"/>
        <attribute name="Implementation-Version" value="${version}"/>
        <attribute name="Implementation-Vendor" value="Apache Software Foundation (http://xml.apache.org/fop/)"/>
        <attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}, Java ${java.runtime.version}])"/>
      </manifest>
    </jar>
  </target>

  <target name="servlet" depends="package" description="Generates the WAR with the sample FOP servlet">
    <echo message="Creating the WAR file"/>
    <war warfile="${build.dir}/fop.war" webxml="${src.dir}/conf/web.xml">
      <lib dir="${lib.dir}">
        <include name="avalon-framework*.jar"/>
        <include name="batik*.jar"/>
        <include name="commons-io*.jar"/>
      </lib>
      <lib dir="${build.dir}">
        <include name="fop.jar"/>
      </lib>
    </war>
  </target>

  <target name="transcoder-pkg" depends="compile" description="Generates the jar for the transcoder package for Batik">
    <echo message="Creating the jar file ${build.dir}/fop-transcoder.jar"/>

    <property name="fop-transcoder.name" value="FOP Transcoder Package"/>
    <property name="fop-transcoder.version" value="1.0beta2"/>
    <tstamp>
      <format property="ts" pattern="yyyyMMdd-HHmmss-z"/>
    </tstamp>

    <patternset id="transcoder-classes">
      <!-- General classes -->
      <patternset>
        <include name="org/apache/fop/apps/Document*"/>
        <include name="org/apache/fop/fo/FOTreeControl*"/>
        <include name="org/apache/fop/fo/FOTreeListener*"/>
        <include name="org/apache/fop/area/AreaTreeControl*"/>
        <include name="org/apache/fop/svg/**"/>
        <include name="org/apache/fop/fonts/**"/>
        <!--include name="org/apache/fop/layout/Font*.class"/-->
        <include name="org/apache/fop/image/FopImag*.class"/>
        <include name="org/apache/fop/image/Jpeg*"/>
        <include name="org/apache/fop/image/EPS*"/>
        <include name="org/apache/fop/image/Abstract*"/>
        <include name="org/apache/fop/image/analyser/*.class"/>
        <include name="org/apache/fop/util/CMYKColorSpace*.class"/>
        <include name="org/apache/fop/util/StreamUtilities.class"/>
        <include name="org/apache/fop/util/*OutputStream.class"/>
        <include name="org/apache/fop/util/Finalizable.class"/>
      </patternset>
      <!-- PDF transcoder -->
      <patternset>
        <include name="org/apache/fop/render/pdf/**"/>
        <exclude name="org/apache/fop/render/pdf/PDFRenderer.class"/>
        <exclude name="org/apache/fop/render/pdf/PDFXMLHandler*"/>
        <include name="org/apache/fop/pdf/**"/>
      </patternset>
      <!-- PS transcoder -->
      <patternset>
        <include name="org/apache/fop/render/ps/**"/>
        <exclude name="org/apache/fop/render/pdf/PSRenderer.class"/>
        <exclude name="org/apache/fop/render/pdf/PSXMLHandler*"/>
      </patternset>
    </patternset>

    <!-- lean transcoder jar -->
    <jar jarfile="${build.dir}/fop-transcoder.jar">
      <fileset dir="${build.dest}">
        <patternset refid="transcoder-classes"/>
      </fileset>
      <manifest>
        <attribute name="Implementation-Title" value="${fop-transcoder.name}"/>
        <attribute name="Implementation-Version" value="${fop-transcoder.version}"/>
        <attribute name="Implementation-Vendor" value="Apache Software Foundation (http://xml.apache.org/fop/)"/>
        <attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}, Java ${java.runtime.version}])"/>
      </manifest>
    </jar>

    <!-- all-in-one transcoder jar -->
    <property name="transcoder-deps" value="${build.dir}/transcoder-dependencies"/>
    <mkdir dir="${transcoder-deps}"/>
    <unjar dest="${transcoder-deps}">
      <patternset>
        <include name="org/apache/avalon/framework/*"/>
        <include name="org/apache/commons/io/CopyUtils.class"/>
        <include name="org/apache/commons/io/IOUtils.class"/>
        <include name="org/apache/commons/io/output/ProxyOutputStream.class"/>
        <include name="org/apache/commons/io/output/ByteArrayOutputStream.class"/>
        <include name="org/apache/commons/io/output/CountingOutputStream.class"/>
      </patternset>
      <fileset dir="${lib.dir}">
        <include name="commons-io*.jar"/>
        <include name="avalon-framework*.jar"/>
      </fileset>
    </unjar>
    <mkdir dir="${transcoder-deps}/legal"/>
    <copy todir="${transcoder-deps}/legal">
      <fileset dir="${lib.dir}">
        <include name="avalon.LICENSE.txt"/>
        <include name="commons-io.LICENSE.txt"/>
      </fileset>
    </copy>
    <jar jarfile="${build.dir}/fop-transcoder-allinone.jar">
      <fileset dir="${build.dest}">
        <patternset refid="transcoder-classes"/>
      </fileset>
      <fileset dir="${transcoder-deps}"/>
      <manifest>
        <attribute name="Implementation-Title" value="${fop-transcoder.name}"/>
        <attribute name="Implementation-Version" value="${fop-transcoder.version}"/>
        <attribute name="Implementation-Vendor" value="Apache Software Foundation (http://xml.apache.org/fop/)"/>
        <attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}, Java ${java.runtime.version}])"/>
      </manifest>
    </jar>
  </target>

  <target name="all" depends="package, servlet, transcoder-pkg, junit"/> <!-- "all" target for us Makefile converts ;-) -->

  <!-- =================================================================== -->
  <!-- Testing                                                             -->
  <!-- =================================================================== -->
  <target name="test" depends="package" description="Runs the test suite">
    <echo message="Testing build in jar file ${build.dir}/${name}.jar against reference"/>
    <property name="ref-version" value="1.0dev"/>
    <path id="testtask-classpath">
      <path refid="libs-build-classpath"/>
      <pathelement location="${build.dir}/classes"/>
    </path>
    <taskdef name="runTest" classname="org.apache.fop.tools.anttasks.RunTest" classpathref="testtask-classpath"/>
    <runTest testSuite="basictests.xml" basedir="test/" reference="test/reference/fop.jar"
         refVersion="${ref-version}"/>
    <runTest testSuite="bugtests.xml" basedir="test/" reference="test/reference/fop.jar"
         refVersion="${ref-version}"/>
<!--
    <runTest testSuite="testsuite.xml" basedir="TestSuite/NIST/" reference="test/reference/fop.jar"
         refVersion="${ref-version}"/>
    <runTest testSuite="testsuite.xml" basedir="TestSuite/contrib/IBM/" reference="test/reference/fop.jar"
         refVersion="${ref-version}"/>
    <runTest testSuite="testsuite.xml" basedir="TestSuite/contrib/FOP/" reference="test/reference/fop.jar"
         refVersion="${ref-version}"/>
    <runTest testSuite="testsuite.xml" basedir="TestSuite/contrib/XEP/" reference="test/reference/fop.jar"
         refVersion="${ref-version}"/>
    <runTest testSuite="testsuite.xml" basedir="TestSuite/contrib/XSLFormatter/" reference="test/reference/fop.jar"
         refVersion="${ref-version}"/>
-->
  </target>

  <target name="junit" depends="package, transcoder-pkg" description="Runs FOP's JUnit tests" if="junit.present">
    <mkdir dir="${build.dir}/test-classes"/>
    <javac destdir="${build.dir}/test-classes" debug="${debug}" deprecation="${deprecation}" optimize="${optimize}">
      <src path="${basedir}/test/java"/>
      <classpath>
        <path refid="libs-build-classpath"/>
        <fileset dir="${build.dir}">
          <include name="fop.jar"/>
        </fileset>
      </classpath>
    </javac>
    <echo message="Running basic functionality tests for fop-transcoder.jar"/>
    <mkdir dir="${build.dir}/test-reports/fop-transcoder"/>
    <junit>
      <sysproperty key="basedir" value="${basedir}"/>
      <formatter type="plain"/>
      <classpath>
        <pathelement location="${build.dir}/test-classes"/>
        <path refid="libs-basic-run-classpath"/>
        <fileset dir="${build.dir}">
          <include name="fop-transcoder.jar"/>
        </fileset>
      </classpath>
      <batchtest todir="${build.dir}/test-reports/fop-transcoder">
        <fileset dir="${build.dir}/test-classes">
          <include name="org/apache/fop/BasicTranscoderTestSuite.class"/>
        </fileset>
      </batchtest>
    </junit>
    <echo message="Running basic functionality tests for fop-transcoder-allinone.jar"/>
    <mkdir dir="${build.dir}/test-reports/fop-transcoder-allinone"/>
    <junit>
      <sysproperty key="basedir" value="${basedir}"/>
      <formatter type="plain"/>
      <classpath>
        <pathelement location="${build.dir}/test-classes"/>
        <fileset dir="build">
          <include name="fop-transcoder-allinone.jar"/>
        </fileset>
        <fileset dir="${lib.dir}">
          <include name="batik*.jar"/>
        </fileset>
      </classpath>
      <batchtest todir="${build.dir}/test-reports/fop-transcoder-allinone">
        <fileset dir="${build.dir}/test-classes">
          <include name="org/apache/fop/BasicTranscoderTestSuite.class"/>
        </fileset>
      </batchtest>
    </junit>
    <echo message="Running basic functionality tests for fop.jar"/>
    <mkdir dir="${build.dir}/test-reports/fop"/>
    <junit>
      <sysproperty key="basedir" value="${basedir}"/>
      <formatter type="plain"/>
      <classpath>
        <pathelement location="${build.dir}/test-classes"/>
        <path refid="libs-build-classpath"/>
        <fileset dir="build">
          <include name="fop.jar"/>
        </fileset>
      </classpath>
      <batchtest todir="${build.dir}/test-reports/fop">
        <fileset dir="${build.dir}/test-classes">
          <include name="org/apache/fop/BasicDriverTestSuite.class"/>
          <include name="org/apache/fop/UtilityCodeTestSuite.class"/>
        </fileset>
      </batchtest>
    </junit>
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the docs                                                   -->
  <!-- =================================================================== -->
  <target name="prepare-docs" depends="init">
    <mkdir dir="${build.docs}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the API documentation                                       -->
  <!-- =================================================================== -->
  <target name="javadocs" depends="prepare" description="Generates javadocs">
    <echo message="Producing the javadoc files "/>
    <mkdir dir="${build.javadocs}"/>

    <javadoc
        packagenames="${packages}"
        destdir="${build.javadocs}"
        classpathref="libs-build-classpath"
        author="true"
        version="true"
        windowtitle="${NAME} API"
        doctitle="Formatting Objects Processor (FOP)"
        bottom="Copyright &#169; ${year} Apache Software Foundation. All Rights Reserved."
        overview="${src.dir}/java/org/apache/fop/overview.html"
        use="true"
        failonerror="true">
      <sourcepath>
        <pathelement path="${src.java}"/>
        <pathelement path="${build.gensrc}"/>
        <path refid="graphics-configuration-adapter"/>
      </sourcepath>
      <group title="Control and Startup">
        <package name="org.apache.fop.apps"/>
        <package name="org.apache.fop.configuration"/>
        <package name="org.apache.fop.messaging"/>
        <package name="org.apache.fop.servlet"/>
      </group>
      <group title="XSL-FO Tree">
        <package name="org.apache.fop.fo"/>
        <package name="org.apache.fop.fo.*"/>
        <package name="org.apache.fop.datatypes"/>
        <package name="org.apache.fop.extensions"/>
      </group>
      <group title="Layout">
        <package name="org.apache.fop.layoutmgr"/>
        <package name="org.apache.fop.layoutmgr.*"/>
        <package name="org.apache.fop.layout"/>
        <package name="org.apache.fop.layout.*"/>
      </group>
      <group title="Area Tree">
        <package name="org.apache.fop.area"/>
        <package name="org.apache.fop.area.*"/>
      </group>
      <group title="Paginated Rendering">
        <package name="org.apache.fop.render"/>
        <package name="org.apache.fop.render.*"/>
        <package name="org.apache.fop.viewer"/>
      </group>
      <group title="Structural Rendering">
        <package name="org.apache.fop.render.rtf"/>
        <package name="org.apache.fop.render.mif"/>
      </group>
      <group title="Utility">
        <package name="org.apache.fop.pdf"/>
        <package name="org.apache.fop.tools"/>
        <package name="org.apache.fop.tools.*"/>
        <package name="org.apache.fop.svg"/>
        <package name="org.apache.fop.image"/>
        <package name="org.apache.fop.image.*"/>
        <package name="org.apache.fop.fonts"/>
        <package name="org.apache.fop.fonts.*"/>
        <package name="org.apache.fop.util"/>
      </group>
      <group title="RTFLib (formerly JFor) Subpackage Candidate">
        <package name="org.apache.fop.render.rtf.rtflib"/>
        <package name="org.apache.fop.render.rtf.rtflib.*"/>
      </group>
    </javadoc>
  </target>

  <target name="html" depends="javadocs, htmldoc" description="Generates javadocs and documentation in html format"/>

  <target name="htmldoc" depends="html-fop, html-design" description="Generates documentation in html format"/>

  <target name="html-fop" depends="prepare">
    <copy file="${xdocs.dir}/fop.xml" tofile="${xdocs.dir}/book.xml" filtering="on"/>
    <java classname="${doc.generator}" fork="yes">
      <classpath refid="libs-build-classpath"/>
      <arg line="targetDirectory=${docs.dir} ${xdocs.dir}/book.xml ${skins}"/>
    </java>
  </target>

  <target name="html-design" depends="prepare, html-newdesign,
    html-altdesign, html-understanding"/>

  <target name="html-newdesign" depends="prepare">
    <java classname="${doc.generator}" fork="yes">
      <classpath refid="libs-build-classpath"/>
      <arg line="targetDirectory=${docs}/design/ docs/design/book.xml ${skins}"/>
    </java>
  </target>

  <target name="html-altdesign" depends="prepare">
    <java classname="${doc.generator}" fork="yes">
      <classpath refid="libs-build-classpath"/>
      <arg line="targetDirectory=${docs}/design/alt.design/ docs/design/alt.design/book.xml ${skins}"/>
    </java>
  </target>

  <target name="html-understanding" depends="prepare">
    <java classname="${doc.generator}" fork="yes">
      <classpath refid="libs-build-classpath"/>
      <arg line="targetDirectory=${docs}/design/understanding docs/design/understanding/book.xml ${skins}"/>
    </java>
  </target>

  <target name="pdfdoc" depends="package" description="Generates the documentation in pdf format">
    <copy file="${xdocs}/fop.xml" tofile="${xdocs}/book.xml" filtering="on"/>
    <style in="${xdocs}/fop.xml" style="${xdocs}/xml2xml.xsl" out="${xdocs}/fop-doc.xml"/>
    <style in="${xdocs}/fop-doc.xml" style="${xdocs}/xml2pdf.xsl" out="${xdocs}/fop.fo"/>

    <java classname="org.apache.fop.apps.Fop" fork="yes">
      <classpath refid="libs-run-classpath"/>
      <arg line="-fo ${xdocs}/fop.fo -pdf ${xdocs}/fop.pdf"/>
    </java>
  </target>

  <!-- =================================================================== -->
  <!-- Checkstyle                                                          -->
  <!-- =================================================================== -->
  <target name="checkstyle" depends="prepare" description="Runs Checkstyle for a code quality report">
    <available property="checkstyle.available" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask" classpathref="checkstylepath"/>
    <fail message="Please put checkstyle-all-*.jar in the lib directory. Get it from http://checkstyle.sourceforge.net" unless="checkstyle.available"/>
    <taskdef name="checkstyle" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask" classpathref="checkstylepath"/>

    <checkstyle properties="checkstyle.cfg" failonviolation="false">
      <fileset dir="${src.java}" includes="org/apache/fop/**/*.java"/>
      <formatter type="plain" toFile="${build.dir}/checkstyle_report.txt"/>
      <formatter type="xml" toFile="${build.dir}/checkstyle_report.xml"/>
    </checkstyle>
    <available property="checkstyle.stylesheet.available" file="checkstyle-noframes.xsl"/>
    <antcall target="checkstyle-html"/>
  </target>

  <target name="checkstyle-html" if="checkstyle.stylesheet.available">
    <style in="${build.dir}/checkstyle_report.xml" out="${build.dir}/checkstyle_report.html" style="checkstyle-noframes.xsl"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the distribution                                            -->
  <!-- =================================================================== -->
  <target name="dist" depends="dist-src,dist-bin" description="Generates the distribution package"/>

  <target name="dist-bin" depends="all">
    <echo message="Building the binary distribution files (zip,tar)"/>
    <mkdir dir="${dist.bin.result.dir}"/>
    <copy todir="${dist.bin.result.dir}">
      <fileset refid="dist.bin"/>
      <fileset refid="dist.bin.lib"/>
    </copy>
    <mkdir dir="${dist.bin.result.dir}/build"/>
    <copy todir="${dist.bin.result.dir}/build" file="build/fop.jar"/>
    <chmod file="${dist.bin.result.dir}/fop.sh" perm="ugo+rx"/>

    <zip zipfile="${Name}-${version}-bin.zip" basedir="${dist.bin.dir}" includes="**"/>
    <tar tarfile="${Name}-${version}-bin.tar" basedir="${dist.bin.dir}" includes="**"/>
    <gzip zipfile="${Name}-${version}-bin.tar.gz" src="${Name}-${version}-bin.tar"/>
    <delete file="${Name}-${version}-bin.tar"/>
  </target>

  <target name="dist-src" depends="all, javadocs">
    <echo message="Building the source distribution files (zip,tar)"/>
    <mkdir dir="${dist.src.result.dir}"/>
    <copy todir="${dist.src.result.dir}">
      <fileset refid="dist.src"/>
    </copy>
    <copy todir="${dist.src.result.dir}/javadocs">
      <fileset dir="${build.javadocs}"/>
    </copy>
    <mkdir dir="${dist.src.result.dir}/build"/>
    <copy todir="${dist.src.result.dir}/build" file="build/fop.jar"/>
    <chmod file="${dist.src.result.dir}/build.sh" perm="ugo+rx"/>
    <chmod file="${dist.src.result.dir}/fop.sh" perm="ugo+rx"/>

    <zip zipfile="${Name}-${version}-src.zip" basedir="${dist.src.dir}" includes="**"/>
    <tar tarfile="${Name}-${version}-src.tar" basedir="${dist.src.dir}" includes="**"/>
    <gzip zipfile="${Name}-${version}-src.tar.gz" src="${Name}-${version}-src.tar"/>
    <delete file="${Name}-${version}-src.tar"/>
  </target>

  <!-- =================================================================== -->
  <!-- Generate example PDFs                                               -->
  <!-- =================================================================== -->
  <target name="examples" depends="package" description="Generates example PDF files">
    <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"
             classpathref="libs-run-classpath"/>
    <mkdir dir="${build.examples.dir}"/>
    <fop format="${build.property.examples.mime.type}" outdir="${build.examples.dir}"
         messagelevel="debug" basedir="${fo.examples.dir}">
      <fileset dir="${fo.examples.dir}">
        <include name="**/*.fo"/>
      </fileset>
    </fop>
  </target>

  <!-- =================================================================== -->
  <!-- Helper task to generate source files that have already been         -->
  <!-- checked into CVS.  For these files, CVS version is the official one -->
  <!-- and may have updates that will *not* be generated by below.  This   -->
  <!-- target should never be part of the normal build process.            -->
  <!-- =================================================================== -->
  <target name="xsltToJava" >
    <style in="src\codegen\constants.xml" style="src\codegen\constants.xsl"
        out="Constants.java"/>
    <style in="src/codegen/foelements.xml" style="src/codegen/property-sets.xsl"
        out="PropertySets.java"/>
  </target>

  <!-- =================================================================== -->
  <!-- Special target for Gump                                             -->
  <!-- =================================================================== -->
  <target name="gump" depends="all, javadocs"/>
  <!-- =================================================================== -->
  <!-- Clean targets                                                       -->
  <!-- =================================================================== -->
  <target name="clean" depends="init" description="Cleans the build directory">
    <delete dir="${build.dir}"/>
  </target>

  <target name="distclean" depends="clean" description="Cleans the distribution target directories">
    <delete dir="${dist.src.dir}"/>
    <delete dir="${dist.bin.dir}"/>
    <delete>
      <fileset dir="${basedir}" includes="${Name}-*.tar.gz"/>
      <fileset dir="${basedir}" includes="${Name}-*.zip"/>
    </delete>
  </target>

  <target name="validate-xdocs" depends="init" description="Validate the
xdocs. Point schemas.dir to Forrest's 'schemas' directory.">
    <property name="schemas.dir" value="../xml-forrest/src/resources/schema"/>
    <xmlvalidate failonerror="no">
      <fileset dir="${xdocs.dir}" includes="**.xml"/>
      <xmlcatalog>
        <entity publicId="-//APACHE//DTD Compliance V1.0//EN"
          location="src/documentation/resources/schema/dtd/compliance-v10.dtd"/>
        <entity publicId="-//APACHE//DTD Documentation V1.1//EN"
          location="${schemas.dir}/dtd/document-v11.dtd"/>
        <entity publicId="-//APACHE//DTD Specification V1.1//EN"
          location="${schemas.dir}/dtd/specification-v11.dtd"/>
        <entity publicId="-//APACHE//DTD FAQ V1.1//EN"
          location="${schemas.dir}/dtd/faq-v11.dtd"/>
        <entity publicId="-//APACHE//DTD Changes V1.1//EN"
          location="${schemas.dir}/dtd/changes-v11.dtd"/>
        <entity publicId="-//APACHE//DTD Todo V1.1//EN"
          location="${schemas.dir}/dtd/todo-v11.dtd"/>
        <entity publicId="-//APACHE//DTD Cocoon Documentation Book V1.0//EN"
          location="${schemas.dir}/dtd/book-cocoon-v10.dtd"/>
        <entity publicId="-//APACHE//DTD Cocoon Documentation Tab V1.0//EN"
          location="${schemas.dir}/dtd/tab-cocoon-v10.dtd"/>
        <entity publicId="-//APACHE//DTD How-to V1.0//EN"
          location="${schemas.dir}/dtd/howto-v10.dtd"/>
        <entity publicId="-//APACHE//DTD Gump Descriptor V1.0//EN"
          location="${schemas.dir}/dtd/xgump-draft.dtd"/>
        <entity publicId="-//APACHE//DTD JavaDoc V1.0//EN"
          location="${schemas.dir}/dtd/javadoc-v04draft.dtd"/>
        <entity publicId="-//APACHE//DTD Contributors V1.0//EN"
          location="${schemas.dir}/dtd/contributors-v10.dtd"/>
        <entity publicId="-//Outerthought//DTD Libre Configuration V0.1//EN"
          location="${schemas.dir}/dtd/libre-v01.dtd"/>
        <entity publicId="-//APACHE//ENTITIES Documentation V1.1//EN"
          location="${schemas.dir}/dtd/document-v11.mod"/>
        <entity publicId="-//APACHE//ENTITIES FAQ V1.1//EN"
          location="${schemas.dir}/dtd/faq-v11.mod"/>
        <entity publicId="-//APACHE//ENTITIES Todo V1.1//EN"
          location="${schemas.dir}/dtd/todo-v11.mod"/>
        <entity publicId="-//APACHE//ENTITIES Common Elements V1.0//EN"
          location="${schemas.dir}/dtd/common-elems-v10.mod"/>
        <entity publicId="-//APACHE//ENTITIES Common Character Entity Sets V1.0//EN"
          location="${schemas.dir}/dtd/common-charents-v10.mod"/>

        <entity publicId="ISO 8879-1986//ENTITIES Added Latin 1//EN//XML"
          location="${schemas.dir}/entity/ISOlat1.pen"/>
        <entity publicId="ISO 9573-15:1993//ENTITIES Greek Letters//EN//XML"
          location="${schemas.dir}/entity/ISOgrk1.pen"/>
        <entity publicId="ISO 8879:1986//ENTITIES Publishing//EN//XML"
          location="${schemas.dir}/entity/ISOpub.pen"/>
        <entity publicId="ISO 8879:1986//ENTITIES General Technical//EN//XML"
          location="${schemas.dir}/entity/ISOtech.pen"/>
        <entity publicId="ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
          location="${schemas.dir}/entity/ISOnum.pen"/>
        <entity publicId="ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
          location="${schemas.dir}/entity/ISOdia.pen"/>
        <entity publicId="ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
          location="${schemas.dir}/entity/ISOlat1.pen"/>
      </xmlcatalog>
    </xmlvalidate>
  </target>
  
</project>
