<?xml version="1.0"?>
<!--
 * 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.
-->
<!-- ===================================================================

Read the README file for build instruction.

Authors:
  Stefano Mazzocchi <stefano@apache.org>
  Anupam Bagchi     <abagchi@apache.org>
  Andy Clark, IBM

   $Id: build.xml 567790 2007-08-20 19:16:53Z mrglavas $

==================================================================== -->
<project default="usage" basedir=".">
	
  <!-- Xerces Java directories -->
  <property name="build.dir" value="./build"/>
  <property name="data.dir" value="./data"/>
  <property name="docs.dir" value="./docs"/>
  <property name="samples.dir" value="./samples"/>
  <property name="src.dir" value="./src"/>
  <property name="tests.dir" value="./tests"/>
  <property name="tools.dir" value="./tools"/>

  <!-- enable compilation under JDK 1.4 and above -->
  <taskdef name="xjavac" classname="org.apache.xerces.util.XJavac">
    <classpath>
      <pathelement location="${tools.dir}/bin/xjavac.jar"/>
    </classpath>
  </taskdef>

  <!-- Allow properties following these statements to be overridden -->
  <!-- Note that all of these don't have to exist.  They've just been defined
       incase they are used. -->
  <property file="build.properties"/>
  <property file=".ant.properties"/>
  <property file="${user.home}/.ant.properties"/>
  <property file="default.properties"/>  
 
  <target name="init">
    <property name='parser.Name' value='Xerces-J'/>
    <property name='parser.name' value='xerces-j'/>
    <property name='parser.shortname' value='xerces'/>
    <property name='parser.Version' value='2.9.1'/>
    <property name='parser.version' value='2.9.1'/>
    <property name='parser_version' value='2_9_1'/>

    <property name='deprecatedjar.parser' value='xerces.jar'/>
    <property name='jar.apis' value='xml-apis.jar'/>
    <property name='jar.parser' value='xercesImpl.jar'/>
    <property name='jar.samples' value='xercesSamples.jar'/>
    <property name='jar.dv' value='xercesDV.jar'/>
    <property name='jar.resolver' value='resolver.jar'/>
    <property name='jar.serializer' value='serializer.jar'/>
    <property name='jar.junit' value='junit.jar'/>
    
    <property name='default.parser.config.name' value='XIncludeAwareParserConfiguration'/>
    <property name='default.parser.config.qualified' value='org.apache.xerces.parsers.XIncludeAwareParserConfiguration'/>

    <property name="year" value="1999-2007"/>
    <property name="copyright" value="Copyright &#169; ${year} The Apache Software Foundation. All Rights Reserved."/>

    <echo message= "---------------- ${parser.Name} ${parser.Version} [${year}] ---------------"/>
    <!-- changed made to synchronize with a patch from Sam Ruby (<rubys@apache.org>) to Xerces1
    <property name="build.compiler" value="classic"/> -->
    <property name="debug" value="off"/>
    <property name="optimize" value="on"/>
    <property name="deprecation" value="off"/>

    <property name="docs.book" value="${docs.dir}/docs-book.xml"/>

    <property name="packages" value="org.*"/>

    <property name="doc.generator" value="org.apache.stylebook.StyleBook"/>
    <property name="doc.generator.package" value="${tools.dir}/stylebook-1.0-b2.jar"/>

    <property name="build.src" value="${build.dir}/src"/>
    <property name="build.dest" value="${build.dir}/classes"/>
    <property name="build.docs" value="${build.dir}/docs"/>
    <property name="build.samples" value="${build.dir}/samples"/>
    <property name="build.tests" value="${build.dir}/tests"/>
    <property name="build.data" value="${build.dir}/data"/>
    <property name="build.javadocs" value="${build.dir}/docs/javadocs"/>

    <property name="distsrc.dir" value="${build.dir}/${parser.shortname}-${parser_version}"/>
    <property name="disttools.dir" value="${build.dir}/tools"/>
    <property name="distbin.dir" value="${build.dir}/${parser.shortname}-${parser_version}"/>
    <property name='src.apis.zip' value="${tools.dir}/xml-commons-external-src.zip"/>

    <filter token="year" value="${year}"/>
    <filter token="version" value="${parser.Version}"/>
    <filter token="date" value="${TODAY}"/>
    <filter token="log" value="true"/>
    <filter token="verbose" value="true"/>

  </target>

  <!-- =================================================================== -->
  <!-- Help on usage                                                       -->
  <!-- =================================================================== -->
  <target name="usage" depends="init">
    <echo message=""/>
    <echo message=""/>
    <echo message="${parser.Name} Build instructions"/>
    <echo message="-------------------------------------------------------------"/>
    <echo message=""/>
    <echo message=" available targets are:"/>
    <echo message=""/>
    
    <echo message=" jar      --> generates the xercesImpl.jar file"/>
    <echo message=" sampjar  --> generates the xercesSamples.jar file"/>
    <echo message=" jars --> generates xercesImpl &amp; xercesSamples jars"/>
    <echo message=" jar-schema11 --> 'jar' + XML Schema 1.1 support"/>
    <echo message=" jars-schema11 --> 'jars' + XML Schema 1.1 support"/>
    <echo message=" docs     --> generates the HTML documentation"/>
    <echo message=" javadocs --> generates the API docs (needs Java 1.2 or higher)"/>
    <echo message=" samples  --> compiles the samples source code"/>
    <echo message=" compile  --> compiles the source code"/>
    <echo message=" deprecatedjar  --> generates the xerces.jar file"/>
    <echo message=" tests    --> compiles the tests source code"/>
    <echo message=" deprecatedjars --> generates xerces.jar and samples jar"/>
    <echo message=" dtdjars --> generates xercesImpl containing no schema support or WML/HTML DOM and xercesSamples &amp; xml-apis jars"/>
    <echo message=" dvjar --> generates a Schema datatype jar"/>
    <echo message=" pack-tools --> generates the tools distributions (zip and tar.gz)"/>
    <echo message=" pack-src   --> generates the source distributions (zip and tar.gz)"/>
    <echo message=" deprecated-bin --> generates the binary distributions (zip and tar.gz)"/>
    <echo message=" pack-bin --> generates the binary distributions (zip and tar.gz)"/>
    <echo message=" all      --> generates the binary, source and tools distributions"/>
    <echo message=" deprecatedall --> generates the binary, source and tools distributions with the xerces.jar"/>
    <echo message=" test     --> runs a sanity test on the sample files"/>
    <echo message=" clean    --> cleans up all generated files and directories"/>
    <echo message=" usage    --> provides help on using the build tool (default)"/>
    <echo message=""/>
    <echo message=" See comments inside the build.xml file for more details."/>
    <echo message="-------------------------------------------------------------"/>
    <echo message=""/>
    <echo message=""/>
  </target>

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

  <!-- =================================================================== -->
  <!-- directory creation and file copying common to all configurations    -->
  <!-- =================================================================== -->
  <target name="prepare-common" depends="prepare">
    <!-- create directories -->
    <mkdir dir="${build.src}"/>
    <mkdir dir="${build.dest}"/>
    <mkdir dir="${build.dest}/META-INF"/>
    <mkdir dir="${build.dest}/META-INF/services"/>

    <copy file="${src.dir}/org/apache/xerces/jaxp/javax.xml.parsers.DocumentBuilderFactory"
      tofile="${build.dest}/META-INF/services/javax.xml.parsers.DocumentBuilderFactory"/>

    <copy file="${src.dir}/org/apache/xerces/jaxp/javax.xml.parsers.SAXParserFactory"
      tofile="${build.dest}/META-INF/services/javax.xml.parsers.SAXParserFactory"/>
  	
    <copy file="${src.dir}/org/apache/xerces/jaxp/datatype/javax.xml.datatype.DatatypeFactory"
      tofile="${build.dest}/META-INF/services/javax.xml.datatype.DatatypeFactory"/>
  	
    <copy file="${src.dir}/org/apache/xerces/jaxp/validation/javax.xml.validation.SchemaFactory"
      tofile="${build.dest}/META-INF/services/javax.xml.validation.SchemaFactory"/>

    <copy file="${src.dir}/org/apache/xerces/parsers/org.xml.sax.driver"
      tofile="${build.dest}/META-INF/services/org.xml.sax.driver"/>
    
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the source code                                            -->
  <!-- =================================================================== -->
  <target name="prepare-src" depends="prepare-common">
  	
  	<!-- Do not include this file in xercesImpl.jar. It prevents applications further down the 
  	     classpath from overriding the parser's default and may also cause an incompatible mix 
  	     of classes to be loaded leading to a failure such as a NoSuchMethodError. -->
  	<!-- <copy file="${src.dir}/org/apache/xerces/parsers/org.apache.xerces.xni.parser.XMLParserConfiguration"
      tofile="${build.dest}/META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration"/> -->
      
    <copy file="${src.dir}/org/apache/xerces/dom/org.w3c.dom.DOMImplementationSourceList"
      tofile="${build.dest}/META-INF/services/org.w3c.dom.DOMImplementationSourceList"/>

    <!-- copy src files -->
    <copy todir="${build.src}">
        <fileset 
            dir="${src.dir}"
            includes="org/apache/**
                org/w3c/dom/html/HTMLDOMImplementation.java"
            excludes="**/classfiles_updated **/CVS* **/.#* **/XMLMessages.java
                       **/DatatypeContentModel.java **/ComplexTypeInfo.java
                       **/v1/** **/v2/**
                       javax.xml.parsers.ConvertToURI.java">
        </fileset>
    </copy>

    <!-- now deal with API's:  -->
    <unzip src="${src.apis.zip}" dest="${build.src}">
        <patternset
            includes="org/xml/sax/** 
                javax/xml/**
                javax/xml/datatype/**
                javax/xml/namespace/**
                javax/xml/parsers/**
                javax/xml/transform/**
                javax/xml/validation/**
                javax/xml/xpath/**
                org/w3c/dom/*
                org/w3c/dom/bootstrap/**
                org/w3c/dom/events/**
                org/w3c/dom/html/**
                org/w3c/dom/ls/**
                org/w3c/dom/ranges/**
                org/w3c/dom/traversal/**
        	    org/w3c/dom/xpath/**"
        />
    </unzip>
    
    <!-- substitute tokens as needed -->
    <replace file="${build.dir}/src/org/apache/xerces/impl/Version.java" 
             token="@@VERSION@@" value="${parser.Name} ${parser.Version}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the source directory                                       -->
  <!-- =================================================================== -->
  <target name="compile" depends="prepare-src">
    <copy todir="${build.dest}">
      <fileset dir="${build.src}"
        includes="**/*.res, **/*.properties">
      </fileset>
    </copy>

    <xjavac srcdir="${build.src}"
           destdir="${build.dest}"
           classpath="${build.dir}/classes:${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}"
           debug="${debug}"
           deprecation="${deprecation}"
           optimize="${optimize}"
           includeAntRuntime="false"
           includeJavaRuntime="false"
           excludes="org/xml/sax/** 
                javax/xml/**
                org/w3c/dom/*
                org/w3c/dom/events/**
                org/w3c/dom/ls/**
                org/w3c/dom/html/**
                org/w3c/dom/ranges/**
                org/w3c/dom/traversal/**
                org/w3c/dom/xpath/**"
           />
  </target>

  <!-- =================================================================== -->
  <!-- Creates the omnibus class package                                   -->
  <!-- =================================================================== -->
  <target name="deprecatedjar" depends="compile">
    <jar jarfile="${build.dir}/${deprecatedjar.parser}"
         basedir="${build.dest}"
         compress="true"
         includes="org/**, javax/**,META-INF/**">
      <metainf dir="." includes="LICENSE,NOTICE"/>
    </jar>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the implementation class package, including DOM Level 3     -->
  <!-- =================================================================== -->
  <target name="jar" depends="compile">
    <!-- take care of manifest file -->
    <filter token="java.version" value="${java.version}"/>
    <filter token="java.vendor" value="${java.vendor}"/>
    <filter token="impl.name" value="${parser.Name} ${parser.Version}"/>
    <filter token="impl.version" value="${parser.Version}"/>   
    <copy todir="${build.dir}" file="${src.dir}/manifest.xerces" filtering="true"/>
    <jar jarfile="${build.dir}/${jar.parser}"
         basedir="${build.dest}"
         compress="true"
         includes="org/apache/**, META-INF/**
                   org/w3c/dom/html/HTMLDOMImplementation.class"
         manifest="${build.dir}/manifest.xerces">
      <manifest>
        <attribute name="Ant-Version" value="${ant.version}"/>
      </manifest>
      <metainf dir="." includes="LICENSE,NOTICE"/>
    </jar>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the samples                                                -->
  <!-- =================================================================== -->
  <target name="samples" depends="compile">
    <mkdir dir="${build.samples}"/>
    <copy todir="${build.samples}" >
        <fileset dir="${samples.dir}"/>
    </copy>
    <xjavac srcdir="${build.samples}"
           destdir="${build.dest}"
           classpath="${build.dir}/classes:${tools.dir}/${jar.apis}"
           debug="${debug}"
           includeAntRuntime="false"
           includeJavaRuntime="true"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the tests                                                  -->
  <!-- =================================================================== -->
  <target name="tests" depends="samples">
    <mkdir dir="${build.tests}"/>
    <copy todir="${build.tests}">
        <fileset dir="${tests.dir}"
         excludes="dom/rename/**" />
    </copy>
    <xjavac srcdir="${build.tests}"
           destdir="${build.dest}"
           classpath="${tools.dir}/${jar.apis}:${build.dir}/classes:./tools/junit.jar"
           debug="${debug}"
           includeAntRuntime="false"
           includeJavaRuntime="true"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the samples package                                         -->
  <!-- =================================================================== -->
  <target name="sampjar" depends="samples">
    <jar jarfile="${build.dir}/${jar.samples}"
         basedir="${build.dest}"
         compress="true"
         includes="dom/**,sax/**,jaxp/**,socket/**,ui/**,xni/**,xs/**">
      <metainf dir="." includes="LICENSE,NOTICE"/>
    </jar>
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the docs                                                   -->
  <!-- =================================================================== -->
  <target name="prepare-docs" depends="init"> 
    <mkdir dir="${build.docs}"/>
    <mkdir dir="${build.dir}/xdocs"/>
    <copy todir="${build.dir}/xdocs">
        <fileset dir="${docs.dir}"/>
    </copy>
    <replace file="${build.dir}/xdocs/dtd/entities.ent" 
             token="@@VERSION@@" value="${parser.Version}"/>
    <replace file="${build.dir}/xdocs/dtd/entities.ent" 
             token="@@version@@" value="${parser.version}"/>
    <replace file="${build.dir}/xdocs/dtd/entities.ent" 
             token="@@_version_@@" value="${parser_version}"/>
    <replace file="${build.dir}/xdocs/dtd/entities.ent" 
             token="@@DEFAULT_CONFIG@@" value="${default.parser.config.name}"/>
    <replace file="${build.dir}/xdocs/dtd/entities.ent" 
             token="@@DEFAULT_CONFIG_LONG@@" value="${default.parser.config.qualified}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Generate HTML docs                                                  -->
  <!-- =================================================================== -->
  <target name="docs" depends="prepare, prepare-docs">
    <echo message="Building docs for ${parser.Name} ${parser.Version} ..." />
    <java fork="yes"
          classpath="${java.class.path}:${doc.generator.package}:./tools/xalan.jar"
          classname="${doc.generator}"
          failOnError="yes">
      <arg value="targetDirectory=${build.docs}"/>
      <arg value="${build.dir}/xdocs/docs-book.xml"/>
      <arg value="${build.dir}/xdocs/style"/>
    </java>

    <copy file="${docs.dir}/download.cgi" tofile="${build.docs}/download.cgi"/>
    
  </target>


  <target name="javadoc-replace" unless="additional.param">
    <replace token="@xerces.internal" dir="${build.src}">
      <replacevalue><![CDATA[<DL><DT><H1 style="font-size:110%">INTERNAL:</H1><DD>Usage of this class is not supported. It may be altered or removed at any time.</DD></DT></DL>]]></replacevalue>
    </replace>
  	
    <replace token="@xerces.experimental" dir="${build.src}">
      <replacevalue><![CDATA[<DL><DT><H1 style="font-size:150%">EXPERIMENTAL:</H1><DD>This class should not be considered stable. It is likely to be altered or replaced in the future.</DD></DT></DL>]]></replacevalue>
    </replace>
  </target>
	
  <!-- =================================================================== -->
  <!-- Creates the API documentation                                       -->
  <!-- =================================================================== -->
  <target name="javadocs" depends="prepare-src">	
  		
    <condition property="additional.param" value=" -taglet org.apache.xerces.util.ExperimentalTaglet -taglet org.apache.xerces.util.InternalTaglet -tagletpath ${tools.dir}/bin/xerces2taglets.jar">
      <available classname="com.sun.tools.doclets.Taglet"/>
    </condition>
  	
    <antcall target="javadoc-replace" />
  	
    <condition property="additional.param" value="">
      <not>
        <available classname="com.sun.tools.doclets.Taglet"/>
      </not>
    </condition>
  	
    <mkdir dir='${build.dir}/docs/javadocs/api'/>
    <javadoc packagenames='javax.xml.*,org.w3c.*,org.xml.*'
      locale='en_US'
      sourcepath='${build.src}' destdir='${build.dir}/docs/javadocs/api'
      author='true' version='true'
      windowtitle='XML Standard API' doctitle='XML Standard API'
      bottom='${copyright}'
      additionalparam='${additional.param}'
      />
    <mkdir dir='${build.dir}/docs/javadocs/xni'/>
    <javadoc packagenames='org.apache.xerces.xni.*'
      locale='en_US'
      sourcepath='${build.src}' destdir='${build.dir}/docs/javadocs/xni'
      author='true' version='true'
      windowtitle='Xerces Native Interface' 
      doctitle='Xerces Native Interface'
      bottom='${copyright}'
      additionalparam='${additional.param}'
      />
    <mkdir dir='${build.dir}/docs/javadocs/xs'/>
    <javadoc packagenames='org.apache.xerces.xs, org.apache.xerces.xs.datatypes'
      locale='en_US'
      sourcepath='${build.src}' destdir='${build.dir}/docs/javadocs/xs'
      author='true' version='true'
      windowtitle='XML Schema API' 
      doctitle='XML Schema API'
      bottom='${copyright}'
      additionalparam='${additional.param}'
      />
    
    <mkdir dir='${build.dir}/docs/javadocs/xerces2'/>
    <javadoc packagenames='org.apache.xerces.dom.*,
                           org.apache.xerces.impl.*,
                           org.apache.xerces.jaxp.*,
                           org.apache.xerces.parsers,
                           org.apache.xerces.util,
                           org.apache.xerces.xinclude,
                           org.apache.xerces.xpointer'
      locale='en_US'
      sourcepath='${build.src}' destdir='${build.dir}/docs/javadocs/xerces2'
      classpath='${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}'
      author='true' version='true'
      windowtitle='Xerces2 Implementation' 
      doctitle='Xerces2 Implementation'
      bottom='${copyright}'
      additionalparam='${additional.param}'
      />
    <mkdir dir='${build.dir}/docs/javadocs/other'/>
    <javadoc packagenames='org.apache.html.*,
                           org.apache.wml.*,
                           org.apache.xml.serialize.*'
      locale='en_US'
      sourcepath='${build.src}' destdir='${build.dir}/docs/javadocs/other'
      author='true' version='true'
      windowtitle='Other Classes' doctitle='Other Classes'
      bottom='${copyright}'
      additionalparam='${additional.param}'
      />
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the source distribution                                    -->
  <!-- =================================================================== -->
  <target name="pack-src" depends="init">
    <echo message="Building the source distribution files (zip,tar)"/>
    <delete dir="${distbin.dir}"/>

    <mkdir dir="${distsrc.dir}"/>
    <mkdir dir="${distsrc.dir}/src"/>
    <mkdir dir="${distsrc.dir}/data"/>
    <mkdir dir="${distsrc.dir}/docs"/>
    <mkdir dir="${distsrc.dir}/samples"/>

    <copy todir="${distsrc.dir}/src" >
        <fileset
            dir="${src.dir}"  
            includes="org/**, dom3/**, javax/**, manifest.xerces"
            excludes="**/CVS*, **/.#*, **/*.class
                      **/v1/** **/v2/**"
        />
    </copy>


    <copy todir="${distsrc.dir}/data" >
        <fileset
            dir="${data.dir}"  
            excludes="**/CVS*, **/.#*"
        />
    </copy>

    <copy todir="${distsrc.dir}/docs" >
        <fileset
            dir="${docs.dir}" 
            excludes="**/CVS*, **/*.#*, pdf/**, html/**, **/javadocs*"
        />
    </copy>

    <copy todir="${distsrc.dir}/samples" >
        <fileset
            dir="${samples.dir}"  
            excludes="**/CVS*, **/*.#*"
        />
    </copy>

    <copy file="LICENSE" tofile="${distsrc.dir}/LICENSE"/>
    <copy file="NOTICE" tofile="${distsrc.dir}/NOTICE"/>
    <copy file="NOTICE.resolver.txt" tofile="${distsrc.dir}/NOTICE.resolver.txt"/>
    <copy file="NOTICE.serializer.txt" tofile="${distsrc.dir}/NOTICE.serializer.txt"/>
    <copy file="LICENSE.DOM-documentation.html" tofile="${distsrc.dir}/LICENSE.DOM-documentation.html"/>
    <copy file="LICENSE.DOM-software.html" tofile="${distsrc.dir}/LICENSE.DOM-software.html"/>
    <copy file="LICENSE-SAX.html" tofile="${distsrc.dir}/LICENSE-SAX.html"/>
    <copy file="LICENSE.resolver.txt" tofile="${distsrc.dir}/LICENSE.resolver.txt"/>
    <copy file="LICENSE.serializer.txt" tofile="${distsrc.dir}/LICENSE.serializer.txt"/>
    <copy file="README" tofile="${distsrc.dir}/README"/>
    <copy file="Readme.html" tofile="${distsrc.dir}/Readme.html"/>
    <copy file="build.xml" tofile="${distsrc.dir}/build.xml"/>
    <copy file="${basedir}/build.sh" tofile="${distsrc.dir}/build.sh" />
    <chmod file="${distsrc.dir}/build.sh" perm="ugo+rx" />
    <copy file="${basedir}/build.bat" tofile="${distsrc.dir}/build.bat" />

    <zip zipfile="${build.dir}/${parser.Name}-src.${parser.version}.zip" 
         basedir="${build.dir}"
         includes="${parser.shortname}-${parser_version}/**" excludes="*.class"/>

    <tar tarfile="${build.dir}/${parser.Name}-src.${parser.version}.tar" 
         basedir="${build.dir}"
         includes="${parser.shortname}-${parser_version}/**" excludes="*.class"/>
    <gzip zipfile="${build.dir}/${parser.Name}-src.${parser.version}.tar.gz"
          src="${build.dir}/${parser.Name}-src.${parser.version}.tar" />
    <!-- and why not get rid of the un-gzip'd tarball and save ourselves 15 Mb? -->
    <delete file="${build.dir}/${parser.Name}-src.${parser.version}.tar"/>
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the tools distribution                                     -->
  <!-- =================================================================== -->
  <target name="pack-tools" depends="init">
    <echo message="Building the tools distribution files (zip,tar)"/>
    <mkdir dir="${disttools.dir}"/>

    <copy todir="${disttools.dir}" >
        <fileset
            dir="${tools.dir}"  
            includes="**/*.txt, **/*.html, **/*.bat, **/*.jar, **/*.zip, **/*.opt"
            excludes="**/CVS*, **/.#*, **/*.class"
        />
    </copy>

    <zip zipfile="${build.dir}/${parser.Name}-tools.${parser.version}.zip" 
         basedir="${build.dir}"
         includes="tools/**"/>

    <tar tarfile="${build.dir}/${parser.Name}-tools.${parser.version}.tar" 
         basedir="${build.dir}"
         includes="tools/**"/>
    <gzip zipfile="${build.dir}/${parser.Name}-tools.${parser.version}.tar.gz"
          src="${build.dir}/${parser.Name}-tools.${parser.version}.tar" />
    <!-- and why not get rid of the un-gzip'd tarball and save ourselves Mb? -->
    <delete file="${build.dir}/${parser.Name}-tools.${parser.version}.tar"/>
    <!-- and delete the directory:  -->
    <delete dir="${disttools.dir}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Prepares common parts of the binary distributions                   -->
  <!-- =================================================================== -->
  <target name="pack-bin-common" depends="javadocs, docs, sampjar">

    <echo message="Building the binary distribution files (zip,tar)"/>
    <delete dir="${distbin.dir}"/>
    <mkdir dir="${distbin.dir}"/>
    <mkdir dir="${distbin.dir}/data"/>
    <mkdir dir="${distbin.dir}/docs"/>
    <mkdir dir="${distbin.dir}/docs/javadocs"/>
    <mkdir dir="${distsrc.dir}/samples"/>

    <copy todir="${distbin.dir}/data" >
        <fileset
            dir="${data.dir}"
            excludes="**/CVS*, **/*.#*"
        />
    </copy>

    <copy todir="${distbin.dir}/docs" >
        <fileset dir="${build.docs}" />
    </copy>

    <copy todir="${distbin.dir}/docs/javadocs/api" >
        <fileset dir="${build.dir}/docs/javadocs/api" />
    </copy>
    <copy todir="${distbin.dir}/docs/javadocs/xni" >
        <fileset dir="${build.dir}/docs/javadocs/xni" />
    </copy>
    <copy todir="${distbin.dir}/docs/javadocs/xerces2" >
        <fileset dir="${build.dir}/docs/javadocs/xerces2" />
    </copy>
    <copy todir="${distbin.dir}/docs/javadocs/other" >
        <fileset dir="${build.dir}/docs/javadocs/other" />
    </copy>

    <copy file="LICENSE" tofile="${distbin.dir}/LICENSE"/>
    <copy file="NOTICE" tofile="${distsrc.dir}/NOTICE"/>
    <copy file="NOTICE.resolver.txt" tofile="${distsrc.dir}/NOTICE.resolver.txt"/>
    <copy file="NOTICE.serializer.txt" tofile="${distsrc.dir}/NOTICE.serializer.txt"/>
    <copy file="LICENSE.DOM-documentation.html" tofile="${distsrc.dir}/LICENSE.DOM-documentation.html"/>
    <copy file="LICENSE.DOM-software.html" tofile="${distsrc.dir}/LICENSE.DOM-software.html"/>
    <copy file="LICENSE-SAX.html" tofile="${distbin.dir}/LICENSE-SAX.html"/>
    <copy file="LICENSE.resolver.txt" tofile="${distbin.dir}/LICENSE.resolver.txt"/>
    <copy file="LICENSE.serializer.txt" tofile="${distsrc.dir}/LICENSE.serializer.txt"/>
    <copy file="Readme.html" tofile="${distbin.dir}/Readme.html"/>

    <copy file="${build.dir}/${jar.samples}" tofile="${distbin.dir}/${jar.samples}"/>

    <copy todir="${distsrc.dir}/samples" >
        <fileset
            dir="${samples.dir}"
            excludes="**/CVS*, **/*.#*"
        />
    </copy>

    <copydir src="${samples.dir}" dest="${distsrc.dir}/samples" excludes="**/CVS*, **/*.#*"/>
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the binary distribution                                    -->
  <!-- =================================================================== -->
  <target name="pack-bin" depends="pack-bin-common, jars">
    <copy file="${build.dir}/${jar.parser}" tofile="${distbin.dir}/${jar.parser}"/>
    <!-- include the xml-commons APIs -->
    <copy file="${tools.dir}/${jar.apis}" tofile="${distbin.dir}/${jar.apis}"/>
    <!-- include the xml-commons resolver -->
    <copy file="${tools.dir}/${jar.resolver}" tofile="${distbin.dir}/${jar.resolver}"/>
    <!-- include the Xalan Serializer -->
    <copy file="${tools.dir}/${jar.serializer}" tofile="${distbin.dir}/${jar.serializer}"/>

    <zip zipfile="${build.dir}/${parser.Name}-bin.${parser.version}.zip" 
         basedir="${build.dir}"
         includes="${parser.shortname}-${parser_version}/**" 
         excludes="*.class, **/${deprecatedjar.parser}"/>
    <tar tarfile="${build.dir}/${parser.Name}-bin.${parser.version}.tar" 
         basedir="${build.dir}"
         includes="${parser.shortname}-${parser_version}/**" 
         excludes="*.class, **/${deprecatedjar.parser}"/>
    <gzip zipfile="${build.dir}/${parser.Name}-bin.${parser.version}.tar.gz"
          src="${build.dir}/${parser.Name}-bin.${parser.version}.tar" />
    <!-- as before, let's kill of the ungzip'd tarball! -->
    <delete file="${build.dir}/${parser.Name}-bin.${parser.version}.tar"/>

  </target>

  <!-- =================================================================== -->
  <!-- Prepares the deprecated binary distribution                         -->
  <!-- =================================================================== -->
  <target name="deprecated-bin" depends="pack-bin-common, deprecatedjars">
    <copy file="${build.dir}/${deprecatedjar.parser}" tofile="${distbin.dir}/${deprecatedjar.parser}"/>
    
    <!-- include the xml-commons resolver -->
    <copy file="${tools.dir}/${jar.resolver}" tofile="${distbin.dir}/${jar.resolver}"/>
    <!-- include the Xalan Serializer -->
    <copy file="${tools.dir}/${jar.serializer}" tofile="${distbin.dir}/${jar.serializer}"/>

    <zip zipfile="${build.dir}/deprecated${parser.Name}-bin.${parser.version}.zip" 
         basedir="${build.dir}"
         includes="${parser.shortname}-${parser_version}/**" 
         excludes="*.class, **/${jar.parser}, **/${jar.apis}"/>
    <tar tarfile="${build.dir}/deprecated${parser.Name}-bin.${parser.version}.tar" 
         basedir="${build.dir}"
         includes="${parser.shortname}-${parser_version}/**" 
         excludes="*.class, **/${jar.parser}, **/${jar.apis}"/>
    <gzip zipfile="${build.dir}/deprecated${parser.Name}-bin.${parser.version}.tar.gz"
          src="${build.dir}/deprecated${parser.Name}-bin.${parser.version}.tar" />
    <!-- as before, let's kill of the ungzip'd tarball! -->
    <delete file="${build.dir}/deprecated${parser.Name}-bin.${parser.version}.tar"/>

  </target>

  <!-- =================================================================== -->
  <!-- Do a sanity test using samples                                      -->
  <!-- =================================================================== -->
  <target name="test" depends="tests">
    <echo message="Performing sanity test for ${parser.Name} ${parser.Version} ..." />
    <echo message="Using classpath=&apos;${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${build.dir}/classes&apos;" />
    <echo message="Running sax.Counter ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="sax.Counter"
          failOnError="yes">
       <arg value="${data.dir}/personal.xml"/>
    </java>
    <echo message="Running sax.Writer ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes" 
          classname="sax.Writer"
          failOnError="yes">
       <arg value="${data.dir}/personal.xml"/>
    </java>
    <echo message="Running dom.Counter ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.Counter"
          failOnError="yes">
       <arg value="${data.dir}/personal.xml"/>
    </java>
    <echo message="Running dom.Writer ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes" 
          classname="dom.Writer"
          failOnError="yes">
       <arg value="${data.dir}/personal.xml"/>
    </java>
    <echo message="Running thread.Test dom" />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="thread.Test"
          failOnError="yes">
           <arg value="-dom"/>
           <arg value="-threads"/>
           <arg value="20"/>
           <arg value="-time"/>
           <arg value="10"/>
           <arg value="${data.dir}/personal-schema.xml"/>

    </java>
    <echo message="Running thread.Test sax" />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="thread.Test"
          failOnError="yes">
           <arg value="-threads"/>
           <arg value="20"/>
           <arg value="-time"/>
           <arg value="10"/>
           <arg value="${data.dir}/personal-schema.xml"/>

    </java>



    <!--
    <echo message="Running DOMFilter ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.DOMFilter"
          args="-p dom.wrappers.DOMParser ${data.dir}/personal.xml"/>
    -->
    <!-- The following are samples but not command-line applications.
    <echo message="Running IteratorView ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.traversal.IteratorView"
          failOnError="yes"
          args="${data.dir}/personal.xml"/>
    <echo message="Running TreeWalkerView ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.traversal.TreeWalkerView"
          failOnError="yes"
          args="${data.dir}/personal.xml"/>
    <echo message="Running TreeViewer ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.TreeViewer"
          failOnError="yes"
          args="${data.dir}/personal.xml"/>
     -->
    <echo message="Running dom.DTest ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.DTest"
          failOnError="yes">
    </java>
    <echo message="Running dom.mem.Test ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.mem.Test"
          failOnError="yes">
    </java>
    <echo message="Running dom.range.Test ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.range.Test"
          failOnError="yes">
		<arg value="all"/>
    </java>

    <echo message="Running dom.ids.Test ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.ids.Test"
          failOnError="yes">
    </java>
    <echo message="Running dom.serialization.Test ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.serialization.Test"
          failOnError="yes">
           <arg value="${data.dir}/personal-schema.xml"/>
           <arg value="out.xml"/>
    </java>
    <echo message="Running schema.Test ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="schema.Test"
          failOnError="yes">
    </java>
    <echo message="Running schema.config.AllTests ..." />
  	<java fork="yes"
          classname="schema.config.AllTests"
          failOnError="yes">
        <classpath>
            <pathelement path="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes" />
            <pathelement path="${tools.dir}/${jar.junit}" />
            <pathelement path="${build.dir}/tests" />
        </classpath>
    </java>
    <echo message="Running schema.annotations.AllTests ..." />
  	<java fork="yes"
          classname="schema.annotations.AllTests"
          failOnError="yes">
        <classpath>
            <pathelement path="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes" />
            <pathelement path="${tools.dir}/${jar.junit}" />
            <pathelement path="${build.dir}/tests" />
        </classpath>
    </java>
    <echo message="Running jaxp.PropertyTest ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="jaxp.PropertyTest"
          failOnError="yes">
    </java>
    <echo message="Running jaxp.JAXPSpecTest ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="jaxp.JAXPSpecTest"
          failOnError="yes">
           <arg value="testSchemaLanguageSAX"/>
           <arg value="testSchemaSourceSAX"/>
           <arg value="testSchemaLanguageDOM"/>
           <arg value="testSchemaSourceDOM"/>
    </java>
    <echo message="Running xinclude.Test ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="xinclude.Test"
          failOnError="yes">
    </java>
    <echo message="Running dom.registry.Test ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.registry.Test"
          failOnError="yes">
    </java>
    <echo message="Running dom.dom3.Test ..." />
    <java fork="yes"
          classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}:${build.dir}/classes"
          classname="dom.dom3.Test"
          failOnError="yes">
    </java>    
  </target>

  <!-- =================================================================== -->
  <!-- Builds both deprecated xerces and sample jar files                  -->
  <!-- =================================================================== -->
  <target name="deprecatedjars" depends="deprecatedjar, sampjar">
    <!-- include the xml-commons resolver -->
    <copy file="${tools.dir}/${jar.resolver}" tofile="${build.dir}/${jar.resolver}"/>
    <!-- include the Xalan Serializer -->
    <copy file="${tools.dir}/${jar.serializer}" tofile="${build.dir}/${jar.serializer}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Builds xercesImpl, xml-apis and sample jar files                    -->
  <!-- =================================================================== -->
  <target name="jars" depends="jar, sampjar">
    <!-- include the xml-commons APIs -->
    <copy file="${tools.dir}/${jar.apis}" tofile="${build.dir}/${jar.apis}"/>
    <!-- include the xml-commons resolver -->
    <copy file="${tools.dir}/${jar.resolver}" tofile="${build.dir}/${jar.resolver}"/>
    <!-- include the Xalan Serializer -->
    <copy file="${tools.dir}/${jar.serializer}" tofile="${build.dir}/${jar.serializer}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Builds and packages tools, sources and binary distributions         -->
  <!-- =================================================================== -->
  <target name="all" depends="pack-bin, pack-src, pack-tools">
  </target>

  <!-- =================================================================== -->
  <!-- Builds and packages tools, sources and binary distributions         -->
  <!-- =================================================================== -->
  <target name="deprecatedall" depends="pack-src, deprecated-bin, pack-tools">
  </target>

  <!-- =================================================================== -->
  <!-- Cleans everything                                                   -->
  <!-- =================================================================== -->
  <target name="clean" depends="init">
    <delete dir="${build.dir}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the dtd implementation class package                        -->
  <!-- (that is, with no schema support or WML/HTML DOM.)                  -->
  <!-- =================================================================== -->
  <target name="dtdjar" depends="dtdcompile">
    <!-- take care of manifest file -->
    <filter token="java.version" value="${java.version}"/>
    <filter token="java.vendor" value="${java.vendor}"/>
    <filter token="impl.name" value="${parser.Name} ${parser.Version}"/>
    <filter token="impl.version" value="${parser.Version}"/>   
    <copy todir="${build.dir}" file="${src.dir}/manifest.xerces" filtering="true"/>
    <jar jarfile="${build.dir}/dtd-${jar.parser}"
         basedir="${build.dest}"
         compress="true"
         includes="org/apache/**, META-INF/**
                   org/w3c/dom/html/HTMLDOMImplementation.class"
         manifest="${build.dir}/manifest.xerces">
      <manifest>
        <attribute name="Ant-Version" value="${ant.version}"/>
      </manifest>
      <metainf dir="." includes="LICENSE,NOTICE"/>
    </jar>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the dtd source directory                                   -->
  <!-- =================================================================== -->
  <target name="dtdcompile" depends="dtdprepare-src">
    <copy todir="${build.dest}">
      <fileset dir="${build.src}"
        includes="**/*.res, **/*.properties">
      </fileset>
    </copy>

    <xjavac srcdir="${build.src}"
           destdir="${build.dest}"
           debug="${debug}"
           deprecation="${deprecation}"
           optimize="${optimize}"
           includeAntRuntime="false"
           includeJavaRuntime="true"
           classpath="${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}"/>
  </target>


  <!-- =================================================================== -->
  <!-- Compiles the dtd source code package                               -->
  <!-- =================================================================== -->
  <target name="dtdprepare-src" depends="prepare-common">
    <copy file="${src.dir}/org/apache/xerces/parsers/org.apache.xerces.xni.parser.DTDConfiguration"
      tofile="${build.dest}/META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration"/>
      
    <copy file="${src.dir}/org/apache/xerces/dom/org.apache.xerces.dom.DOMImplementationSourceImpl"
      tofile="${build.dest}/META-INF/services/org.w3c.dom.DOMImplementationSourceList"/>
  	
    <!-- delete META-INF/services files for DatatypeFactory/SchemaFactory 
         since no implementation is provided in this jar -->
    <delete file="${build.dest}/META-INF/services/javax.xml.datatype.DatatypeFactory"/>
    <delete file="${build.dest}/META-INF/services/javax.xml.validation.SchemaFactory"/>

    <!-- copy src files -->
    <copy todir="${build.src}">
        <fileset 
            dir="${src.dir}"
            includes="javax/**, org/**" 
            excludes="**/classfiles_updated **/CVS* **/.#* **/XMLMessages.java
                       **/DatatypeContentModel.java **/ComplexTypeInfo.java
                       **/v1/** **/v2/**
                        javax.xml.parsers.ConvertToURI.java
                        org/apache/xerces/impl/xs/*.java
                        org/apache/xerces/impl/dv/xs/**
                        org/apache/xerces/impl/xs/identity/**
                        org/apache/xerces/impl/xs/traversers/**
                        org/apache/xerces/impl/xs/models/**
                        org/apache/xerces/impl/xs/opti/**
                        org/apache/xerces/impl/xs/util/NSItemListImpl.java                      
                        org/apache/xerces/impl/xs/util/XInt.java
                        org/apache/xerces/impl/xs/util/XIntPool.java
                        org/apache/xerces/impl/xs/util/XSNamedMap4Types.java
                        org/apache/xerces/impl/xs/util/XSNamedMapImpl.java
                        org/apache/xerces/impl/xs/util/XSGrammarPool.java
                        org/apache/xerces/impl/xs/dom/**
                        org/apache/xerces/impl/xpath/**
                        org/apache/xerces/impl/xpath/regex/**
                        org/apache/xerces/impl/dv/Schema*.java
                        org/apache/xerces/impl/msg/XMLSchema**
                        org/apache/xerces/jaxp/JAXPValidatorComponent.java
                        org/apache/xerces/jaxp/SchemaValidatorConfiguration.java
                        org/apache/xerces/jaxp/TeeXMLDocumentFilterImpl.java
                        org/apache/xerces/jaxp/UnparsedEntityHandler.java
                        org/apache/xerces/jaxp/datatype/**
                        org/apache/xerces/jaxp/validation/**
                        org/apache/xerces/parsers/DOMASBuilderImpl.java
                        org/apache/xerces/parsers/StandardParserConfiguration.java
                        org/apache/xerces/parsers/IntegratedParserConfiguration.java
                        org/apache/xerces/parsers/XIncludeParserConfiguration.java
                        org/apache/xerces/parsers/XIncludeAwareParserConfiguration.java
                        org/apache/xerces/parsers/SecurityConfiguration.java
                        org/apache/xerces/parsers/SoftReferenceSymbolTableConfiguration.java
                        org/apache/xerces/parsers/XML11Configurable.java
                        org/apache/xerces/parsers/XML11Configuration.java
                        org/apache/xerces/parsers/XML11DTDConfiguration.java
                        org/apache/xerces/parsers/XML11NonValidatingConfiguration.java
                        org/apache/xerces/parsers/XMLGrammarCachingConfiguration.java
                        org/apache/xerces/parsers/XPointerParserConfiguration.java
                        org/apache/xerces/parsers/CachingParserPool.java
                        org/apache/xerces/xinclude/**
                        org/apache/xerces/xpointer/**
                        org/apache/xerces/dom/ASModelImpl.java
                        org/apache/xerces/dom/ASDOMImplementationImpl.java
                        org/apache/xerces/dom/DOMXSImplementationSourceImpl.java
                        org/apache/xerces/dom3/as/**
                        org/apache/xerces/impl/XML11D*.java
                        org/apache/xerces/impl/XML11NamespaceBinder.java
                        org/apache/xerces/impl/XML11NSDocumentScannerImpl.java
                        org/apache/xerces/impl/XMLVersionDetector.java
                        org/apache/xerces/impl/dtd/XML11*.java
                        org/apache/xerces/impl/msg/DatatypeMessage*.properties
                        org/apache/xerces/impl/msg/JAXPValidationMessage*.properties
                        org/apache/xerces/impl/msg/XIncludeMessage*.properties
                        org/apache/xerces/impl/msg/XPointerMessage*.properties
                        org/apache/xerces/util/DatatypeMessageFormatter.java
                        org/apache/html/**
                        org/apache/wml/**
           ">
        </fileset>
    </copy>
    
    <!-- copy src files -->
    <copy todir="${build.src}">
        <fileset 
            dir="${src.dir}"
            includes="org/apache/xerces/xs/*.java,
                      org/apache/xerces/impl/xs/XSTypeDecl.java
                     ">
        </fileset>
    </copy>

    <!-- HACK: DOM implementation now is aware of type information
         and thus is imports XSSimpleTypeDecl (among other XSModel interfaces 
         for XML Schema type support) Since in DTD jars we never going to have 
         XSSimpleTypeDecl we can safely replace it by String. The code after 
         replacement may look a bit strange.. but there is nothing we can do at 
         this point -->
    <replace file="${build.dir}/src/org/apache/xerces/dom/AttrNSImpl.java" 
             token="import org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/AttrNSImpl.java" 
             token="return ((XSSimpleTypeDecl) type).isDOMDerivedFrom(" value="return false;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/AttrNSImpl.java" 
             token="typeNamespaceArg, typeNameArg, derivationMethod);" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/AttrNSImpl.java" 
             token="XSSimpleTypeDecl" value="String"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/AttrNSImpl.java"
             token="import org.apache.xerces.xs.XSSimpleTypeDefinition;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/AttrNSImpl.java"
             token="XSSimpleTypeDefinition" value="String"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/AttrNSImpl.java" 
             token="return ((String)type).getName();" value="return (String)type;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/AttrNSImpl.java" 
             token="return ((String)type).getNamespace();" value="return null;"/>

    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="import org.apache.xerces.xs.XSSimpleTypeDefinition;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="import org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="import org.apache.xerces.impl.xs.XSComplexTypeDecl;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="transient XSTypeDefinition type;" value="transient Object type;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="XSSimpleTypeDefinition" value="String"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="return ((XSSimpleTypeDecl) type).getTypeName();" value="return null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="return ((XSComplexTypeDecl) type).getTypeName();" value="return null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="return type.getNamespace();" value="return null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="return type.getNamespace();" value="return null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="return ((XSSimpleTypeDecl) type).isDOMDerivedFrom(" value="return false;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="return ((XSComplexTypeDecl) type).isDOMDerivedFrom(" value="return false;"/>
    <replace file="${build.dir}/src/org/apache/xerces/dom/ElementNSImpl.java" 
             token="typeNamespaceArg, typeNameArg, derivationMethod);" value=""/>
  	
    <!-- HACK: Remove references to schema DOM from DOMUtil -->
    <replace file="${build.dir}/src/org/apache/xerces/util/DOMUtil.java" 
             token="import org.apache.xerces.impl.xs.opti.ElementImpl;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/util/DOMUtil.java" 
             token="(node instanceof ElementImpl)" value="(node == null)"/>
    <replace file="${build.dir}/src/org/apache/xerces/util/DOMUtil.java" 
             token="return ((ElementImpl)node).getAnnotation();" value="return null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/util/DOMUtil.java" 
             token="return ((ElementImpl)node).getSyntheticAnnotation();" value="return null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/util/DOMUtil.java" 
             token="(node instanceof org.apache.xerces.impl.xs.opti.NodeImpl)" value="(node == null)"/>
    <replace file="${build.dir}/src/org/apache/xerces/util/DOMUtil.java" 
             token="((org.apache.xerces.impl.xs.opti.NodeImpl)node).setReadOnly(true, false);" value="return;"/>
    <replace file="${build.dir}/src/org/apache/xerces/util/DOMUtil.java" 
             token="((org.apache.xerces.impl.xs.opti.NodeImpl)node).setReadOnly(false, false);" value="return;"/>
    <replace file="${build.dir}/src/org/apache/xerces/util/DOMUtil.java" 
             token="return ((org.apache.xerces.impl.xs.opti.NodeImpl)node).getReadOnly();" value="return false;"/>
  	
    <!-- HACK: Remove references to schema validation support from org.apache.xerces.jaxp -->
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="import org.apache.xerces.impl.xs.XMLSchemaValidator;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="import org.apache.xerces.jaxp.validation.XSGrammarPoolContainer;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="UnparsedEntityHandler fUnparsedEntityHandler" value="org.apache.xerces.xni.parser.XMLDTDFilter fUnparsedEntityHandler"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="this.grammar = spf.getSchema();" value="this.grammar = null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="(grammar != null)" value="(false)"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="(grammar instanceof XSGrammarPoolContainer)" value="(grammar != null)"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="new XMLSchemaValidator();" value="null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="new UnparsedEntityHandler(fSchemaValidationManager);" value="null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="new JAXPValidatorComponent(grammar.newValidatorHandler());" value="null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="new SchemaValidatorConfiguration(config," value="null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="(XSGrammarPoolContainer) grammar, fSchemaValidationManager);" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserImpl.java" 
             token="fSAXParser.fUnparsedEntityHandler.reset();" value=""/>
  	
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="import org.apache.xerces.impl.xs.XMLSchemaValidator;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="import org.apache.xerces.jaxp.validation.XSGrammarPoolContainer;" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="UnparsedEntityHandler fUnparsedEntityHandler" value="org.apache.xerces.xni.parser.XMLDTDFilter fUnparsedEntityHandler"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="this.grammar = dbf.getSchema();" value="this.grammar = null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="(grammar != null)" value="(false)"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="(grammar instanceof XSGrammarPoolContainer)" value="(grammar != null)"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="new XMLSchemaValidator();" value="null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="new UnparsedEntityHandler(fSchemaValidationManager);" value="null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="new JAXPValidatorComponent(grammar.newValidatorHandler());" value="null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="new SchemaValidatorConfiguration(config," value="null;"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="(XSGrammarPoolContainer) grammar, fSchemaValidationManager);" value=""/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderImpl.java" 
             token="fUnparsedEntityHandler.reset();" value=""/>
  	
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserFactoryImpl.java" 
             token="return grammar;" value="throw new UnsupportedOperationException();"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/SAXParserFactoryImpl.java" 
             token="this.grammar = grammar;" value="throw new UnsupportedOperationException();"/>

    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderFactoryImpl.java" 
             token="return grammar;" value="throw new UnsupportedOperationException();"/>
    <replace file="${build.dir}/src/org/apache/xerces/jaxp/DocumentBuilderFactoryImpl.java" 
             token="this.grammar = grammar;" value="throw new UnsupportedOperationException();"/>
             
    <!-- HACK: Remove reference to XML11Configurable from SAX parser -->
    <replace file="${build.dir}/src/org/apache/xerces/parsers/AbstractSAXParser.java"
             token="return (fConfiguration instanceof XML11Configurable);" value="return false;"/>
 
    <!-- now deal with API's:  -->
    <unzip src="${src.apis.zip}" dest="${build.src}">
        <patternset
            includes="org/xml/sax/** 
                javax/xml/**
                javax/xml/datatype/**
                javax/xml/namespace/**
                javax/xml/parsers/**
                javax/xml/transform/**
                javax/xml/validation/**
                javax/xml/xpath/**
                org/w3c/dom/*
                org/w3c/dom/bootstrap/**
                org/w3c/dom/events/**
                org/w3c/dom/html/**
                org/w3c/dom/ls/**
                org/w3c/dom/ranges/**
                org/w3c/dom/traversal/**
                org/w3c/dom/xpath/**"
        />
    </unzip>


    <!-- substitute tokens as needed -->
    <replace file="${build.dir}/src/org/apache/xerces/impl/Version.java" 
             token="@@VERSION@@" value="${parser.Name} ${parser.Version}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Builds xercesImpl (dtd), xml-apis, and sample jars                  -->
  <!-- =================================================================== -->
  <target name="dtdjars" depends="dtdjar, sampjar">
    <!-- include the xml-commons APIs -->
    <copy file="${tools.dir}/${jar.apis}" tofile="${build.dir}/${jar.apis}"/>
    <!-- include the xml-commons resolver -->
    <copy file="${tools.dir}/${jar.resolver}" tofile="${build.dir}/${jar.resolver}"/>
    <!-- include the Xalan Serializer -->
    <copy file="${tools.dir}/${jar.serializer}" tofile="${build.dir}/${jar.serializer}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Build xercesDV jar                                                  -->
  <!-- =================================================================== -->
  <target name="dvjar" depends="dvcompile">
    <jar jarfile="${build.dir}/${jar.dv}"
         basedir="${build.dest}"
         compress="true"
         includes="org/apache/xerces/**">
      <metainf dir="." includes="LICENSE,NOTICE"/>
    </jar>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the dv source directory                                    -->
  <!-- =================================================================== -->
  <target name="dvcompile" depends="dvprepare-src">
    <copy todir="${build.dest}">
      <fileset dir="${build.src}"
        includes="**/*.properties">
      </fileset>
    </copy>

    <xjavac srcdir="${build.src}"
           destdir="${build.dest}"
    	   classpath="${build.dir}/classes:${tools.dir}/${jar.apis}"
           debug="${debug}"
           deprecation="${deprecation}"
           optimize="${optimize}"
           includeAntRuntime="false"
           includeJavaRuntime="true"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the dv source code package                                 -->
  <!-- =================================================================== -->
  <target name="dvprepare-src" depends="prepare">

    <!-- copy src files -->
    <copy todir="${build.src}">
        <fileset 
            dir="${src.dir}"
            includes="org/apache/xerces/impl/Constants.java
        	          org/apache/xerces/impl/dv/**
                      org/apache/xerces/impl/msg/XMLSchema**
                      org/apache/xerces/impl/xpath/regex/**
		      org/apache/xerces/impl/xs/util/ShortListImpl.java,
        	          org/apache/xerces/impl/xs/SchemaSymbols.java
                      org/apache/xerces/impl/xs/XSTypeDecl.java
        	org/apache/xerces/jaxp/datatype/*.java
			org/apache/xerces/xs/XSException.java
			org/apache/xerces/xs/StringList.java
			org/apache/xerces/xs/ShortList.java
			org/apache/xerces/xs/XSAnnotation.java
			org/apache/xerces/xs/XSAttributeDeclaration.java
			org/apache/xerces/xs/XSAttributeGroupDefinition.java
			org/apache/xerces/xs/XSAttributeUse.java
			org/apache/xerces/xs/XSComplexTypeDefinition.java
			org/apache/xerces/xs/XSConstants.java
			org/apache/xerces/xs/XSElementDeclaration.java
			org/apache/xerces/xs/XSIDCDefinition.java
			org/apache/xerces/xs/XSModel.java
			org/apache/xerces/xs/XSModelGroup.java
			org/apache/xerces/xs/XSModelGroupDefinition.java
			org/apache/xerces/xs/XSNamedMap.java
			org/apache/xerces/xs/XSNamespaceItem.java
			org/apache/xerces/xs/XSNamespaceItemList.java
			org/apache/xerces/xs/XSNotationDeclaration.java
			org/apache/xerces/xs/XSObject.java
			org/apache/xerces/xs/XSObjectList.java
			org/apache/xerces/xs/XSParticle.java
			org/apache/xerces/xs/XSSimpleTypeDefinition.java
			org/apache/xerces/xs/XSTerm.java
			org/apache/xerces/xs/XSTypeDefinition.java
			org/apache/xerces/xs/XSWildcard.java
			org/apache/xerces/xs/XSFacet.java
                      org/apache/xerces/xs/XSMultiValueFacet.java
                      org/apache/xerces/xs/datatypes/*.java
                      org/apache/xerces/impl/xs/util/StringListImpl.java
                      org/apache/xerces/impl/xs/util/XSObjectListImpl.java
                      org/apache/xerces/util/DatatypeMessageFormatter.java
                      org/apache/xerces/util/ObjectFactory.java
                      org/apache/xerces/util/SecuritySupport.java
                      org/apache/xerces/util/SecuritySupport12.java
                      org/apache/xerces/util/SymbolHash.java
                      org/apache/xerces/util/URI.java
                      org/apache/xerces/util/XMLChar.java
                      org/apache/xerces/xni/NamespaceContext.java
                      org/apache/xerces/xni/QName.java
                     "
            excludes="org/apache/xerces/impl/dv/DatatypeValidator.java
                      org/apache/xerces/impl/dv/DTDDVFactory.java
                      org/apache/xerces/impl/dv/dtd/**
                      org/apache/xerces/impl/dv/xs/SchemaDVFactoryImpl.java
                     ">
        </fileset>
    </copy>
    
    <!-- substitute tokens as needed -->
    <replace file="${build.src}/org/apache/xerces/impl/dv/SchemaDVFactory.java" 
             token="SchemaDVFactoryImpl" value="FullDVFactory"/>
  </target>


  <!-- =================================================================== -->
  <!--  Retrieve the XML Conformance test suite from sourceforge           -->
  <!-- =================================================================== -->
  <target name="get-conftests" depends="init">
    <mkdir dir="tests/conformance"/>
    <get src="http://prdownloads.sourceforge.net/xmlconf/utilities.jar" dest="tests/conformance/utilties.jar" verbose="true" usetimestamp="true"/>
    <cvspass cvsroot=":pserver:anonymous@cvs.xmlconf.sourceforge.net:/cvsroot/xmlconf" password=""/>
    <cvs cvsRoot=":pserver:anonymous@cvs.xmlconf.sourceforge.net:/cvsroot/xmlconf" package="xml" dest="tests/conformance"/>
  </target>

  <!-- =================================================================== -->
  <!-- Run the XML Conformance test suite from sourceforge                 -->
  <!-- =================================================================== -->
  <target name="run-conftests" depends="init">
    <java classname="xml.testing.Driver" output="tests/conformance/report-nv.html">
      <arg value="tests/conformance/xml/suite/xmlconf.xml"/>
      <arg value="org.apache.xerces.parsers.SAXParser"/>
      <arg value="tests/conformance/xml/template.xml"/>
      <arg value="nv"/>
      <arg value="${parser.version}"/>
      <classpath>
        <pathelement location="tests/conformance/utilities.jar"/>
        <pathelement location="${build.dir}/${jar.apis}"/>
        <pathelement location="${build.dir}/${jar.parser}"/>
      </classpath>
    </java>

    <java classname="xml.testing.Driver" output="tests/conformance/report-val.html">
      <arg value="tests/conformance/xml/suite/xmlconf.xml"/>
      <arg value="org.apache.xerces.parsers.SAXParser"/>
      <arg value="tests/conformance/xml/template.xml"/>
      <arg value="val"/>
      <arg value="${parser.version}"/>
      <classpath>
        <pathelement location="tests/conformance/utilities.jar"/>
        <pathelement location="${build.dir}/${jar.apis}"/>
        <pathelement location="${build.dir}/${jar.parser}"/>
      </classpath>
    </java>

  </target>

  <!-- =================================================================== -->
  <!-- Prepares the source code with Schema 1.1 support                    -->
  <!-- =================================================================== -->
  <target name="prepare-src-schema11" depends="prepare-src">
  	<replace file="${build.src}/org/apache/xerces/impl/Constants.java"
  		token="SCHEMA_1_1_SUPPORT = false" value="SCHEMA_1_1_SUPPORT = true"/>
  	<replace file="${build.src}/org/apache/xerces/xs/XSConstants.java"
  	    token="public static final short UNAVAILABLE_DT            = 45;"
  	    value="public static final short UNAVAILABLE_DT            = 45;&#xA;
      &#xA;    public static final short YEARMONTHDURATION_DT      = 46;&#xA;
      &#xA;    public static final short DAYTIMEDURATION_DT        = 47;&#xA;
      &#xA;    public static final short PRECISIONDECIMAL_DT       = 48;&#xA;
      &#xA;    public static final short ANYATOMICTYPE_DT          = 49;"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the source directory with Schema 1.1 support               -->
  <!-- =================================================================== -->
  <target name="compile-schema11" depends="prepare-src-schema11">
        <copy todir="${build.dest}">
          <fileset dir="${build.src}"
            includes="**/*.res, **/*.properties">
          </fileset>
        </copy>

        <xjavac srcdir="${build.src}"
               destdir="${build.dest}"
               classpath="${build.dir}/classes:${tools.dir}/${jar.apis}:${tools.dir}/${jar.resolver}:${tools.dir}/${jar.serializer}"
               debug="${debug}"
               deprecation="${deprecation}"
               optimize="${optimize}"
               includeAntRuntime="false"
               includeJavaRuntime="false"
               excludes="org/xml/sax/** 
                    javax/xml/**
                    org/w3c/dom/*
                    org/w3c/dom/events/**
                    org/w3c/dom/html/**
                    org/w3c/dom/ranges/**
                    org/w3c/dom/traversal/**
                    org/w3c/dom/xpath/**"
               />
  	</target>
  
  <!-- =================================================================== -->
  <!-- Creates the implementation class package with Schema 1.1 support    -->
  <!-- =================================================================== -->
  <target name="jar-schema11" depends="compile-schema11">
    <!-- take care of manifest file -->
    <filter token="java.version" value="${java.version}"/>
    <filter token="java.vendor" value="${java.vendor}"/>
    <filter token="impl.name" value="${parser.Name} ${parser.Version}"/>
    <filter token="impl.version" value="${parser.Version}"/>   
    <copy todir="${build.dir}" file="${src.dir}/manifest.xerces" filtering="true"/>
    <jar jarfile="${build.dir}/schema11-${jar.parser}"
         basedir="${build.dest}"
         compress="true"
         includes="org/apache/**, META-INF/**
                    org/w3c/dom/html/HTMLDOMImplementation.class
                   org/w3c/dom/ls/**
                   org/w3c/dom/DOMError.class
                   org/w3c/dom/DOMErrorHandler.class
                   org/w3c/dom/DOMImplementationSource.class
                   org/w3c/dom/DOMImplementationRegistry.class
                   org/w3c/dom/DOMLocator.class
                   org/w3c/dom/UserDataHandler.class"
         manifest="${build.dir}/manifest.xerces">
      <manifest>
        <attribute name="Ant-Version" value="${ant.version}"/>
      </manifest>
      <metainf dir="." includes="LICENSE,NOTICE"/>
    </jar>
  </target>	

  <!-- =================================================================== -->
  <!-- Builds xercesImpl, xml-apis and sample jars with Schema 1.1 support -->
  <!-- =================================================================== -->
  <target name="jars-schema11" depends="jar-schema11, sampjar">
    <!-- include the xml-commons APIs -->
    <copy file="${tools.dir}/${jar.apis}" tofile="${build.dir}/${jar.apis}"/>
    <!-- include the xml-commons resolver -->
    <copy file="${tools.dir}/${jar.resolver}" tofile="${build.dir}/${jar.resolver}"/>
    <!-- include the Xalan Serializer -->
    <copy file="${tools.dir}/${jar.serializer}" tofile="${build.dir}/${jar.serializer}"/>
  </target>
</project>
