<!-- $Id: build.xml,v 1.31 2002/03/29 01:25:52 jhunter Exp $ -->

<!-- 
For instructions on how to build JDOM, please view the README.txt file.
-->

<project default="package" basedir=".">

  <!-- =================================================================== -->
  <!-- Initialization target                                               -->
  <!-- =================================================================== -->
  <target name="init">
    <tstamp/>
    <property name="Name" value="JDOM"/>
    <property name="name" value="jdom"/>
    <property name="version" value="1.0beta8-dev"/>
    <property name="version.impl" value="1.0 beta8-dev"/>
    <property name="version.spec" value="0.7"/>
    <property name="year" value="2002"/>

    <echo message="----------- ${Name} ${version} [${year}] ------------"/>

    <property name="build.compiler" value="classic"/>
    <property name="debug" value="on"/>
    <property name="optimize" value="on"/>
    <property name="deprecation" value="on"/>

    <property name="src.dir" value="./src/java"/>
    <property name="samples.dir" value="./samples"/>
    <property name="lib.dir" value="./lib"/>
    <property name="packages" value="org.jdom.*"/>

    <property name="build.dir" value="./build"/>
    <property name="build.src" value="./build/src"/>
    <property name="build.dest" value="./build/classes"/>
    <property name="build.javadocs" value="./build/apidocs"/>

    <property name="dist.root" value="./dist"/>
    <property name="dist.dir" value="${dist.root}/${name}-${version}"/>

    <property name="package.dir" value="./package"/>

    <filter token="year" value="${year}"/>
    <filter token="version" value="${version}"/>
    <filter token="date" value="${TODAY}"/>
    <filter token="log" value="true"/>
    <filter token="verbose" value="true"/>

    <!-- JDK1.1 collections -->
    <property name="coll.import" value="com.sun.java.util.collections"/>
    <available classname="${coll.import}.Collection" property="coll.present"/>

  </target>

  <!-- =================================================================== -->
  <!-- Help on usage                                                       -->
  <!-- =================================================================== -->
  <target name="usage">
    <echo message=""/>
    <echo message=""/>
    <echo message="JDOM Build file"/>
    <echo message="-------------------------------------------------------------"/>
    <echo message=""/>
    <echo message=" available targets are:"/>
    <echo message=""/>
    <echo message="   package  --> generates the jdom.jar file (default)"/>
    <echo message="   compile  --> compiles the source code"/>
    <echo message="   javadoc  --> generates the API documentation"/>
    <echo message="   clean    --> cleans up the directory"/>
    <echo message=""/>
    <echo message=" See the 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>

  <!-- =================================================================== -->
  <!-- Prepares the source code                                            -->
  <!-- =================================================================== -->
  <target name="prepare-src" depends="prepare">
    <!-- create directories -->
    <mkdir dir="${build.src}"/>
    <mkdir dir="${build.dest}"/>

    <!-- copy src files -->
    <copy todir="${build.src}"
          filtering="yes">
      <fileset dir="${src.dir}"/>
    </copy>
  </target>

  <!-- =================================================================== -->
  <!-- Does replacement on files for dealing with collections.             -->
  <!-- XXX The efficiency could be improved here; all replacements should  -->
  <!-- XXX happen during one read/write phase and only for files that have -->
  <!-- XXX changed.                                                        -->
  <!-- =================================================================== -->
  <target name="collections" if="coll.present" depends="prepare-src">
    <replace dir="${build.src}" includes="**"
             token="java.util.Collection" value="${coll.import}.Collection"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.Map" value="${coll.import}.Map"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.HashMap" value="${coll.import}.HashMap"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.List" value="${coll.import}.List"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.LinkedList" value="${coll.import}.LinkedList"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.AbstractList" value="${coll.import}.AbstractList"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.Set" value="${coll.import}.Set"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.HashSet" value="${coll.import}.HashSet"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.Iterator" value="${coll.import}.Iterator"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.ConcurrentModificationException" value="${coll.import}.ConcurrentModificationException"/>
    <replace dir="${build.src}" includes="**"
             token="java.util.ArrayList" value="${coll.import}.ArrayList"/>
    <!-- The following replace handles the "import java.util.*" case by    -->
    <!-- adding an "import com.sun.java.util.collections.*" after it.      -->
    <!-- BTW, \u000a is the Unicode escape for a new line. (jhunter)       -->
    <replace dir="${build.src}" includes="**"
             token="java.util.*"
             value="java.util.*;\u000aimport ${coll.import}.*"/>
    <replace dir="${build.src}" includes="**"
             token="@throws" value="@exception"/>
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the example code                                           -->
  <!-- =================================================================== -->
  <target name="prepare-samples" depends="prepare">
    <!-- create directories -->
    <mkdir dir="${build.dest}/samples"/>

    <!-- copy src files -->
    <copy todir="${build.dest}/samples"
          filtering="yes">
          <fileset dir="${samples.dir}"/>
    </copy>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the source directory                                       -->
  <!-- =================================================================== -->
  <target name="compile" depends="prepare-src,collections">
    <javac srcdir="${build.src}"
           destdir="${build.dest}"
           debug="${debug}"
           optimize="${optimize}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the "About" code unless JDK1.1 is being used               -->
  <!-- =================================================================== -->
  <target name="about" unless="coll.present">
    <javac srcdir="${package.dir}"
           destdir="${build.dest}"
           debug="${debug}"
           optimize="${optimize}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the samples directory                                      -->
  <!-- =================================================================== -->
  <target name="samples" depends="prepare-samples,collections">
    <javac srcdir="${build.dest}/samples"
           destdir="${build.dest}"
           debug="${debug}"
           optimize="${optimize}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the class package                                           -->
  <!-- =================================================================== -->
  <target name="package" depends="compile,about">
    <fixcrlf srcdir="." includes="**/*.bat" excludes="build*.*" eol="crlf"/>
    <fixcrlf srcdir="." includes="**/*.sh" excludes="build*.*" eol="lf"/>

    <!-- Filters defined specifically for updating the manifest -->
    <filter token="version.spec" value="${version.spec}"/>
    <filter token="version.impl" value="${version.impl}"/>
    <copy todir="${build.dest}/META-INF"
          filtering="yes">
          <fileset dir="${package.dir}/META-INF"/>
    </copy>
    <jar jarfile="${build.dir}/${name}.jar"
         basedir="${build.dest}"
         excludes="META-INF/MANIFEST.MF"
         manifest="${build.dest}/META-INF/MANIFEST.MF"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the API documentation                                       -->
  <!-- =================================================================== -->
  <target name="javadoc" depends="prepare-src,collections">
    <mkdir dir="${build.javadocs}"/>
    <javadoc packagenames="${packages}"
             sourcepath="${build.src}"
             destdir="${build.javadocs}"
             author="true"
             version="true"
             use="true"
             splitindex="true"
             noindex="false"
             windowtitle="${Name} API"
             doctitle="${Name}"
             bottom="Copyright &#169; ${year} Jason Hunter, Brett McLaughlin. All Rights Reserved."
    />
  </target>

  <!-- =================================================================== -->
  <!-- Creates the API documentation, with links to JDK 1.4 classes        -->
  <!-- We can use linkoffline with a newer Ant and avoid this target       -->
  <!-- =================================================================== -->
  <target name="javadoc-link" depends="prepare-src,collections">
    <mkdir dir="${build.javadocs}"/>
    <javadoc packagenames="${packages}"
             sourcepath="${build.src}"
             destdir="${build.javadocs}"
             author="true"
             version="true"
             use="true"
             splitindex="true"
             noindex="false"
             windowtitle="${Name} API"
             doctitle="${Name}"
             link="http://java.sun.com/j2se/1.4/docs/api"
             bottom="Copyright &#169; ${year} Jason Hunter, Brett McLaughlin. All Rights Reserved."
    />
  </target>

  <!-- =================================================================== -->
  <!-- Clean targets                                                       -->
  <!-- =================================================================== -->
  <target name="clean" depends="init">
    <delete dir="${build.dir}"/>
  </target>

  <target name="distclean" depends="clean">
    <delete dir="${dist.root}"/>
    <delete file="${Name}-${version}.tar.gz"/>
    <delete file="${Name}-${version}.tar"/>
    <delete file="${Name}-${version}.zip"/>
  </target>

</project>

<!-- End of file -->

