<!-- $Id: build.xml,v 1.33.2.2 2004/05/22 22:58:22 scolebourne Exp $ -->
<project name="commons-collections" default="test" basedir=".">

   <!-- patternset describing files to be copied from the doc directory -->
   <patternset id="patternset-doc"/>

   <!-- patternset describing test classes -->
   <patternset id="patternset-test-classes">
      <include name="**/Test*.class"/>
   </patternset>

   <!-- patternset describing non test classes -->
   <patternset id="patternset-non-test-classes">
      <include name="**/*.class"/>
      <exclude name="**/Test*.class"/>
   </patternset>

   <!-- patternset describing non test source files (*.java, *html, etc.) -->
   <patternset id="patternset-javadocable-sources">
      <include name="**/*"/>
      <exclude name="**/Test*.java"/>
   </patternset>

   <!-- ######################################################### -->

   <target name="init">
      <tstamp/>

      <!-- read properties from the build.properties, if any -->
      <property name="component-propfile" value="${basedir}/build.properties"/>
      <property file="${component-propfile}"/>

      <!-- read properties from the commons build.properties, if any -->
      <property name="commons-propfile" value="${basedir}/../build.properties"/>
      <property file="${commons-propfile}"/>

      <!-- read properties from the ${user.home}/propfile, if any -->
      <property name="user-propfile" value="${user.home}/build.properties"/>
      <property file="${user-propfile}"/>

      <!-- command line classpath, if any -->
      <property name="cp" value=""/>

      <!-- now combine the classpaths -->
      <property name="classpath" value="${cp}:${junit.jar}"/>

      <property name="name" value="commons-collections"/>
      <property name="Name" value="Commons-Collections"/>
      <property name="Name-Long" value="Jakarta Commons Collections Package"/>

      <!-- The current version number of this component -->
      <property name="component.version"       value="2.1.1"/>
      <property name="doc.release.notes" value="RELEASE-NOTES-${component.version}.html"/>
      <property name="doc.status" value="STATUS.html"/>

      <property name="test.entry" value="org.apache.commons.collections.TestAll"/>
      <property name="test.failonerror" value="true" />
      <property name="test.runner" value="junit.textui.TestRunner" />

      <property name="workdir" value="${java.io.tmpdir}/buildtemp_${DSTAMP}${TSTAMP}"/>
      <property name="source" value="${basedir}"/>
      <property name="source.src" value="${basedir}/src"/>
      <property name="source.src.java" value="${source.src}/java"/>
      <property name="source.src.test" value="${source.src}/test"/>
      <property name="source.doc" value="${basedir}/doc"/>
      <property name="dest" value="${basedir}/dist"/>
      <property name="dest.classes" value="${dest}/classes"/>
      <property name="dest.doc" value="${dest}/docs"/>
      <property name="dest.doc.api" value="${dest.doc}/api"/>
      <property name="dest.jardir" value="${dest}"/>
      <property name="jar.name" value="${name}-${component.version}.jar"/>
      <property name="dest.jardir.jar" value="${dest.jardir}/${jar.name}"/>
      
      <property name="bin.name" value="${name}-${component.version}"/>
      <property name="dest.bin.tar" value="${dest}/${bin.name}.tar"/>
      <property name="dest.bin.tar.gz" value="${dest}/${bin.name}.tar.gz"/>
      <property name="dest.bin.zip" value="${dest}/${bin.name}.zip"/>
      
      <property name="src.name" value="${bin.name}-src"/>
      <property name="dest.src.tar"    value="${dest}/${src.name}.tar"/>
      <property name="dest.src.tar.gz"    value="${dest}/${src.name}.tar.gz"/>
      <property name="dest.src.zip" value="${dest}/${src.name}.zip"/>
      
      <patternset id="patternset-exclude-distros">
        <exclude name="**/${bin.name}.tar.gz*"/>
        <exclude name="**/${bin.name}.zip*"/>
        <exclude name="**/${src.name}.tar.gz*"/>
        <exclude name="**/${src.name}.zip*"/>
      </patternset>
      
      <!-- set the cvs.root property in the build.properties file -->
      <property name="cvs.tag" value="COLLECTIONS_2_1_1"/>      
      
      <available property="available-doc" file="${source.doc}"/> <!-- does this module have docs? -->
      <available property="available-src-java" file="${source.src.java}"/> <!-- does this module have java src? -->
      <available property="available-src-test" file="${source.src.test}"/> <!-- does this module have test src? -->

   </target>

   <!-- ######################################################### -->

   <target name="copy-javadoc-source" depends="init" if="available-src-java">
      <mkdir dir="${javadoc-source-dir}"/>
      <copy todir="${javadoc-source-dir}" filtering="no">
         <fileset dir="${source.src.java}">
            <patternset refid="patternset-javadocable-sources"/>
         </fileset>
      </copy>
   </target>

   <target name="copy-doc" depends="init" if="available-doc">
      <mkdir dir="${doc-source-dir}/${name}"/>
      <copy todir="${doc-source-dir}/${name}" filtering="no">
         <fileset dir="${source.doc}">
            <patternset refid="patternset-doc"/>
         </fileset>
      </copy>
   </target>

   <!-- ######################################################### -->

   <target name="clean" depends="init" description="removes generated files">
      <delete dir="${dest}"/>
   </target>

   <target name="clean-doc" depends="init,clean-javadoc">
      <delete dir="${dest.doc}"/>
   </target>

   <target name="clean-javadoc" depends="init">
      <delete dir="${dest.doc.api}"/>
   </target>

   <target name="clean-build" depends="init">
      <delete dir="${dest.classes}"/>
   </target>

   <target name="clean-dist" depends="init">
      <delete file="${dest.jardir.jar}"/>
   </target>

   <!-- ######################################################### -->

   <target name="doc" depends="init,doc-top,doc-copy,doc-javadoc" description="generates javadocs and other documentation">
   </target>

   <target name="doc-top" depends="init">
      <mkdir  dir="${dest}"/>
      <copy todir="${dest}" file="./LICENSE.txt"/>
      <copy todir="${dest}" file="./NOTICE.txt"/>
      <copy todir="${dest}" file="./README.txt"/>
      <copy todir="${dest}" file="${doc.status}"/>
      <copy todir="${dest}" file="${doc.release.notes}"/>
   </target>

   <target name="doc-copy" depends="init" if="available-doc">
      <mkdir dir="${dest.doc}"/>
      <copy todir="${dest.doc}">
      <fileset dir="${source.doc}">
         <patternset refid="patternset-doc"/>
      </fileset>
      </copy>
   </target>

   <target name="doc-javadoc" depends="init" if="available-src-java">
      <!-- copy all the non-test sources out to the work directory and javadoc that -->
      <mkdir dir="${workdir}"/>
      <copy todir="${workdir}">
        <fileset dir="${source.src.java}">
          <patternset refid="patternset-javadocable-sources"/>
        </fileset>
      </copy>
      <mkdir dir="${dest.doc.api}"/>
      <javadoc packagenames="org.*"
               sourcepath="${workdir}"
               destdir="${dest.doc.api}"
               windowtitle="${Name-Long}"
               doctitle="${Name-Long}"
               bottom="&lt;small&gt;Copyright &amp;copy; 2001-2004 Apache Software Foundation. Documenation generated ${TODAY}&lt;/small&gt;."
               protected="true"
               version="true"
               author="true"
               overview="${source.src.java}/org/apache/commons/collections/package.html"
               splitindex="false"
               nodeprecated="true"
               nodeprecatedlist="true"
               notree="true"
               noindex="false"
               nohelp="true"
               nonavbar="false"
               serialwarn="false">
          <group title="Jakarta-commons Collections" packages="org.apache.commons.collections"/>
          <link href="http://java.sun.com/products/j2se/1.4/docs/api"/>
      </javadoc>
      <delete dir="${workdir}"/>
   </target>

   <!-- ######################################################### -->

   <target name="build" depends="init,build-java" description="compiles source files"/>

   <target name="build-java" depends="init" if="available-src-java">
      <mkdir dir="${dest.classes}"/>
      <javac destdir="${dest.classes}"
             srcdir="${source.src.java}"
             classpath="${classpath}"
             debug="false"
             deprecation="true"
             optimize="true"/>
   </target>

   <target name="build-test" depends="init,build-java" if="available-src-test">
      <mkdir dir="${dest.classes}"/>
      <javac destdir="${dest.classes}"
             srcdir="${source.src.test}"
             classpath="${classpath}"
             debug="false"
             deprecation="true"
             optimize="true"/>
   </target>

   <!-- ######################################################### -->

   <target name="test" depends="build-test" if="test.entry" description="runs (junit) unit tests">
      <!--
      <junit printsummary="yes" fork="on" haltonfailure="yes">
      	<formatter type="plain" usefile="false"/>
      	<test name="${test.entry}"/>
      	<classpath>
      		<pathelement location="${dest.classes}" />
      		<pathelement path="${classpath}" />
      		<pathelement path="${java.class.path}" />
      	</classpath>
      </junit>
      -->

      <java classname="${test.runner}" fork="yes" failonerror="${test.failonerror}">
        <arg value="${test.entry}"/>
        <classpath>
          <pathelement location="${dest.classes}" />
          <pathelement path="${classpath}" />
          <pathelement path="${java.class.path}" />
        </classpath>
      </java>
   </target>

   <!-- ######################################################### -->

   <target name="dist" depends="dist-jar,doc,dist-tar,dist-zip,dist-src" description="builds binary distribution"/>

   <target name="dist-jar" depends="build">
      <mkdir dir="${dest.jardir}"/>
      <mkdir dir="${workdir}"/>
      <copy todir="${workdir}">
         <fileset dir="${dest.classes}">
            <patternset refid="patternset-non-test-classes"/>
         </fileset>
      </copy>
      
      <mkdir dir="${workdir}/META-INF"/>
      <copy todir="${workdir}/META-INF" file="./LICENSE.txt"/>
      <copy todir="${workdir}/META-INF" file="./NOTICE.txt"/>
      
      <jar jarfile="${dest.jardir.jar}" manifest="${source.src}/conf/MANIFEST.MF">
         <fileset dir="${workdir}"/>
      </jar>
      <delete dir="${workdir}"/>
      <delete dir="${dest.classes}"/>
      
   </target>
   
   <target name="dist-tar" depends="dist-jar,doc">

      <mkdir dir="${workdir}/${bin.name}"/>
      <copy todir="${workdir}/${bin.name}">
         <fileset dir="${dest}">         
            <patternset refid="patternset-exclude-distros"/>
         </fileset>
      </copy>
      
      <!-- create tar.gz -->
      <tar longfile="gnu" tarfile="${dest.bin.tar}">
        <tarfileset dir="${workdir}"/>
      </tar>
      <gzip zipfile="${dest.bin.tar.gz}"
      	    src="${dest.bin.tar}">
      </gzip>
      <delete file="${dest.bin.tar}" />
      <checksum file="${dest.bin.tar.gz}"/>
      
      <delete dir="${workdir}"/>
   
   </target>  

   <target name="dist-zip" depends="dist-jar,doc">

      <mkdir dir="${workdir}/${bin.name}"/>
      <copy todir="${workdir}/${bin.name}">
         <fileset dir="${dest}">         
            <patternset refid="patternset-exclude-distros"/>
         </fileset>
      </copy>
            
      <!-- create a zip file -->
      <zip zipfile="${dest.bin.zip}" >
        <zipfileset dir="${workdir}" />
      </zip>
      <checksum file="${dest.bin.zip}"/>
      
      <delete dir="${workdir}"/>
   
   </target>

   <!-- ######################################################### -->

   <target name="dist-src" depends="init">
   
      <mkdir dir="${workdir}"/>
      <mkdir dir="${dest.jardir}"/>
      
      <copy toDir="${workdir}/${src.name}">
         <fileset dir=".">
            <include name="src/**" />
            <include name="data/**" />
            <include name="xdocs/**" />
            <include name="LICENSE.txt" />
            <include name="NOTICE.txt" />
            <include name="README.txt" />
            <include name="RELEASE-NOTES*" />
            <include name="DEVELOPERS-GUIDE*" />
            <include name="PROPOSAL*" />
            <include name="STATUS*" />
            <include name="build.xml" />
            <include name="build.properties.sample" />
         </fileset>
      </copy>
      <copy toDir="${workdir}/${src.name}">
         <fileset dir="${dest.jardir}">
            <include name="${jar.name}" />
         </fileset>
      </copy>
      
      <!--cvs dest="${workdir}" cvsRoot="${cvs.root}" 
          package="jakarta-commons" tag="${cvs.tag}"/>
      <move toDir="${workdir}/${src.name}">
        <fileset dir="${workdir}/jakarta-commons/collections"/>
      </move>
      <delete dir="${workdir}/jakarta-commons"/> 
      <copy file="./LICENSE.txt" toDir="${workdir}/${src.name}"/>
      <copy file="./NOTICE.txt" toDir="${workdir}/${src.name}"/-->
      
      <!-- create tar.gz -->
      <tar longfile="gnu" tarfile="${dest.src.tar}">
        <tarfileset dir="${workdir}"/>
      </tar>
      <gzip zipfile="${dest.src.tar.gz}"
      	    src="${dest.src.tar}">
      </gzip>
      <delete file="${dest.src.tar}" />
      <checksum file="${dest.src.tar.gz}"/>
      
      <!-- create a zip file -->
      <zip zipfile="${dest.src.zip}" >
        <zipfileset dir="${workdir}" />
      </zip>
      <checksum file="${dest.src.zip}"/>
             
      <delete dir="${workdir}"/>
   
   </target>

</project>
