<!--
   Copyright 2001-2004 The Apache Software Foundation

   Licensed 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.
-->
<!-- $Id$ -->
<project name="commons-cache" 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}:${j2ee.jar}:${jocl.jar}"/>

      <property name="name" value="commons-cache"/>
      <property name="Name" value="Commons-Cache"/>
      <property name="Name-Long" value="Apache Commons Cache Package"/>

      <!-- The current version number of this component -->
      <property name="component.version"       value="0.01-dev"/>

      <property name="test.entry" value="org.apache.commons.cache.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}/docs"/>
      <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="dest.jardir.jar" value="${dest.jardir}/${name}.jar"/>

      <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"/>
   </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 Apache Software Foundation. Documenation generated ${TODAY}&lt;/small&gt;."
               public="true"
               version="true"
               author="true"
               splitindex="false"
               nodeprecated="true"
               nodeprecatedlist="true"
               notree="true"
               noindex="false"
               nohelp="true"
               nonavbar="false"
               serialwarn="false">
          <link href="http://java.sun.com/products/jdk/1.3/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">
         <!-- comment out this line to build the tagext also -->
         <exclude name="org/apache/commons/cache/tagext/**" />
      </javac>
   </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" 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>
      <jar jarfile="${dest.jardir.jar}" manifest="${source.src}/conf/MANIFEST.MF">
         <fileset dir="${workdir}"/>
      </jar>
      <delete dir="${workdir}"/>
      <delete dir="${dest.classes}"/>
   </target>

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

</project>
