<?xml version="1.0" encoding="utf-8"?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->

<!-- ===================================================================

   Build file for Xalan-J 2.x - for use with the Jakarta Ant java build tool
   
Setup instructions: 
   Before running an Ant build, you must
   
     - set the JAVA_HOME environment variable to the JDK root directory
     - To build 'servlet' sample: Include Servlet SDK in your classpath
     - To build docs/javadocs/xsltc: use JDK 1.2.x or higher
   
Build Instructions:   
  To build, run
    build.bat (win32) or build.sh (unix) [antoptions] [targets]
  in the directory where this file is located; you should also be 
  able to use an installation of Ant v1.4.1 or later.
   
  build -projecthelp  will show a list of supported targets.
   
  Developers: include a description="" attribute in all user-callable targets.
        
  If you build a target that depends on other targets, those other 
  targets are *usually* created in the correct order; however a 
  few of the larger targets like dist do not list all dependencies.

Other Important Notes:
- 'dist' produces a .tar file that works with GNU compatible tar 
  programs, because that's what Ant does when it finds a path that's 
  longer than 100 characters (like in our docs).  Sorry!
  
- External build maintainers: look for GUMP: comments; developers 
  please use great caution when changing these lines!

- Unusual build items: the docs and xsltc.compile targets leave 
  cruft in the source areas; various clean targets get most of this.
  
Authors:
  Shane Curcuru <shane_curcuru@lotus.com>
  Don Leslie <donald_leslie@lotus.com>

$Id$
==================================================================== -->

<project name="Xalan" default="jar" basedir=".">

  <property name="name"                   value="xalan"/>
  <property name="year"                   value="2014"/>
  <property name="build.debug"            value="on"/>
  <property name="compiler.target"        value="1.3"/>
  <property name="compiler.source"        value="1.3"/>

  <!-- Xalan Java version information -->
  <property name="version.VERSION"        value="2"/>
  <property name="version.RELEASE"        value="7"/>
  <property name="version.DEVELOPER"      value=""/><!-- Set this to 'D' if a developer release; blank "" if maintenance release -->
  <property name="version.MINOR"          value="2"/><!-- EITHER the developer release number, or a maintenance release number -->
  <property name="version"                value="${version.VERSION}_${version.RELEASE}_${version.DEVELOPER}${version.MINOR}"/><!-- GUMP: version # of dist file -->
  <property name="impl.version"           value="${version.VERSION}.${version.RELEASE}.${version.DEVELOPER}${version.MINOR}"/><!-- Used in jar task for filtering MANIFEST.MF file -->
  
  <!-- Xerces Java version information -->
  <property name="parser.version.VERSION" value="2"/>
  <property name="parser.version.RELEASE" value="11"/>
  <property name="parser.version.MINOR"   value="0"/> 
  
  <!-- Xalan Java directories -->  
  <!--  <property name="bin.dir"                value="./bin"/> -->
  <property name="build.dir"              value="./build"/> 
  <property name="lib.dir"                value="./lib"/>   
  <property name="endorsed.dir"           value="${lib.dir}/endorsed"/>   
  <property name="samples.dir"            value="./samples"/>   
  <property name="src.dir"                value="./src"/>  
  <property name="tools.dir"              value="./tools"/> 
  <property name="xdocs.dir"              value="./xdocs"/>
    
  <property name="apachexml.reldir"       value="org/apache/xml"/>
  <property name="serializer.reldir"      value="org/apache/xml/serializer"/>
  <property name="xpath.reldir"           value="org/apache/xpath"/>
  <property name="xalan.reldir"           value="org/apache/xalan"/>
  <property name="domxpath.reldir"        value="org/w3c/dom/xpath"/>
  <property name="xsltc.reldir"           value="${xalan.reldir}/xsltc"/>  

  <!-- Jars to run Xalan Java (Interpretive, Compiled, or both) -->
  <property name="xmlapis.jar.name"       value="xml-apis.jar"/>
  <property name="xmlapis.jar"            value="${endorsed.dir}/${xmlapis.jar.name}"/>
  <property name="parser.jar.name"        value="xercesImpl.jar"/>
  <property name="parser.jar"             value="${endorsed.dir}/${parser.jar.name}"/>
  <property name="bcel.jar.name"          value="BCEL.jar"/>
  <property name="bcel.jar"               value="${lib.dir}/${bcel.jar.name}"/>
  <property name="runtime.jar.name"       value="runtime.jar"/>
  <property name="runtime.jar"            value="${lib.dir}/${runtime.jar.name}"/>
  <property name="regexp.jar.name"        value="regexp.jar"/>
  <property name="regexp.jar"             value="${lib.dir}/${regexp.jar.name}"/>
  
  <!-- Jars to build Xalan Java (Interpretive, Compiled, or both) or build the docs -->
  <property name="java_cup.jar.name"      value="java_cup.jar"/>
  <property name="java_cup.jar"           value="${tools.dir}/${java_cup.jar.name}"/>
  <property name="jlex.jar.name"          value="JLex.jar"/>
  <property name="jlex.jar"               value="${tools.dir}/${jlex.jar.name}"/>  
  <property name="stylebook.jar.name"     value="stylebook-1.0-b3_xalan-2.jar"/>
  <property name="stylebook.jar"          value="${tools.dir}/${stylebook.jar.name}"/>
  <property name="doclet.jar.name"        value="xalan2jdoc.jar"/>
  <property name="doclet.jar"             value="${tools.dir}/${doclet.jar.name}"/>
  <property name="taglet.jar.name"        value="xalan2jtaglet.jar"/>
  <property name="taglet.jar"             value="${tools.dir}/${taglet.jar.name}"/>

  <!-- Jars to build Xalan Java samples -->
  <property name="servlet-api.jar.name"   value="servlet-api-2.5.jar"/>
  <property name="servlet-api.jar"        value="${lib.dir}/${servlet-api.jar.name}"/>
  <property name="javaee-api.jar.name"    value="javaee-api-5.0-2.jar"/>
  <property name="javaee-api.jar"         value="${lib.dir}/${javaee-api.jar.name}"/>
  <property name="brazil.jar.name"        value="brazil-2.1.jar"/>
  <property name="brazil.jar"             value="${lib.dir}/${brazil.jar.name}"/>
 
  <!-- Relative locations of source directories -->
  <property name="manifest.mf"            value="./src/MANIFEST.MF"/>
  <property name="manifest.xsltc.mf"      value="./src/manifest.xsltc"/>
  <property name="manifest.xalan-interpretive.mf" value="./src/manifest.xalan-interpretive"/>  
  <property name="XSLTInfo.props"         value="./src/org/apache/xalan/res/XSLTInfo.properties"/>  
  <property name="generated.xpathparser"  value="${src.dir}/${xsltc.reldir}/compiler/XPathParser.java"/>
  <property name="generated.xpathlexer"   value="${src.dir}/${xsltc.reldir}/compiler/XPathLexer.java"/>
  <property name="generated.xpathsym"     value="${src.dir}/${xsltc.reldir}/compiler/sym.java"/>
  
  <!-- Build and distribution output areas -->
  <property name="build.xalan.jar"              value="${build.dir}/${name}.jar"/><!-- GUMP: actual path/name of jar target output -->
  <property name="build.xalan-unbundled.jar"    value="${build.dir}/${name}-unbundled.jar"/>
  <property name="build.xalan-interpretive.jar" value="${build.dir}/${name}.jar"/>
  <property name="build.xsltc.jar"              value="${build.dir}/xsltc.jar"/>
  <property name="build.classes"                value="${build.dir}/classes"/>
  <property name="build.docs"                   value="${build.dir}/docs"/>
  <property name="build.samples"                value="${build.dir}/samples"/>
  <property name="build.servlet"                value="${build.samples}/servlet"/>
  <property name="build.apidocs"                value="${build.docs}/apidocs"/>
  <property name="dist.pkg"                     value="${name}-j_${version}"/><!-- GUMP: actual path/name of dist target .tar.gz/.zip-->
  <property name="dist.file"                    value="${dist.pkg}"/>
  <property name="dist.dir"                     value="${build.dir}/${dist.pkg}"/>
  
  <!-- xml-commons sources (for Javadoc) -->                                                                        
  <property name="xml-commons-srcs.tar.gz"      value="${src.dir}/xml-commons-external-1.3.02-src.tar.gz"/>
  <property name="xml-commons-srcs.tar"         value="${build.dir}/xml-commons-external-1.3.02-src.tar"/>
 
  <!-- Documentation and samples information  -->
  <property name="Name-in-docs"                 value="Xalan-Java"/>
  <property name="version.file"                 value="${xalan.reldir}/processor/XSLProcessorVersion.java"/>
  
  <property name="build.samples.jar"            value="${build.dir}/xalansamples.jar"/>
  <property name="build.servlet.war"            value="${build.dir}/xalanservlet.war"/>
  <property name="build.xsltc.applet.jar"       value="${build.dir}/xsltcapplet.jar"/>
  <property name="build.xsltc.brazil.jar"       value="${build.dir}/xsltcbrazil.jar"/>
  <property name="build.xsltc.ejb.jar"          value="${build.dir}/xsltcejb.jar"/>
  <property name="build.xsltc.servlet.jar"      value="${build.dir}/xsltcservlet.jar"/>
  
  <property name="xdocs.book"                   value="${xdocs.dir}/sources/xalan-jlocal.xml"/>
  <property name="xdocs.style"                  value="${xdocs.dir}/style"/>
  <property name="xalanonly-styledocs"
            value="dtd/xsl-html40s.dtd,dtd/spec.dtd,stylesheets/patterns.xsl,stylesheets/notice.xsl,stylesheets/spec.xsl,stylesheets/done.xsl,loaderdesign.xml,stylesheets/design2project.xsl,stylesheets/designdoc2html.xsl,stylesheets/xml2fo.xsl"/>
  <property name="xalan.cmdline.class"          value="org.apache.xalan.xslt.Process"/>
  <property name="doc.generator"                value="org.apache.stylebook.StyleBook"/>
  <property name="doc.generator.styletargz"     value="${xdocs.dir}/xml-site-style.tar.gz"/>
  <property name="doc.generator.styletar"       value="${xdocs.dir}/xml-site-style.tar"/>
  
  <property name="site.root"                    value="./xml-site"/>
  <property name="site.dir"                     value="${site.root}/target/xalan-j"/>
  <property name="site.book"                    value="${xdocs.dir}/sources/xalan-jsite.xml"/>
  
  <property name="xalan.apache.org.site.root"   value="./xalan-apache-org-site"/>
  <property name="xalan.apache.org.site.dir"    value="${xalan.apache.org.site.root}/target/xalan-apache-org"/>
  <property name="xalan.apache.org.site.book"   value="${xdocs.dir}/sources/xalan-apache-org-site.xml"/>  
  
  
  <property name="xdocs.DONE.file"              value="${xdocs.dir}/sources/xalan/DONE"/>
  <property name="xdocs.XSLTCDONE.file"         value="XSLTCDONE"/>
  <property name="xdocs.XSLTCDONE.location"     value="${xdocs.dir}/sources/xalan/${xdocs.XSLTCDONE.file}"/>

      
  <!-- PROPERTIES TO COMPILE THE SERIALIZER  ======================================= -->  
  <property name="serializer.src.dir"           value="./src"/>
  <property name="serializer.build.dir"         value="./build"/> 
  <property name="serializer.build.classes"     value="${serializer.build.dir}/serializer"/> 
  
  <!-- PROPERTIES TO MAKE THE SERIALIZER JAR ======================================= -->
  <property name="serializer.manifest.basename" value="MANIFEST.SERIALIZER"/> 
  <property name="serializer.manifest"          value="${serializer.src.dir}/${serializer.manifest.basename}"/>
  <property name="serializer.impl.version"      value="${impl.version}"/>
  <property name="serializer.java.version"      value="${java.version}"/>
  <property name="serializer.java.vendor"       value="${java.vendor}"/>
  <property name="serializer.jar.name"          value="serializer.jar"/>   
  <property name="build.serializer.jar"         value="${serializer.build.dir}/${serializer.jar.name}"/> 
  <property name="lib.serializer.jar"           value="./lib/${serializer.jar.name}"/>   
 
  <!-- Class paths used in various targets -->
  <path id="docs.class.path">
    <pathelement location="${xmlapis.jar}" />
    <pathelement location="${parser.jar}" />
    <pathelement location="${bcel.jar}" />
    <pathelement location="${runtime.jar}" />
    <pathelement location="${stylebook.jar}" />
    <pathelement location="${doclet.jar}" />
    <pathelement location="${taglet.jar}" />
    <pathelement location="${build.serializer.jar}" />
    <pathelement location="${build.xalan.jar}" />
    <pathelement path="${java.class.path}" />
  </path>
  <path id="samples.class.path">
    <pathelement location="${xmlapis.jar}" />
    <pathelement location="${build.serializer.jar}" />    
    <pathelement location="${parser.jar}" />  
    <pathelement location="${build.xalan.jar}" />
    <pathelement path="${java.class.path}" />
  </path>
  <path id="compile.class.path">
    <!-- Ensure the selected parser.jar file is used to compile against -->
    <pathelement location="${build.classes}" />
    <pathelement location="${serializer.build.classes}" />    
    <pathelement location="${xmlapis.jar}" />
    <pathelement location="${build.serializer.jar}" />
    <pathelement location="${parser.jar}" />
    <pathelement path="${java.class.path}" />
  </path>
  <path id="xslt.boot.class.path">
    <!-- Put this version of xalan in front of the jdk's for JDK 1.4+ -->
    <!-- Set build.boot.class.path to a JDK 1.1.x classes.zip file to check
         compatibility with 1.1.x.  If you omit this property, compatability
         with 1.1.x will not be checked even though javac specifies a target of 1.1 -->
    <pathelement location="${build.classes}" />
    <pathelement location="${serializer.build.classes}" />
    <pathelement location="${xmlapis.jar}" />
    <pathelement location="${build.serializer.jar}" />    
    <pathelement location="${parser.jar}" />   
    <pathelement path="${build.boot.class.path}" />
    <pathelement path="${sun.boot.class.path}" />
  </path>
  <path id="compile.source.path">
    <dirset dir="${src.dir}" includes="/org/apache/**" />
  </path>

  <!-- patternsets for source and binary distribution packages -->
  <patternset id="bin-distro" >
    <include name="${dist.file}/LICENSE.txt"/>
    <include name="${dist.file}/NOTICE.txt"/>
    <include name="${dist.file}/readme.html"/>
    <include name="${dist.file}/xalan.jar"/>
    <!-- xsltc.jar will only be picked up if it has been built -->
    <include name="${dist.file}/xsltc.jar"/>     
    <include name="${dist.file}/${xmlapis.jar.name}"/>
    <include name="${dist.file}/${parser.jar.name}"/>
    <include name="${dist.file}/${serializer.jar.name}"/>
    <include name="${dist.file}/samples/"/>    
    <include name="${dist.file}/samples/xalansamples.jar"/>
    <include name="${dist.file}/samples/xalanservlet.war"/>
    <include name="${dist.file}/samples/xsltcapplet.jar"/>
    <include name="${dist.file}/samples/xsltcbrazil.jar"/>
    <include name="${dist.file}/samples/xsltcejb.jar"/>
    <include name="${dist.file}/samples/xsltcservlet.jar"/>
    <include name="${dist.file}/docs/"/>
  </patternset>
  <patternset id="bin-distro-nodocs" >
    <include name="${dist.file}/LICENSE.txt"/>
    <include name="${dist.file}/NOTICE.txt"/>
    <include name="${dist.file}/readme.html"/>
    <include name="${dist.file}/xalan.jar"/>
    <!-- xsltc.jar will only be picked up if it has been built -->
    <include name="${dist.file}/xsltc.jar"/>    
    <include name="${dist.file}/${xmlapis.jar.name}"/>
    <include name="${dist.file}/${parser.jar.name}"/>
    <include name="${dist.file}/${serializer.jar.name}"/>
    <include name="${dist.file}/samples/"/>        
    <include name="${dist.file}/samples/xalansamples.jar"/>
    <include name="${dist.file}/samples/xalanservlet.war"/>
    <include name="${dist.file}/samples/xsltcapplet.jar"/>
    <include name="${dist.file}/samples/xsltcbrazil.jar"/>
    <include name="${dist.file}/samples/xsltcejb.jar"/>
    <include name="${dist.file}/samples/xsltcservlet.jar"/>
  </patternset>
  <patternset id="src-distro" >
    <include name="${dist.file}/LICENSE.txt"/>
    <include name="${dist.file}/NOTICE.txt"/>      
    <include name="${dist.file}/build.*"/>
    <include name="${dist.file}/commits.xml"/>
    <include name="${dist.file}/KEYS"/>
    <include name="${dist.file}/readme.html"/>  
    <include name="${dist.file}/lib/"/>
    <include name="${dist.file}/tools/"/>
    <include name="${dist.file}/samples/"/>
    <exclude name="${dist.file}/samples/xalansamples.jar"/>
    <exclude name="${dist.file}/samples/xalanservlet.war"/>
    <exclude name="${dist.file}/samples/xsltcapplet.jar"/>
    <exclude name="${dist.file}/samples/xsltcbrazil.jar"/>
    <exclude name="${dist.file}/samples/xsltcejb.jar"/>
    <exclude name="${dist.file}/samples/xsltcservlet.jar"/>    
    <include name="${dist.file}/src/"/>
    <include name="${dist.file}/xdocs/"/>
  </patternset>

  <!-- XSLTC engine dependency .jar files -->    
  <patternset id="xsltc-deps-jars" >
    <include name="${dist.file}/lib/${bcel.jar.name}"/>
    <include name="${dist.file}/tools/${java_cup.jar.name}"/>
    <include name="${dist.file}/tools/${jlex.jar.name}"/>
    <include name="${dist.file}/lib/${runtime.jar.name}"/>
    <include name="${dist.file}/lib/${regexp.jar.name}"/>
  </patternset>

  <!-- =================================================================== -->
  <!-- Creates output build directories and doc prerequistes               -->
  <!-- =================================================================== -->
  <target name="prepare">
    <echo message="Project:${Name-in-docs} version:${version} build.xml $Revision$"/>
    <mkdir dir="${build.dir}"/>
    <mkdir dir="${build.classes}"/>
    <!-- Note that all testing-related targets *must* depend on 
         this target, either directly or indirectly, to get 
         the tests-available property set for them.
    -->
    <available file="${test.relpath}" property="tests-available" />
    <available property="xerces.present" 
      classname="org.apache.xerces.parsers.SAXParser"/>
      
    <!-- Update version information.  This copies the Version.src
         file into Version.java, while replacing the following tokens
    -->
    <filter token="version.VERSION"          value="${version.VERSION}"/>  
    <filter token="version.RELEASE"          value="${version.RELEASE}"/>
    <filter token="version.MINOR"            value="${version.MINOR}"/>
    <filter token="version.DEVELOPER"        value="${version.DEVELOPER}"/> 
    <filter token="parser.version.VERSION"   value="${parser.version.VERSION}"/>  
    <filter token="parser.version.RELEASE"   value="${parser.version.RELEASE}"/>
    <filter token="parser.version.MINOR"     value="${parser.version.MINOR}"/>    
    <copy tofile="${src.dir}/${xalan.reldir}/Version.java" file="${src.dir}/${xalan.reldir}/Version.src" filtering="true"/>
    <copy tofile="${src.dir}/${xalan.reldir}/processor/XSLProcessorVersion.java" file="${src.dir}/${xalan.reldir}/processor/XSLProcessorVersion.src" filtering="true"/>    
    <copy tofile="${src.dir}/${serializer.reldir}/Version.java" file="${src.dir}/${serializer.reldir}/Version.src" filtering="true"/>
    <copy tofile="${xdocs.dir}/sources/entities.ent" file="${xdocs.dir}/sources/entities.src" filtering="true"/>
  </target>

  <!-- Must depend on jar since we use Xalan to process xml files -->
  <target name="prepare.docs" depends="jar,prepare.docs.nojardepends"/>
  
  <target name="prepare.docs.nojardepends">  
    <mkdir dir="${build.docs}"/> 
    <mkdir dir="${build.apidocs}"/>

    <gunzip src="${doc.generator.styletargz}"/>
    <untar src="${doc.generator.styletar}" dest="${xdocs.dir}"/>
    <delete file="${doc.generator.styletar}"/>

    <!-- We use a sed script to extract Xalan-Java 2 commits from the repository into commits.xml
         The following operation transforms commits.xml (just including source code commits) and 
         puts the result in xdocs/sources/xalan for inclusion in the readme.xml -->      
    <echo message="Transform commits.xml and put the result in ${xdocs.dir}"/>
    <java fork="yes" classname="${xalan.cmdline.class}" >
      <classpath refid="docs.class.path" />
      <arg line="-in commits.xml -xsl ${xdocs.style}/stylesheets/done.xsl -out ${xdocs.DONE.file} -param xsltcdone ${xdocs.XSLTCDONE.file}"/>
    </java>
    <echo message="Generate Xalan-J 2.x design document"/>
    <java fork="yes" classname="${doc.generator}" >
      <classpath refid="docs.class.path" />
      <arg line="loaderConfig=sbk:/style/loaderdesign.xml targetDirectory=./build/docs/design/
                 ./xdocs/sources/xalandesign.xml ./xdocs/style"/>
    </java>
  </target>

  <!-- =================================================================== -->
  <!-- Compile the DTM implementation and xml utilities                    -->
  <!-- =================================================================== -->
    <target name="xml.compile" depends="prepare,serializer.jar">
    <echo message="Compiling DTM implementation and utilities" />
    <javac srcdir="${src.dir}"
           destdir="${build.classes}"
           debug="${build.debug}" 
    	   target="${compiler.target}" source="${compiler.source}">
      <include name="${apachexml.reldir}/**/*.java" />
      <!-- exclude the serializer -->
      <exclude name="${serializer.reldir}/**/*.java" />      
      <!-- Exclude file that depends upon presence of Xerces in build path -->
      <exclude name="**/IncrementalSAXSource_Xerces.java" 
        unless="xerces.present"	 />
      <classpath refid="compile.class.path" />
      <bootclasspath refid="xslt.boot.class.path" />
    </javac>
    <!-- Copy needed properties, resource, etc. files to be put into .jar file -->
    <copy todir="${build.classes}">
      <fileset dir="${src.dir}" 
          includes="${apachexml.reldir}/**/*.properties" 
          excludes="${serializer.reldir}/**/*.properties"
      />
    </copy>  
  </target>
  
  <!-- =================================================================== -->
  <!-- Compile the Xalan interpreter source tree                           -->
  <!-- =================================================================== -->
  <target name="xalan-interpretive.compile" depends="xml.compile"
    description="Compile the Xalan interpretive classes (skips XSLTC)" >
    <echo message="Compiling Xalan interpretive classes" />
    <javac srcdir="${src.dir}" 
           destdir="${build.classes}"
           debug="${build.debug}" 
    	   target="${compiler.target}" source="${compiler.source}">
      <include name="${xpath.reldir}/**/*.java" />
      <include name="${domxpath.reldir}/**/*.java" />
      <include name="${xalan.reldir}/**/*.java" />
      <exclude name="${xsltc.reldir}/**/*.java" />
      <classpath refid="compile.class.path" />
      <bootclasspath refid="xslt.boot.class.path" />
      <sourcepath refid="compile.source.path" />
    </javac>
    <!-- Copy needed properties, resource, etc. files to be put into .jar file -->
    <copy todir="${build.classes}">
      <fileset dir="${src.dir}" includes="**/*.properties,META-INF/services/*" excludes="**/XSLTInfo.properties"/>
    </copy>  
    <filter token="impl.version" value="${impl.version}"/>
    <copy todir="${build.classes}/org/apache/xalan/res" file="${XSLTInfo.props}" filtering="true"/>
  </target>
  
  <!-- Compile all java sources (Xalan interpretive and XSLTC) -->
  <target name="compile" depends="xalan-interpretive.compile,xsltc.compile"
    description="Compile all java source files (Xalan interpretive + XSLTC)" >
  </target>

  <!-- =================================================================== -->
  <!-- Compile just the XSLTC compiler portion                             -->
  <!-- =================================================================== -->
  <path id="xsltc.class.path">
    <pathelement location="${xmlapis.jar}" />
    <pathelement location="${build.serializer.jar}" />
    <pathelement location="${bcel.jar}" />
    <pathelement location="${jlex.jar}" />
    <pathelement location="${java_cup.jar}" />
    <pathelement location="${runtime.jar}" />
    <!-- build.classes needed for 
         org.apache.xalan.xsltc.util.JavaCupRedirect -->
    <pathelement location="${build.classes}" />
    <pathelement path="${java.class.path}" />
  </path>

  <!-- Attempt to determine dependency info for generated sources -->
  <target name="xsltc.prepare" depends="prepare" >
    <!-- The first step compiles the utils directory, which includes 
         a special wrapper for the xsltc.codegen / java_cup step next. -->
    <echo message="Compiling XSLTC utilities"/>
    <javac srcdir="${src.dir}" 
           destdir="${build.classes}"
           includes="${xsltc.reldir}/util/**/*.java"
           debug="${build.debug}"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="xsltc.class.path" />
      <bootclasspath refid="xslt.boot.class.path" />
    </javac>
    <!-- These tricky uptodate statements hopefully determine if we 
         actually need to generate the java_cup and jlex files 
         in the two sub-targets below
    -->
    <uptodate property="xsltc.java_cup.not_needed" targetfile="${generated.xpathparser}" >
      <srcfiles dir="${src.dir}/${xsltc.reldir}/compiler" includes="xpath.cup" />
    </uptodate>

    <uptodate property="xsltc.jlex.not_needed" targetfile="${generated.xpathlexer}" >
      <srcfiles dir="${src.dir}/${xsltc.reldir}/compiler" includes="xpath.lex" />
    </uptodate> 
    
    <!-- Determine whether the support jars are already expanded -->
    <available file="${build.classes}/org/apache/bcel"     type="dir" property="xsltc.bcel_jar.not_needed" />
    <available file="${build.classes}/JLex"                type="dir" property="xsltc.jlex_jar.not_needed" />
    <available file="${build.classes}/java_cup/Main.class" type="file" property="xsltc.java_cup_jar.not_needed" />
    <available file="${build.classes}/java_cup/runtime"    type="dir" property="xsltc.runtime_jar.not_needed" />
    <available file="${build.classes}/org/apache/regexp"   type="dir" property="xsltc.regexp_jar.not_needed" />
  </target>

  <!-- Generate the XPath parser sources for xsltc if needed -->
  <target name="xsltc.java_cup" depends="xsltc.prepare" unless="xsltc.java_cup.not_needed">
    <!-- The second step generates sym.java and XPathParser.java. -->
    <echo message="java_cup preparsing"/>
    <java fork="yes" failonerror="true" 
       classname="org.apache.xalan.xsltc.util.JavaCupRedirect" >
      <classpath refid="xsltc.class.path" />
      <!-- need to bootclasspath java_cup for JDKs that include JavaCupRedirect -->
      <jvmarg value="-Xbootclasspath/p:${java_cup.jar}${path.separator}${runtime.jar}"/>
      <!-- We're using JavaCupRedirect to call the java_cup application -->
      <arg line="-parser XPathParser -expect 0 
         -stdin ${src.dir}/${xsltc.reldir}/compiler/xpath.cup"/>
    </java>
    <echo message="java_cup move output files"/>
    <move file="XPathParser.java" tofile="${generated.xpathparser}"/>
    <move file="sym.java" tofile="${generated.xpathsym}"/>
  </target>
  
  <!-- Generate the XPath lexer sources for xsltc if needed -->
  <target name="xsltc.jlex" depends="xsltc.java_cup" unless="xsltc.jlex.not_needed">
    <!-- The third step generates XPathLexer.java. The lexiographical analyser
    has to be generated after sym.java, so order is important. -->
    <echo message="JLex preparsing"/>
    <java fork="yes" failonerror="true" classname="JLex.Main" >
      <classpath refid="xsltc.class.path" />
      <arg line="-static ${src.dir}/${xsltc.reldir}/compiler/xpath.lex"/>
    </java>
    <echo message="JLex move output file"/>
    <move file="${src.dir}/${xsltc.reldir}/compiler/xpath.lex.java" tofile="${generated.xpathlexer}"/>
  </target>

  <!-- Compile the main XSLTC classes -->
  <target name="xsltc.compile" depends="xsltc.java_cup,xsltc.jlex,xml.compile"
    description="Compile just the XSLTC classes" >
    <echo message="Compiling remaining XSLTC classes"/>
    <javac srcdir="${src.dir}" 
           destdir="${build.classes}"
           includes="${xsltc.reldir}/**/*.java"
           excludes="${serializer.reldir}/**/*.java"
           debug="${build.debug}"
    	   target="${compiler.target}" source="${compiler.source}"> 
      <classpath refid="xsltc.class.path" />
      <bootclasspath refid="xslt.boot.class.path" />
    </javac>
  </target>

  <!-- Compile just the XSLTC classes w/o JLex, JCup recompilation -->
  <target name="xsltc.fcompile" depends="xml.compile"
    description="Compile just the XSLTC classes w/o JLex, JCup recompilation" >
    <echo message="Compiling remaining XSLTC classes"/>
    <javac srcdir="${src.dir}" 
           destdir="${build.classes}"
           includes="${xsltc.reldir}/**/*.java"
           debug="${build.debug}"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="xsltc.class.path" />
      <bootclasspath refid="xslt.boot.class.path" />
    </javac>
  </target>

  <!-- Jar up the XSLTC classes w/o the support jars -->
  <target name="xsltc.unbundledjar" depends="xsltc.compile"
    description="Jar just the xsltc.jar file" >
    <!-- Copy over the manifest, with filtering (for version number) -->
    <filter token="impl.version" value="${impl.version}"/>
    <filter token="java.version" value="${java.version}"/>
    <filter token="java.vendor" value="${java.vendor}"/>        
    <copy todir="${build.dir}" file="${manifest.xsltc.mf}" filtering="true"/>
    <jar jarfile="${build.xsltc.jar}" manifest="${build.dir}/manifest.xsltc" basedir="${build.classes}" >
      <patternset><!-- relative to jar/@basedir -->
        <include name="org/apache/xml/**" />
        <include name="${xsltc.reldir}/**/*" />
        <exclude name="org/apache/xalan/xsltc/util/JavaCupRedirect*" />
      </patternset>
    </jar>
  </target>

  <!-- Copy license and readme files for XSLTC support jars -->
  <target name="xsltc.copy-licenses" depends="xsltc.prepare">
  </target>

  <!-- A parametrized target which is used to copy and expand a XSLTC support jar -->
  <target name="xsltc.copy-deps-jar" unless="${param_unless}">
    <!-- copy the jar file to the build/classes directory -->
    <copy todir="${build.classes}" file="${lib.dir}/${param_jar_name}"/>
    
    <!-- unjar the jar file -->
    <unjar src="${build.classes}/${param_jar_name}" dest="${build.classes}" />
    
    <!-- remove the jar file -->
    <delete file="${build.classes}/${param_jar_name}" />
  </target>
  
  <!-- Copy and expand the XSLTC support jars if needed -->
  <target name="xsltc.copy-deps-jars" depends="xsltc.copy-licenses">
    <echo message="Copying XSLTC support jars" />
    <!-- copy the 3rd party support jar files -->
    <antcall target="xsltc.copy-deps-jar">
      <param name="param_unless" value="xsltc.bcel_jar.not_needed" />
      <param name="param_jar_name" value="${bcel.jar.name}" />
    </antcall>

<!-- We don't need to package the JLex or java_cup jars in the xalan.jar.
     These are only required for building XSLTC, not for using XSLTC.
     
    <antcall target="xsltc.copy-deps-jar">
      <param name="param_unless" value="xsltc.jlex_jar.not_needed" />
      <param name="param_jar_name" value="${jlex.jar.name}" />
    </antcall>

    <antcall target="xsltc.copy-deps-jar">
      <param name="param_unless" value="xsltc.java_cup_jar.not_needed" />
      <param name="param_jar_name" value="${java_cup.jar.name}" />
    </antcall>
-->

    <antcall target="xsltc.copy-deps-jar">
      <param name="param_unless" value="xsltc.runtime_jar.not_needed" />
      <param name="param_jar_name" value="${runtime.jar.name}" />
    </antcall>

    <antcall target="xsltc.copy-deps-jar">
      <param name="param_unless" value="xsltc.regexp_jar.not_needed" />
      <param name="param_jar_name" value="${regexp.jar.name}" />
    </antcall>
    
    <!-- remove the old META-INF/MANIFEST.MF file -->
    <delete file="${build.classes}/META-INF/MANIFEST.MF" quiet="true"/>  
  </target>

  <!-- =================================================================== -->
  <!-- Creates the xsltc jar including all support jars                    -->
  <!-- =================================================================== -->
  <target name="xsltc.jar" depends="xsltc.compile,xsltc.copy-deps-jars"
     description="Jar xsltc,xml,BCEL,JLex,java_cup,runtime and jakarta regexp">

    <!-- create new META-INF dir w/ transformer factory default -->
    <!-- GTM: comment this out so that bundled xsltc.jar does not have
         service provider default until further notice 2/20/2002
    <mkdir dir="${build.dir}/xsltctmp/META-INF"/>
    <mkdir dir="${build.dir}/xsltctmp/META-INF/services"/>
    <copy todir="${build.dir}/xsltctmp/META-INF/services"
      file="${src.dir}/${xsltc.reldir}/javax.xml.transform.TransformerFactory"
    />
    -->

    <!-- Copy over the manifest, with filtering (for version number) -->
    <filter token="impl.version" value="${impl.version}"/>
    <filter token="java.version" value="${java.version}"/>
    <filter token="java.vendor" value="${java.vendor}"/>     
    <copy todir="${build.dir}" file="${manifest.xsltc.mf}" filtering="true"/>
    
    <!-- make bundled jar named xsltc.jar -->
    <jar jarfile="${build.dir}/xsltc.jar" manifest="${build.dir}/manifest.xsltc" >
      <fileset dir="${build.classes}">
        <include name="org/apache/xalan/xsltc/**"/>
        <exclude name="org/apache/xalan/xsltc/util/JavaCupRedirect*" />
      </fileset>
      <fileset dir="${build.classes}" includes="org/apache/xml/**" 
                                      excludes="${serializer.reldir}/**" />
      <fileset dir="${build.classes}" includes="org/apache/bcel/**" />
      <fileset dir="${build.classes}" includes="JLex/**" />
      <fileset dir="${build.classes}" includes="java_cup/**" />
      <fileset dir="${build.classes}" includes="org/apache/regexp/**" />
    </jar>

  </target>
  
  <!-- =================================================================== -->
  <!-- Creates the xalan interpretive jar                                  -->
  <!-- =================================================================== -->
  <target name="xalan-interpretive.jar" depends="xalan-interpretive.compile"
    description="Jar up everything in Xalan interpretive (without XSLTC)" >
    <!-- Copy over the manifest, with filtering (for version number) -->
    <filter token="impl.version" value="${impl.version}"/>
    <filter token="java.version" value="${java.version}"/>
    <filter token="java.vendor" value="${java.vendor}"/>     
    <copy todir="${build.dir}" file="${manifest.xalan-interpretive.mf}" filtering="true"/>
    <jar jarfile="${build.xalan-interpretive.jar}" manifest="${build.dir}/manifest.xalan-interpretive" basedir="${build.classes}" >
      <patternset><!-- relative to jar/@basedir -->
        <include name="${apachexml.reldir}/**/*" />
        <include name="${xpath.reldir}/**/*" />
        <include name="${xalan.reldir}/**/*" />
        <include name="${domxpath.reldir}/**/*" />        
        <include name="META-INF/services/*" />
        <exclude name="${xsltc.reldir}/**/*" />
        <exclude name="${serializer.reldir}/**/*" />
      </patternset>
    </jar>
  </target>
  
  <!-- =================================================================== -->
  <!-- Creates the xalan unbundled jar (Xalan interpretive + XSLTC -       -->
  <!-- support jars                                                        -->
  <!-- =================================================================== -->
  <target name="unbundledjar" depends="xalan-interpretive.compile,xsltc.compile"
    description="Jar up Xalan and XSLTC, without the XSLTC dependencies" >
    <filter token="impl.version" value="${impl.version}"/>
    <filter token="java.version" value="${java.version}"/>
    <filter token="java.vendor" value="${java.vendor}"/>     
    <copy todir="${build.dir}" file="${manifest.mf}" filtering="true"/>
    <jar jarfile="${build.xalan-unbundled.jar}" manifest="${build.dir}/MANIFEST.MF" basedir="${build.classes}" >
      <patternset>
        <include name="${apachexml.reldir}/**/*" />
        <include name="${xpath.reldir}/**/*" />
        <include name="${xalan.reldir}/**/*" />
        <include name="META-INF/services/*" />
        <exclude name="${xsltc.reldir}/util/JavaCupRedirect*" />
        <exclude name="${serializer.reldir}/**/*.*" />
      </patternset>    
    </jar>
  </target>
  
  <!-- =================================================================== -->
  <!-- Creates one big xalan jar (Xalan interpretive + XSLTC + support jars) -->
  <!-- =================================================================== -->
  <target name="jar" depends="xalan-interpretive.compile,xsltc.compile,xsltc.copy-deps-jars"
    description="Jar up everything (Xalan, XSLTC and XSLTC dependencies)" >
    
    <!-- Copy over the manifest, with filtering (for version number) -->
    <filter token="impl.version" value="${impl.version}"/>
    <filter token="java.version" value="${java.version}"/>
    <filter token="java.vendor" value="${java.vendor}"/>     
    <copy todir="${build.dir}" file="${manifest.mf}" filtering="true"/>
    
    <!-- make bundled jar named xalan.jar -->
    <jar jarfile="${build.xalan.jar}" manifest="${build.dir}/MANIFEST.MF"
         basedir="${build.classes}" >
       <patternset>
         <exclude name="${xsltc.reldir}/util/JavaCupRedirect*" />
         <exclude name="${serializer.reldir}/**/*" />
       </patternset>
    </jar>  
 
  </target>
  
  <!-- =================================================================== -->
  <!-- Default all target simply Creates the xalan JAR                     -->
  <!-- =================================================================== -->
  <target name="all" depends="serializer.jar,jar"><!-- 'Standardizing build.xml files' <bloritsch@apache.org> -->
    <echo message="Redirect to jar target; please provide input on desired functionality of this target"/>
  </target>
  
  <!-- =================================================================== -->
  <!-- Compiles the samples (servlet excluded) and jars the class files    -->  
  <!-- =================================================================== -->
  <target name="samples" depends="jar,samples.nojardepends,xsltc.samples"/>

  <target name="samples.nojardepends" depends="xsltc.samples.nojardepends"
    description="Compile and jar the samples (except servlet)" >
    <property name="exclude" value="*.xml,*.xsl,*.txt,*.html,*.properties,*.out"/>
    <mkdir dir="${build.samples}"/>
    <!-- Since the samples are packageless, they must be compiled separately. -->   
    <javac srcdir="${samples.dir}/SimpleTransform" 
           destdir="${build.samples}"  excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/UseStylesheetPI"   
           destdir="${build.samples}"  excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/UseStylesheetParam" 
           destdir="${build.samples}"  excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/SAX2SAX"  
           destdir="${build.samples}"  excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/DOM2DOM"  
           destdir="${build.samples}"  excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/Pipe"  
           destdir="${build.samples}"  excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" >
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/UseXMLFilters"  
           destdir="${build.samples}"  excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/Trace"   
           destdir="${build.samples}"  excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/ApplyXPath"  
           destdir="${build.samples}" excludes="${exclude}" 
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>
    <javac srcdir="${samples.dir}/ApplyXPathDOM"  
           destdir="${build.samples}" excludes="${exclude}" 
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>             
    <javac srcdir="${samples.dir}/trax"  
           destdir="${build.samples}" excludes="${exclude}" 
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/extensions"  
           destdir="${build.samples}" excludes="${exclude}" 
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>           
    <javac srcdir="${samples.dir}/Validate"  
           destdir="${build.samples}" excludes="${exclude}" 
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path"
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac> 
    <javac srcdir="${samples.dir}/TransformThread"  
           destdir="${build.samples}" excludes="${exclude}" 
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>
    <javac srcdir="${samples.dir}/XPathAPI"  
           destdir="${build.samples}" excludes="${exclude}" 
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
    	   target="${compiler.target}" source="${compiler.source}">
      <classpath refid="samples.class.path" />
    </javac>               
    <jar jarfile="${build.samples.jar}" basedir="${build.samples}"
         includes="*.class"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles all samples that require extra standard components in      -->
  <!-- order to compile.                                                   -->
  <!-- =================================================================== -->
  <target name="extra.std.samples"
          depends="servlet,xsltc.applet,xsltc.ejb,xsltc.servlet"/>
          
  <target name="extra.std.samples.nojardepends"
          depends="servlet.jardepends,xsltc.applet.nojardepends,
                   xsltc.ejb.jardepends,xsltc.servlet.jardepends"/>

  <!-- =================================================================== -->
  <!-- Compiles all samples that require extra non-standard components in  -->
  <!-- order to compile.                                                   -->
  <!-- =================================================================== -->
  <target name="extra.nonstd.samples" depends="xsltc.brazil"/>
  
  <target name="extra.nonstd.samples.nojardepends" depends="xsltc.brazil.jardepends"/>

  <!-- =================================================================== -->
  <!-- Compiles the sample servlet and jars the class files.               --> 
  <!-- The javax.servlet and javax.servlet.http packages                   -->
  <!-- must be on the classpath                                            -->
  <!-- =================================================================== -->
  <target name="servlet" depends="jar,servlet.jardepends"/>

  <target name="servlet.jardepends"
    description="Compile and jar the servlet samples in xalanservlet.war" >
     <echo message="To compile the sample servlets, javax.servlet and javax.servlet.http must be on the classpath"/>   
     <mkdir dir="${build.servlet}"/>
     <mkdir dir="${build.servlet}/WEB-INF/classes/servlet"/>
     <mkdir dir="${build.servlet}/WEB-INF/lib"/>
     <javac srcdir="${samples.dir}/servlet"
            destdir="${build.servlet}/WEB-INF/classes"
            debug="${build.debug}"
            bootclasspathref="xslt.boot.class.path" 
     	    target="${compiler.target}" source="${compiler.source}">
        <classpath refid="samples.class.path" />
        <classpath location="${servlet-api.jar}" />
     </javac>           
      <copy todir="${build.servlet}/WEB-INF/classes/servlet">
        <fileset dir="${samples.dir}/servlet" includes="media.properties"/>
      </copy>  		         
      <copy todir="${build.servlet}/WEB-INF">
        <fileset dir="${samples.dir}/servlet" includes="web.xml"/>
      </copy>
      <copy todir="${build.servlet}">
        <fileset dir="${samples.dir}/servlet" 
        		includes="birds.xml, birds.xsl, booklist1.xsl, 
        		booklist2.xsl, catalog.xml, fooparam.xml, fooparam.xsl, jspSample.jsp"/>
      </copy>
      <copy todir="${build.servlet}/WEB-INF/lib">
      	<fileset dir="${lib.dir}" includes="${parser.jar.name}, ${xmlapis.jar.name}"/>
      </copy>
      <copy file="${build.xalan.jar}" todir="${build.servlet}/WEB-INF/lib" />
    <jar jarfile="${build.servlet.war}" 
         basedir="${build.servlet}" 
         includes="**"/>
  </target>
 
  <!-- =================================================================== -->
  <!-- Compiles (does not jar) the translet samples.                       -->
  <!-- For time being, classes are generated in place.                     -->
  <!-- To run these samples, add xsltc.jar, runtime.jar, bcel.jar,         -->
  <!-- and java_cup.jar (all in the bin directory) to the classpath        --> 
  <!--                                                                     -->
  <!-- When we have straightened out classpath issues,                     -->
  <!-- add samples in CompiledApplet, CompiledBrazil, CompiledEJB and      -->
  <!-- CompiledServlet.                                                    -->
  <!-- =================================================================== -->
  <target name="xsltc.samples" depends="jar,xsltc.samples.nojardepends"/>

  <target name="xsltc.samples.nojardepends">
    <mkdir dir="${build.samples}"/>
    <javac srcdir="${samples.dir}/translets"
           classpath="${java.class.path}:${build.xalan.jar}" 
           destdir="${build.samples}" excludes="${exclude}" 
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
  	       target="${compiler.target}" source="${compiler.source}"/>
    <javac srcdir="${samples.dir}/CompiledJAXP"
           destdir="${build.samples}" excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
  	       target="${compiler.target}" source="${compiler.source}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the XSLTC applet example and jars the class files.         --> 
  <!-- =================================================================== -->
  <target name="xsltc.applet" depends="jar,xsltc.applet.nojardepends"/>

  <target name="xsltc.applet.nojardepends">
    <mkdir dir="${build.samples}/CompiledApplet"/>
    <javac srcdir="${samples.dir}/CompiledApplet"
           destdir="${build.samples}/CompiledApplet" excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
    	   target="${compiler.target}" source="${compiler.source}"/>
    <jar jarfile="${build.xsltc.applet.jar}"
         basedir="${build.samples}/CompiledApplet"
         includes="*.class"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the XSLTC brazil example and jars the class files.         --> 
  <!-- =================================================================== -->
  <target name="xsltc.brazil" depends="jar,xsltc.brazil.jardepends"/>

  <target name="xsltc.brazil.jardepends">
    <mkdir dir="${build.samples}/CompiledBrazil"/>
    <javac srcdir="${samples.dir}/CompiledBrazil"
           destdir="${build.samples}/CompiledBrazil" excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
    	   target="${compiler.target}" source="${compiler.source}">
    	<classpath location="${brazil.jar}"/>
  	</javac>
    <jar jarfile="${build.xsltc.brazil.jar}"
         basedir="${build.samples}/CompiledBrazil"
         includes="*.class"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the XSLTC EJB example and jars the class files.            --> 
  <!-- ejb.jar must be on the classpath to compile this sample.            -->
  <!-- EJB 2.0 can be found at http://java.sun.com/products/ejb/docs.html  -->
  <!-- =================================================================== -->
  <target name="xsltc.ejb" depends="jar,xsltc.ejb.jardepends"/>

  <target name="xsltc.ejb.jardepends">
    <mkdir dir="${build.samples}/CompiledEJB"/>
    <javac srcdir="${samples.dir}/CompiledEJB"
           destdir="${build.samples}/CompiledEJB" excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
    	   target="${compiler.target}" source="${compiler.source}">
    	<classpath location="${javaee-api.jar}"/>
    </javac>
    <jar jarfile="${build.xsltc.ejb.jar}"
         basedir="${build.samples}/CompiledEJB"
         includes="*.class"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the XSLTC servlet example and jars the class files.        --> 
  <!-- =================================================================== -->
  <target name="xsltc.servlet" depends="jar,xsltc.servlet.jardepends" />

  <target name="xsltc.servlet.jardepends">
    <mkdir dir="${build.samples}/CompiledServlet"/>
    <javac srcdir="${samples.dir}/CompiledServlet"
           destdir="${build.samples}/CompiledServlet" excludes="${exclude}"
           debug="${build.debug}" bootclasspathref="xslt.boot.class.path" 
    	   target="${compiler.target}" source="${compiler.source}">
    	<classpath location="${servlet-api.jar}"/>
    </javac>
    <jar jarfile="${build.xsltc.servlet.jar}"
         basedir="${build.samples}/CompiledServlet"
         includes="*.class"/>
  </target>

 
  <!-- =================================================================== -->
  <!-- Generate HTML docs                                                  -->
  <!-- =================================================================== -->
  <target name="docs" depends="jar,docs.nojardepends,xsltc.docs"/>
  
  <target name="docs.nojardepends" depends="prepare.docs.nojardepends,autodocs"  
    description="Build the documentation (overview, readme, etc.)" >
    <echo message="docs is human-usable target with dependencies"/>  
  </target>
  
  <target name="autodocs">
    <echo message="autodocs is for automated build process, without dependencies"/>   
    <java fork="yes" 
          classname="${doc.generator}" 
          classpathref="docs.class.path" >
       <arg line="targetDirectory=${build.docs} ${xdocs.book} ${xdocs.style}"/>
    </java>	 
  </target>
  
  <!-- =================================================================== -->
  <!-- Creates the API documentation                                       -->
  <!-- =================================================================== -->
  <target name="javadocs" depends="jar,javadocs.nojardepends"/>
  
  <target name="javadocs.nojardepends" depends="prepare.docs.nojardepends,autojavadocs"
    description="Build the Javadocs for Xalan 2.x and jaxp sources" >
    <echo message="javadocs is human-usable target with dependencies"/> 
    
    <!-- Expand jaxp sources (JAXP 1.1, DOM 2, and SAX 2) into source tree for 
         inclusion in the Javadoc. -->           
    <!-- Note this is into the src area.-->                                          
    <gunzip src="${xml-commons-srcs.tar.gz}" dest="${build.dir}" />                                                                         
    <untar src="${xml-commons-srcs.tar}" 
           dest="${src.dir}">
       <patternset>
         <include name="**.java"/>
       </patternset>
    </untar>
           
    <delete file="${xml-commons-srcs.tar}"/>
         
    <antcall target="autojavadocs"/>
     
    <!-- remove the jaxp sources -->
    <delete dir="${src.dir}/javax" />
    <delete dir="${src.dir}/org/w3c" />
    <delete dir="${src.dir}/org/xml" />
    <delete dir="${src.dir}/org/apache/xmlcommons" />
    <delete file="${src.dir}/manifest.commons" />
         
  </target>

  <target name="autojavadocs" 
          depends="autojavadocs-1.4-or-higher-if,autojavadocs-non1.4-or-higher-if">
    <echo message="autojavadocs is for automated build process, without dependencies"/>
  </target>

  <target name="check-using-java-1.4-or-higher">
    <condition property="using-java-1.4-or-higher">
      <not>
          <or>
            <equals arg1="${ant.java.version}" arg2="1.1"/>
            <equals arg1="${ant.java.version}" arg2="1.2"/>
            <equals arg1="${ant.java.version}" arg2="1.3"/>
          </or>
      </not>
    </condition>
  </target>

  <target name="autojavadocs-1.4-or-higher-if" if="using-java-1.4-or-higher" 
          depends="check-using-java-1.4-or-higher">
    <antcall target="autojavadocs-1.4-or-higher"/>
  </target>

  <target name="autojavadocs-non1.4-or-higher-if" unless="using-java-1.4-or-higher" 
          depends="check-using-java-1.4-or-higher">
    <antcall target="autojavadocs-non1.4-or-higher"/>
  </target>

  <target name="autojavadocs-1.4-or-higher">
    
    <!-- Ant ignores destdir arg if doclet is set, so must send to doclet in doclet subelement-->
    <javadoc
         additionalparam="-breakiterator"
         destdir="${build.apidocs}"
         public="true"
         sourcepath="${src.dir}"
         overview="${src.dir}/javadocOverview.html"
         packagenames="org.apache.*,org.xml.*,org.w3c.*,javax.xml.*"
         author="true"
         version="true"
         use="true"
         windowtitle="${Name-in-docs} ${impl.version}" 
         doctitle="${Name-in-docs} ${impl.version}"
         bottom="Copyright &#169; ${year} Apache XML Project. All Rights Reserved.">
          <classpath refid="docs.class.path" />
          <taglet name="xalan2jtaglet.XSLUsageTag" path="${taglet.jar}"/>
          <group title="Transformations API for XML (TrAX)" packages="javax.xml.transform*"/>
          <group title="Java API for XML Parsing" packages="javax.xml.parsers"/>
          <group title="Xalan Core"
                 packages="org.apache.xalan.processor:org.apache.xalan.templates:org.apache.xalan.transformer"/>
          <group title="XPath" packages="org.apache.xpath*"/>
          <group title="Document Table Model (DTM)" packages="org.apache.xml.dtm*"/>          
          <group title="Utilities" packages="org.apache.xml.utils*"/>
          <group title="Xalan Other" packages="org.apache.xalan.client:org:org.apache.xalan.extensions:org.apache.xalan.res:org.apache.xalan.stree:org.apache.xalan.trace:org.apache.xalan.xslt"/>
          <group title="Xalan Extensions" packages="org.apache.xalan.lib*"/>
          <group title="Serializers" packages="org.apache.xml.serialize*, org.apache.xalan.serialize"/>
          <group title="SAX 2" packages="org.xml.sax*"/>
          <group title="DOM 2" packages="org.w3c.dom*"/>
          <group title="XSLTC Core"
                 packages="org.apache.xalan.xsltc*"/>
    </javadoc>
  </target>

  <target name="autojavadocs-non1.4-or-higher">
      
    <!-- Ant ignores destdir arg if doclet is set, so must send to doclet in doclet subelement-->
    <javadoc
         public="true"
         sourcepath="${src.dir}"
         overview="${src.dir}/javadocOverview.html"
         packagenames="org.apache.*,org.xml.*,org.w3c.*,javax.xml.*"
         author="true"
         version="true"
         use="true"
         windowtitle="${Name-in-docs} ${impl.version}" 
         doctitle="${Name-in-docs} ${impl.version}"
         bottom="Copyright &#169; ${year} Apache XML Project. All Rights Reserved.">
          <classpath refid="docs.class.path" />
          <doclet name="xalanjdoc.Standard" path="${doclet.jar}">
            <param name="-d" value="${build.apidocs}"/>
          </doclet>
          <group title="Transformations API for XML (TrAX)" packages="javax.xml.transform*"/>
          <group title="Java API for XML Parsing" packages="javax.xml.parsers"/>
          <group title="Xalan Core"
                 packages="org.apache.xalan.processor:org.apache.xalan.templates:org.apache.xalan.transformer"/>
          <group title="XPath" packages="org.apache.xpath*"/>
          <group title="Document Table Model (DTM)" packages="org.apache.xml.dtm*"/>          
          <group title="Utilities" packages="org.apache.xml.utils*"/>
          <group title="Xalan Other" packages="org.apache.xalan.client:org:org.apache.xalan.extensions:org.apache.xalan.res:org.apache.xalan.stree:org.apache.xalan.trace:org.apache.xalan.xslt"/>
          <group title="Xalan Extensions" packages="org.apache.xalan.lib*"/>
          <group title="Serializers" packages="org.apache.xml.serialize*, org.apache.xalan.serialize"/>
          <group title="SAX 2" packages="org.xml.sax*"/>
          <group title="DOM 2" packages="org.w3c.dom*"/>
          <group title="XSLTC Core"
                 packages="org.apache.xalan.xsltc*"/>
    </javadoc>
  </target>

  <!-- =================================================================== -->
  <!-- Various targets to clean the build tree                             -->
  <!-- =================================================================== -->
  <target name="distclean" depends="clean"
    description="Clean everything, including dist/jar/docs/xsltc.*" >
    <delete dir="${dist.dir}"/>
  </target>

  <target name="clean" depends="xsltc.clean"
    description="Clean the ${build.dir} tree and doc outputs" >
    <delete dir="${build.dir}"/>
    <delete dir="${site.root}"/>
    <delete dir="${xalan.apache.org.site.root}"/>    
    <delete quiet="true">
      <fileset dir="${xdocs.style}" excludes="${xalanonly-styledocs}"/>
    </delete>
    <delete file="${xdocs.DONE.file}"/>
    <delete file="${xdocs.XSLTCDONE.location}"/>
    <delete file="${src.dir}/${xalan.reldir}/Version.java"/>
    <delete file="${src.dir}/${serializer.reldir}/Version.java"/>
    <delete file="${src.dir}/${xalan.reldir}/processor/XSLProcessorVersion.java"/>
    <delete file="${xdocs.dir}/sources/entities.ent"/>       
    <!-- Also delete files expanded from ${xml-commons-srcs.tar.gz}-->
    <delete dir="${src.dir}/javax" includeEmptyDirs="true" quiet="true"/>
    <delete dir="${src.dir}/org/xml" includeEmptyDirs="true" quiet="true"/>
    <delete dir="${src.dir}/org/w3c" includeEmptyDirs="true" quiet="true"/>
    <delete dir="${src.dir}/xdocs/style/graphics" includeEmptyDirs="true" quiet="true"/>
    <delete dir="${src.dir}/xdocs/style/resources" includeEmptyDirs="true" quiet="true"/>    
  </target>
 
  <target name="xsltc.clean"
    description="Clean miscellaneous generated sources from xsltc.compile" >
    <delete file="${generated.xpathparser}" />
    <delete file="${generated.xpathsym}" />
    <delete file="${generated.xpathlexer}" />
  </target>

  <!-- =================================================================== -->
  <!-- Install/Uninstall targets - not currently applicable                -->
  <!-- =================================================================== -->
  <target name="install"><!-- 'Standardizing build.xml files' <bloritsch@apache.org> -->
    <echo message="install target currently not supported in ${Name-in-docs}; try jar or dist instead"/>
  </target>
  <target name="uninstall"><!-- 'Standardizing build.xml files' <bloritsch@apache.org> -->
    <echo message="uninstall target currently not supported in ${Name-in-docs}; try distclean instead"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates a distribution that depends only on standard pieces         -->
  <!-- =================================================================== -->
  <target name="dist" depends="build.std.dist,autodist"
              description="Create a .zip/.tar.gz distribution module containing
                           all components without dependencies on non-standard
                           jars that are not part of the build system." >
    <echo message="dist is human-useable target for distribution, with only standard dependencies"/>
  </target>

  <target name="dist-nodocs" depends="build.std.dist-nodocs,autodist-nodocs"
              description="Create a .zip/.tar.gz distribution module containing
                           all components without dependencies on non-standard
                           jars that are not part of the build system." >
    <echo message="dist-nodocs is human-useable target for distribution, with only standard dependencies and no documentation "/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates a complete distribution in which the xalan.jar contains     -->
  <!-- the interpretive, compiled and the common packages                  -->
  <!-- =================================================================== -->
  <target name="fulldist" depends="build.nonstd.dist,autodist"
          description="Create a .zip/.tar.gz distribution module containing
                       all components.">
    <echo message="fulldist is human-useable target for distribution, with all dependencies"/>
  </target>
  
  <target name="fulldist-nodocs" depends="build.nonstd.dist-nodocs,autodist-nodocs"
          description="Create a .zip/.tar.gz distribution module containing
                       all components.">
    <echo message="fulldist-nodocs is human-useable target for distribution, with all dependencies and no documentation"/>
  </target>  

  <!-- =================================================================== -->
  <!-- Creates a complete distribution with separate xalan.jar and         -->
  <!-- xsltc.jar.  The common packages are contained in each jar.          -->
  <!-- =================================================================== -->
  <target name="fulldist-separatejars" depends="build.nonstd-separatejars.dist,autodist"
          description="Create a .zip/.tar.gz distribution module containing
                       all components.">
    <echo message="fulldist is human-useable target for distribution, with all dependencies"/>
  </target>

  <target name="fulldist-separatejars-nodocs" depends="build.nonstd-separatejars.dist-nodocs,autodist-nodocs"
          description="Create a .zip/.tar.gz distribution module containing
                       all components.">
    <echo message="fulldist-separatejars-nodocs is human-useable target for distribution, with all dependencies and no documentation"/>
  </target>
  
  <target name="build.std.dist" depends="build.std.parts">
    <property name="has.nonstd.parts" value="false"/>
  </target>
  <target name="build.std.dist-nodocs" depends="build.std.parts-nodocs">
    <property name="has.nonstd.parts" value="false"/>
  </target>  

  <target name="build.nonstd.dist" depends="build.std.parts,build.nonstd.parts">
    <property name="has.nonstd.parts" value="true"/>
  </target>
  <target name="build.nonstd.dist-nodocs" depends="build.std.parts-nodocs,build.nonstd.parts">
    <property name="has.nonstd.parts" value="true"/>
  </target>  
  
  <target name="build.nonstd-separatejars.dist" depends="build.std-separatejars.parts,
                                                         build.nonstd-separatejars.parts">
    <property name="has.nonstd.parts" value="true"/>
  </target>
  <target name="build.nonstd-separatejars.dist-nodocs" depends="build.std-separatejars.parts-nodocs,
                                                                build.nonstd-separatejars.parts">
    <property name="has.nonstd.parts" value="true"/>
  </target>

  <target name="build.std.parts"
          depends="jar,docs,javadocs,samples,extra.std.samples,xsltc.docs"/>
          
  <target name="build.std.parts-nodocs"
          depends="jar,samples,extra.std.samples"/>          
          
  <target name="build.std-separatejars.parts"
          depends="xalan-interpretive.jar,xsltc.jar,
                   docs.nojardepends,javadocs.nojardepends,
                   samples.nojardepends,extra.std.samples.nojardepends,
                   xsltc.docs"/>
                    
  <target name="build.std-separatejars.parts-nodocs"
          depends="xalan-interpretive.jar,xsltc.jar,
                   samples.nojardepends,extra.std.samples.nojardepends"/>                            
          
  <target name="build.nonstd.parts" depends="extra.nonstd.samples"/>
  <target name="build.nonstd-separatejars.parts" depends="extra.nonstd.samples.nojardepends"/>

  <!-- =================================================================== -->
  <!-- Autodist targets.  Used by the distribution targets.                -->
  <!-- =================================================================== -->  
  <target name="autodist-mkdirs">
    <mkdir dir="${dist.dir}"/>
    <mkdir dir="${dist.dir}/lib"/>   
    <mkdir dir="${dist.dir}/samples"/>       
    <mkdir dir="${dist.dir}/src"/>
    <mkdir dir="${dist.dir}/tools"/>     
    <mkdir dir="${dist.dir}/xdocs"/>
  </target>

  <target name="autodist-mkdirs-docs">
    <mkdir dir="${dist.dir}/docs"/>
    <mkdir dir="${dist.dir}/docs/apidocs"/>
  </target>

  <target name="autodist-copy-files">

    <!-- Copy license files to distribution root -->
    <copy todir="${dist.dir}">
      <fileset dir=".">
        <include name="LICENSE.txt,NOTICE.txt"/>
      </fileset>
    </copy>

    <!-- Copy sources and source documentation -->
    <copy todir="${dist.dir}/src">
      <fileset dir="${src.dir}" excludes="javax/**,org/xml/**,org/w3c/**"/><!-- exclude jaxp, sax, dom -->
    </copy>
    <copy todir="${dist.dir}/xdocs">
      <fileset dir="${xdocs.dir}"/>
    </copy>

    <!-- Copy samples -->
    <copy todir="${dist.dir}/samples">
      <fileset dir="${samples.dir}"/>
    </copy>
    
    <!-- Copy tools; used for source distribution -->    
    <copy todir="${dist.dir}/tools">
      <fileset dir="${tools.dir}">
        <include name="*.*"/>
      </fileset>
    </copy>

    <!-- Copy runtime libs; used for source distribution -->    
    <copy todir="${dist.dir}/lib">
      <fileset dir="${lib.dir}">
        <include name="*.*"/>
      </fileset>
    </copy>    

    <!-- Copy built jars -->
    <copy file="${build.dir}/xalansamples.jar" todir="${dist.dir}/samples"/>
    <copy file="${build.dir}/xalanservlet.war" todir="${dist.dir}/samples"/>
    <copy file="${build.dir}/xsltcapplet.jar"  todir="${dist.dir}/samples"/>
    <copy file="${build.dir}/xsltcbrazil.jar"  todir="${dist.dir}/samples"
          failonerror="${has.nonstd.parts}"/>
    <copy file="${build.dir}/xsltcejb.jar"     todir="${dist.dir}/samples"/>
    <copy file="${build.dir}/xsltcservlet.jar" todir="${dist.dir}/samples"/>
    
    <copy file="${build.xalan.jar}" todir="${dist.dir}" />
    
    <!-- only copy the xsltc.jar file if it has been built -->
    <copy todir="${dist.dir}">
      <fileset dir="${build.dir}" includes="xsltc.jar"/>
    </copy>
    <copy file="${build.serializer.jar}" todir="${dist.dir}" />
    
    <copy file="${xmlapis.jar}" todir="${dist.dir}" />  
    <copy file="${parser.jar}" todir="${dist.dir}" />        

    <copy todir="${dist.dir}">
      <fileset dir="." includes="readme.html,KEYS,build.xml,build.sh,build.bat,commits.xml,
                                 LICENSE.txt,NOTICE.txt"/>      
    </copy>
  </target>

  <target name="autodist-copy-files-docs">
    <!-- Copy built documentation and javadoc -->
    <copy todir="${dist.dir}/docs">
      <fileset dir="${build.docs}"/>
    </copy>
  </target>

  <target name="autodist-create-bin-packages">
    <tar tarfile="${build.dir}/${dist.pkg}-bin.tar" >
      <tarfileset dir="${build.dir}">
        <patternset refid="bin-distro"/>
      </tarfileset>
    </tar>
    <gzip src="${build.dir}/${dist.pkg}-bin.tar" zipfile="${build.dir}/${dist.pkg}-bin.tar.gz"/>
    <delete file="${build.dir}/${dist.pkg}-bin.tar" />

    <zip zipfile="${build.dir}/${dist.pkg}-bin.zip" >
      <fileset dir="${build.dir}">
        <patternset refid="bin-distro"/>
      </fileset>
    </zip>
  </target>
  <target name="autodist-create-bin-packages-nodocs">
    <tar tarfile="${build.dir}/${dist.pkg}-bin-nodocs.tar" >
      <tarfileset dir="${build.dir}">
        <patternset refid="bin-distro-nodocs"/>
      </tarfileset>
    </tar>
    <gzip src="${build.dir}/${dist.pkg}-bin-nodocs.tar" zipfile="${build.dir}/${dist.pkg}-bin-nodocs.tar.gz"/>
    <delete file="${build.dir}/${dist.pkg}-bin-nodocs.tar" />

    <zip zipfile="${build.dir}/${dist.pkg}-bin-nodocs.zip" >
      <fileset dir="${build.dir}">
        <patternset refid="bin-distro-nodocs"/>
      </fileset>
    </zip>
  </target>
  <target name="autodist-create-src-packages">
    <tar tarfile="${build.dir}/${dist.pkg}-src.tar" >
      <tarfileset dir="${build.dir}">
        <patternset refid="src-distro"/>
        <patternset refid="xsltc-deps-jars"/>
      </tarfileset>
    </tar>
    <gzip src="${build.dir}/${dist.pkg}-src.tar" zipfile="${build.dir}/${dist.pkg}-src.tar.gz"/>
    <delete file="${build.dir}/${dist.pkg}-src.tar" />

    <zip zipfile="${build.dir}/${dist.pkg}-src.zip" >
      <fileset dir="${build.dir}">
        <patternset refid="src-distro"/>
        <patternset refid="xsltc-deps-jars"/>
      </fileset>
    </zip>
  </target>

  <target name="autodist">
    <echo message="autodist is for automated build processes, without dependencies"/>
    <antcall target="autodist-mkdirs"/>
    <antcall target="autodist-mkdirs-docs"/>
    <antcall target="autodist-copy-files"/>
    <antcall target="autodist-copy-files-docs"/>
    <antcall target="autodist-create-bin-packages"/>
    <antcall target="autodist-create-src-packages"/>
  </target>

  <target name="autodist-nodocs">
    <echo message="autodist-nodocs is for automated build processes, without dependencies"/>
    <antcall target="autodist-mkdirs"/>
    <antcall target="autodist-copy-files"/>
    <antcall target="autodist-create-bin-packages-nodocs"/>
    <antcall target="autodist-create-src-packages"/>
  </target>
  
  <!-- =================================================================== -->
  <!-- Creates the documentation tree for the xml.apache.org/xalan-j       -->
  <!-- website                                                             -->
  <!-- =================================================================== -->
  <target name="site" depends="prepare.docs,javadocs,xsltc.docs"
    description="Build documentation for posting to the website" >
 
    <mkdir dir="${site.dir}/apidocs"/>
    <mkdir dir="${site.dir}/design"/>
    <mkdir dir="${site.dir}/xsltc"/>    
    <java fork="yes" 
          classname="${doc.generator}" 
          classpathref="docs.class.path" >
       <arg line="targetDirectory=${site.dir} ${site.book} ${xdocs.style}"/>
    </java>

    <!-- put xalan design doc in the site design subdir -->
    <copy todir="${site.dir}/design">
      <fileset dir="${build.docs}/design"/>
    </copy>
    <!-- put xsltc design doc in the site xsltc subdir -->
    <copy todir="${site.dir}/xsltc">
      <fileset dir="${build.docs}/xsltc"/>
    </copy>  
    
    <!-- put in the javadoc -->
    <copy todir="${site.dir}/apidocs">
      <fileset dir="${build.apidocs}"/>
    </copy>      
  </target>
  
  <!-- =================================================================== -->
  <!-- Creates the documentation tree for the xalan.apache.org website     -->
  <!-- =================================================================== -->
  <target name="xalan.apache.org.site"
    description="Build documentation for posting to the website" >
 
    <mkdir dir="${xalan.apache.org.site.dir}"/>
    <java fork="yes" 
          classname="${doc.generator}" 
          classpathref="docs.class.path" >
       <arg line="targetDirectory=${xalan.apache.org.site.dir} ${xalan.apache.org.site.book} ${xdocs.style}"/>
    </java>

  </target>  
   
  <!-- =================================================================== -->
  <!-- Compiles and runs mini/smoketest from xml-xalan\test, if present    -->
  <!-- =================================================================== -->
  <property name="test.relpath" value="../test"/>

  <target name="minitest" depends="prepare,minitest-run,tests-not-available" 
    description="Run the Minitest from xml-xalan/test" >
    <!-- This target simply asks the minitest-run worker target to 
         actually have the Minitest run (by the test/build.xml file);
         we then also call the tests-not-available target in case 
         the user never checked out the tests.
    -->
  </target>
  <target name="minitest-run" if="tests-available" depends="jar" >
    <echo message=" [minitest] Calling ${test.relpath}/build.xml to run the Minitest" />
    <ant dir="${test.relpath}" antfile="build.xml" target="minitest.gump" >
    </ant>
  </target>

  <target name="smoketest" depends="prepare,smoketest-run,tests-not-available" 
    description="Run Smoketests (Minitest, conf, harness) from xml-xalan/test" >
  </target>
  <target name="smoketest-run" if="tests-available" depends="jar" >
    <echo message=" [minitest] Calling ${test.relpath}/build.xml to run the Smoketest" />
    <ant dir="${test.relpath}" antfile="build.xml" target="smoketest.dev" >
    </ant>
  </target>

  <target name="check" depends="smoketest"><!-- 'Standardizing build.xml files' <bloritsch@apache.org> -->
    <echo message="Redirect to smoketest target"/>
  </target>

  <!-- Called from various testing targets if the test dir doesn't exist. -->
  <target name="tests-not-available" unless="tests-available" >
    <echo message=" [tests] The tests do not seem to be present in ${test.relpath}" />
    <echo message=" [tests] You must have checked out from CVS to run the tests," />
    <echo message=" [tests]   it is not included in binary distributions." />
    <echo message=" [tests] See http://xml.apache.org/xalan-j/test/ for more info." />
  </target>

  <!-- =================================================================== -->
  <!-- Creates the xalan design document                                   -->
  <!-- =================================================================== -->
    <target name="xalan-j2-design">
    <java fork="yes" 
          classname="${doc.generator}" 
          classpathref="docs.class.path" >
      <arg line="loaderConfig=sbk:/style/loaderdesign.xml targetDirectory=${build.dir}/docs/design/
      ${xdocs.dir}/sources/xalandesign.xml ${xdocs.style}"/>
    </java>
  </target>
  
  <!-- =================================================================== -->
  <!-- Use FOP to create preliminary print (pdf) doc                       -->
  <!-- Note: fop.jar and xml.jar (from xml-fop) must be on classpath       -->
  <!-- This is VERY preliminary, not yet for inclusion in distribution     -->
  <!-- =================================================================== -->
  <!--Collate the xml sources into a single xml source with a litle extra structure -->
  <target name="printerdocs" depends="prepare.docs">
    <echo message="NOTICE: requires fop.jar and xml.jar on the classpath"/>
    <java fork="yes" 
          classname="${xalan.cmdline.class}"
          classpathref="docs.class.path" >
      <arg line="-xsl ${xdocs.dir}/sources/xalan-collate.xsl 
                 -out xdocs/sources/xalan/xalan-collate.xml"/>
    </java>
    
    <!-- Transform collation into Formatting Objects 
         (with a little work on links along the way) -->    
    <java fork="yes" 
          classname="${xalan.cmdline.class}"
          classpathref="docs.class.path" >
      <arg line="-in  ${xdocs.dir}/sources/xalan/xalan-collate.xml
                 -param resourceFile '../../sources/xalan/resources.xml'
                 -param project ${Name-in-docs}      
                 -xsl ${xdocs.style}/stylesheets/xml2fo.xsl 
                 -out build/docs/xalan-collate.fo"/>
    </java>
    
    <!-- Use FOP to generate a pdf file (classpath may need updating! -sc 18-Apr-01)-->
    <java fork="yes" 
          classname="org.apache.fop.apps.CommandLine"
      classpath="${java.class.path}:${build.xalan.jar}:${bin.dir}/fop.jar:${bin.dir}/w3c.jar">
      <arg line="${build.docs}/xalan-collate.fo build/docs/xalan.pdf"/>
    </java>
  </target>

 
  <!-- =================================================================== -->
  <!-- Build XSLTC design documentation. Eventually intend to incorporate -->
  <!-- XSLTC into the Xalan book.                                         -->
  <!-- =================================================================== -->


  <target name="xsltc.prepare.docs" depends="prepare.docs.nojardepends">
   <mkdir dir="${build.docs}/xsltc"/>
   <!--   
   <echo message="Transform xsltc_todo.xml and put the result in ${build.docs}/xsltc"/>
   <java fork="yes" classname="${xalan.cmdline.class}">
      <classpath refid="docs.class.path" />
      <arg line="-in xsltc_todo.xml -xsl todo.xsl -out build/docs/xsltc/todo.html"/>
   </java>  -->
  </target>  
 
 <target name="xsltc.docs" depends="xsltc.prepare.docs">
   <echo message="Build the XSLTC Architectural documentation"/>
   <java fork="yes" 
         classname="${doc.generator}" 
         classpathref="docs.class.path" >
      <arg line="targetDirectory=${build.docs}/xsltc ${xdocs.dir}/sources/xsltc.xml ${xdocs.style}"/>
    </java>	 
    <copy todir="${build.docs}/xsltc" 
	file="${xdocs.dir}/sources/xsltc/README.xslt" />
    <copy todir="${build.docs}/xsltc" 
	file="${xdocs.dir}/sources/xsltc/README.xsltc" />
 </target>
 
   <!-- pack all doc for transfer to website -->
 <target name="pack.docs">
    <!--tar tarfile="./build/xalan-j-docs.tar" basedir="./xml-site/target/xalan-j" includes="**"/>
    <gzip src="./build/xalan-j-docs.tar" zipfile="./build/xalan-j-docs.tar.gz"/-->
    <zip zipfile="./build/xalan-j-docs.zip" basedir="./xml-site/target/xalan-j" includes="**"/>
  </target>


<!-- ####################################################
     # START OF SECTION TO BUILD STAND-ALONE SERIALIZER #
     #################################################### -->

  <!-- try not to use other properties directly when building the serializer -->
  <!-- either create new values, or copy, just in case we separate into      -->
  <!-- a totally new build.xml file                                          -->
  <property name="serializer.build.debug"   value="${build.debug}"            />
 
  
  <!-- PROPERTIES TO MAKE THE SOURCE DISTRIBUTION ========================== -->
  <property name="serializer.name"          value="serializer"                />
  <property name="serializer.version"       value="${version}"                />
  <property name="serializer.dist.file"     value="${serializer.name}-j_${serializer.version}"/>
  <property name="serializer.dist.dir"      value="${serializer.build.dir}/${serializer.dist.file}"/>

  <!-- patternset for source distribution packages -->
  <patternset id="serializer-src-distro" >
    <!-- some license and legal stuff -->
    <include name="${serializer.dist.file}/LICENSE.txt"/>
    <include name="${serializer.dist.file}/NOTICE.txt"/> 
    <include name="${serializer.dist.file}/KEYS"/>  

    <!-- The build stuff that uses Ant and this file itself, build.xml
         this is getting into a strange loop but the source distribution
         needs to build, and it uses this file, build.xml to do so ... -->
    <include name="${serializer.dist.file}/build.bat"/>
    <include name="${serializer.dist.file}/build.sh"/>
    <include name="${serializer.dist.file}/build.xml"/>

    <!-- The source code that the source distribution would build -->
    <include name="${serializer.dist.file}/src/${serializer.reldir}/**/*.java" />
    <include name="${serializer.dist.file}/src/${serializer.reldir}/**/*.properties" />
    <include name="${serializer.dist.file}/src/${serializer.manifest.basename}" />

    <!-- We need Ant in order to run build.xml in the source distribution -->
    <include name="${serializer.dist.file}/tools/ant.jar"/>
    <include name="${serializer.dist.file}/tools/antRun"/>
    <include name="${serializer.dist.file}/tools/antRun.bat"/>

    <!-- The serializer needs this jar in order to build -->
    <include name="${serializer.dist.file}/xml-apis.jar"/>
    
    <!-- Ant needs an XML parser in order to read in the build.xml, so it
         can even do the build ... this is a strange loop ... -->
    <include name="${serializer.dist.file}/xercesImpl.jar"/>
  </patternset>

  <!-- patternset for  binary distribution packages ... if needed
  <patternset id="serializer-bin-distro" >
    <include name="${serializer.dist.file}/LICENSE.txt"/>
    <include name="${serializer.dist.file}/NOTICE.txt"/>
    <include name="${serializer.dist.file}/KEYS"/>
    <include name="${serializer.dist.file}/${serializer.name}.jar"/>
    <include name="${serializer.dist.file}/${xmlapis.jar.name}"/>
    <include name="${serializer.dist.file}/${parser.jar.name}"/>    
  </patternset>
  -->
  
  <!-- =================================================================== -->
  <!-- Creates the Serializer jar                                          -->
  <!-- =================================================================== -->
  <target name="serializer.jar"
    depends="serializer.prepare,serializer.compile"
    description="Build the serializer and created serializer.jar" >
    <!-- Copy over the manifest, with filtering (for version number) -->
    <filter token="impl.version" value="${serializer.impl.version}"/>
    <filter token="java.version" value="${serializer.java.version}"/>
    <filter token="java.vendor"  value="${serializer.java.vendor}"/>
    <copy todir="${serializer.build.dir}" file="${serializer.manifest}" filtering="true"/>

    <jar jarfile="${build.serializer.jar}"
      manifest="${serializer.build.dir}/${serializer.manifest.basename}"
      basedir="${serializer.build.classes}" >
      <patternset><!-- relative to jar/@basedir -->
        <include name="${serializer.reldir}/**/*" />
      </patternset>
    </jar>
  </target>

  <target name="serializer.prepare">
    <mkdir dir="${serializer.build.dir}"/>
    <mkdir dir="${serializer.build.classes}"/>
  </target>

  <target name="serializer.compile">
    <echo message="Compiling the Serializer" />
    <javac srcdir="${serializer.src.dir}"
           destdir="${serializer.build.classes}"
           debug="${serializer.build.debug}" 
    	   target="${compiler.target}" source="${compiler.source}">
      <include name="${serializer.reldir}/**/*.java" />
      <classpath refid="compile.class.path" />
      <bootclasspath refid="xslt.boot.class.path" />
    </javac>
    <!-- Copy needed properties, resource, etc. files to be put into .jar file -->
    <copy todir="${serializer.build.classes}">
      <fileset dir="${serializer.src.dir}" includes="${serializer.reldir}/**/*.properties"/>
    </copy>

  </target>


  <!-- =================================================================== -->
  <!-- Creates the API documentation                                       -->
  <!-- =================================================================== -->
  <target name="serializer.javadocs"
    description="Build the Javadocs for the Serializer" >
    <echo message="javadocs is human-usable target with dependencies"/>  
    
    <mkdir dir="${build.docs}"/> 
    <mkdir dir="${build.apidocs}"/>
    <antcall target="serializer.autojavadocs"/>
  </target>

  <target name="serializer.autojavadocs" 
          depends="serializer.autojavadocs-1.4-or-higher-if,serializer.autojavadocs-non1.4-or-higher-if">
    <echo message="serializer.autojavadocs is for automated build process, without dependencies"/>
  </target>

  <target name="serializer.autojavadocs-1.4-or-higher-if" if="using-java-1.4-or-higher" 
          depends="check-using-java-1.4-or-higher">
    <antcall target="serializer.autojavadocs-1.4-or-higher"/>
  </target>

  <target name="serializer.autojavadocs-non1.4-or-higher-if" unless="using-java-1.4-or-higher" 
          depends="check-using-java-1.4-or-higher">
    <antcall target="serializer.autojavadocs-non1.4-or-higher"/>
  </target>

  <target name="serializer.autojavadocs-1.4-or-higher">
    
    <!-- Ant ignores destdir arg if doclet is set, so must send to doclet in doclet subelement-->
    <javadoc
         additionalparam="-breakiterator"
         destdir="${build.apidocs}"
         public="true"
         sourcepath="${src.dir}"
         packagenames="org.apache.*"
         author="true"
         version="true"
         use="true"
         windowtitle="${Name-in-docs} Serializer ${impl.version}" 
         doctitle="${Name-in-docs} Serializer ${impl.version}"
         bottom="Copyright &#169; ${year} Apache XML Project. All Rights Reserved.">
          <classpath refid="docs.class.path" />
          <taglet name="xalan2jtaglet.XSLUsageTag" path="${taglet.jar}"/>
          <group title="Serializer" packages="org.apache.xml.serialize*"/>
    </javadoc>
  </target>

  <target name="serializer.autojavadocs-non1.4-or-higher">
    <!-- Ant ignores destdir arg if doclet is set, so must send to doclet in doclet subelement-->
    <javadoc
         public="true"
         sourcepath="${src.dir}"
         packagenames="org.apache.*"
         author="true"
         version="true"
         use="true"
         windowtitle="${Name-in-docs} Serializer ${impl.version}" 
         doctitle="${Name-in-docs} Serializer ${impl.version}"
         bottom="Copyright &#169; ${year} Apache XML Project. All Rights Reserved.">
          <classpath refid="docs.class.path" />
          <doclet name="xalanjdoc.Standard" path="${doclet.jar}">
            <param name="-d" value="${build.apidocs}"/>
          </doclet>
          <group title="Serializer" packages="org.apache.xml.serialize*"/>
    </javadoc>
  </target>


  <!-- =================================================================== -->
  <!-- Create the serializer source distribution                           -->
  <!-- =================================================================== -->
  <target name="serializer-dist"
          depends="serializer.jar"
          description="Build the serializer source distribution .tar and .zip">
    <antcall target="serializer-autodist-mkdirs"/>
    <antcall target="serializer-autodist-copy-files"/>
      <!-- <antcall target="serializer-autodist-create-bin-packages"/> -->
    <antcall target="serializer-autodist-create-src-packages"/>
  </target>

  <target name="serializer-autodist-mkdirs">
    <echo message="Serializer: making distribution directories" />
    <mkdir dir="${serializer.dist.dir}"/> 
    <mkdir dir="${serializer.dist.dir}/src"/>
    <mkdir dir="${serializer.dist.dir}/tools"/>      
  </target>

  <target name="serializer-autodist-copy-files">
    <!-- Copy bin directory, which includes preexisting checked-in .jar files -->
<!--    <copy todir="${serializer.dist.dir}/bin">
      <fileset dir="${serializer.bin.dir}" />
    </copy> -->

    <echo message="Serializer: copy source files to ${serializer.dist.dir}/src" />
    <echo message="            ... from ${serializer.src.dir}/${serializer.reldir}" />
    <!-- Copy sources -->
    <copy todir="${serializer.dist.dir}/src/${serializer.reldir}">
      <fileset dir="${serializer.src.dir}/${serializer.reldir}"/>
    </copy>
    <!-- Copy the manifest -->
    <copy file="${serializer.src.dir}/${serializer.manifest.basename}"
          todir="${serializer.dist.dir}/src" />

    <!-- Copy built jars -->
    <copy file="${build.serializer.jar}" todir="${serializer.dist.dir}" />
    
    <!-- Copy runtime jars -->    
    <copy file="${lib.dir}/${xmlapis.jar.name}" todir="${serializer.dist.dir}" />
    <copy file="${lib.dir}/${parser.jar.name}" todir="${serializer.dist.dir}" />

    <!-- Copy licenses -->
    <copy todir="${serializer.dist.dir}">
      <fileset dir="." 
               includes="LICENSE.txt,NOTICE.txt"/>
    </copy>

    <!-- Copy tools -->
    <copy todir="${serializer.dist.dir}/tools">
      <fileset dir="./tools" includes="ant*"/>
    </copy>    

    <copy todir="${serializer.dist.dir}">
      <fileset dir="." includes="KEYS,build.xml,build.sh,build.bat"/>
    </copy>
  </target>

  <target name="serializer-autodist-create-bin-packages">
    <tar tarfile="${serializer.build.dir}/${serializer.dist.file}-bin.tar" >
      <tarfileset dir="${serializer.build.dir}">
        <patternset refid="serializer-bin-distro"/>
      </tarfileset>
    </tar>
    <gzip src="${serializer.build.dir}/${serializer.dist.file}-bin.tar" 
      zipfile="${serializer.build.dir}/${serializer.dist.file}-bin.tar.gz"/>

    <!--  
    <delete file="${serializer.build.dir}/${serializer.dist.file}-bin.tar" />
      -->

    <zip zipfile="${serializer.build.dir}/${serializer.dist.file}-bin.zip" >
      <fileset dir="${serializer.build.dir}">
        <patternset refid="serializer-bin-distro"/>
      </fileset>
    </zip>
  </target>

  <target name="serializer-autodist-create-src-packages">
    <tar tarfile="${serializer.build.dir}/${serializer.dist.file}-src.tar" >
      <tarfileset dir="${serializer.build.dir}">
        <patternset refid="serializer-src-distro"/>
      </tarfileset>
    </tar>
    <gzip src="${serializer.build.dir}/${serializer.dist.file}-src.tar" zipfile="${serializer.build.dir}/${serializer.dist.file}-src.tar.gz"/>

    <delete file="${serializer.build.dir}/${serializer.dist.file}-src.tar" />

    <zip zipfile="${serializer.build.dir}/${serializer.dist.file}-src.zip" >
      <fileset dir="${serializer.build.dir}">
        <patternset refid="serializer-src-distro"/>
      </fileset>
    </zip>
  </target>
<!-- ##################################################
     # END OF SECTION TO BUILD STAND-ALONE SERIALIZER #
     ################################################## -->

</project>
