<project name="Threading Goodies" default="compile" basedir=".">


<!--
        "Threading Goodies" component of the Apache Commons Subproject
        $Id$
-->


<!-- ========== Initialize Properties ===================================== -->


  <property file="build/build.properties"/>          <!-- Component local   -->
  <property file="../build.properties"/>             <!-- Commons local     -->
  <property file="${user.home}/build.properties"/>   <!-- User local        -->


<!-- ========== External Dependencies ===================================== -->


  <!-- The directory containing your binary distribution of JUnit,
       version 3.2 or later -->
  <property name="junit.home"              value="/usr/local/junit3.5"/>


<!-- ========== Derived Values ============================================ -->


  <!-- The pathname of the "junit.jar" JAR file -->
  <property name="junit.jar"               value="${junit.home}/junit.jar"/>


<!-- ========== Component Declarations ==================================== -->


  <!-- The name of this component -->
  <property name="component.name"          value="threading"/>

  <!-- The title of this component -->
  <property name="component.title"         value="Threading Goodies"/>

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

  <!-- The base directory for compilation targets -->
  <property name="build.home"              value="target"/>

  <!-- The base directory for component configuration files -->
  <property name="conf.home"               value="conf"/>

  <!-- The base directory for distribution targets -->
  <property name="dist.home"               value="dist"/>

  <!-- The base directory for component sources -->
  <property name="source.home"             value="src/java"/>

  <!-- The base directory for unit test sources -->
  <property name="test.home"               value="src/test"/>


<!-- ========== Compiler Defaults ========================================= -->


  <!-- Should Java compilations set the 'debug' compiler option? -->
  <property name="compile.debug"           value="true"/>

  <!-- Should Java compilations set the 'deprecation' compiler option? -->
  <property name="compile.deprecation"     value="true"/>

  <!-- Should Java compilations set the 'optimize' compiler option? -->
  <property name="compile.optimize"        value="true"/>

  <!-- Construct compile classpath -->
  <path id="compile.classpath">
    <pathelement location="${build.home}/classes"/>
  </path>


<!-- ========== Test Execution Defaults =================================== -->


  <!-- Construct unit test classpath -->
  <path id="test.classpath">
    <pathelement location="${build.home}/classes"/>
    <pathelement location="${build.home}/tests"/>
    <pathelement location="${junit.jar}"/>
  </path>

  <!-- Should all tests fail if one does? -->
  <property name="test.failonerror"        value="true"/>

  <!-- The test runner to execute -->
  <property name="test.runner"             value="junit.textui.TestRunner"/>


<!-- ========== Executable Targets ======================================== -->


  <target name="init"
   description="Initialize and evaluate conditionals">
    <echo message="-------- ${component.name} ${component.version} --------"/>
    <filter  token="name"                  value="${component.name}"/>
    <filter  token="version"               value="${component.version}"/>
  </target>


  <target name="prepare" depends="init"
   description="Prepare build directory">
    <mkdir dir="${build.home}"/>
    <mkdir dir="${build.home}/classes"/>
    <mkdir dir="${build.home}/conf"/>
    <mkdir dir="${build.home}/tests"/>
  </target>


  <target name="static" depends="prepare"
   description="Copy static files to build directory">
    <tstamp/>
    <copy  todir="${build.home}/conf" filtering="on">
      <fileset dir="${conf.home}" includes="*.MF"/>
    </copy>
  </target>


  <target name="compile" depends="static"
   description="Compile shareable components">
    <javac  srcdir="${source.home}"
           destdir="${build.home}/classes"
             debug="${compile.debug}"
       deprecation="${compile.deprecation}"
          optimize="${compile.optimize}">
      <classpath refid="compile.classpath"/>
    </javac>
    <copy    todir="${build.home}/classes" filtering="on">
      <fileset dir="${source.home}" excludes="**/*.java"/>
    </copy>
  </target>


  <target name="compile.tests" depends="compile"
   description="Compile unit test cases">
    <javac  srcdir="${test.home}"
           destdir="${build.home}/tests"
             debug="${compile.debug}"
       deprecation="${compile.deprecation}"
          optimize="${compile.optimize}">
      <classpath refid="test.classpath"/>
    </javac>
    <copy    todir="${build.home}/tests" filtering="on">
      <fileset dir="${test.home}" excludes="**/*.java"/>
    </copy>
  </target>


  <target name="clean"
   description="Clean build and distribution directories">
    <delete    dir="${build.home}"/>
    <delete    dir="${dist.home}"/>
  </target>


  <target name="all" depends="clean,compile"
   description="Clean and compile all components"/>


  <target name="javadoc" depends="compile"
   description="Create component Javadoc documentation">
    <mkdir      dir="${dist.home}"/>
    <mkdir      dir="${dist.home}/docs"/>
    <mkdir      dir="${dist.home}/docs/api"/>
    <javadoc sourcepath="${source.home}"
                destdir="${dist.home}/docs/api"
           packagenames="org.apache.commons.*"
                 author="true"
                private="true"
                version="true"
               doctitle="&lt;h1&gt;${component.title}&lt;/h1&gt;"
            windowtitle="${component.title} (Version ${component.version})"
                 bottom="Copyright (c) 2001 - Apache Software Foundation"/>
  </target>


  <target name="dist" depends="compile,javadoc"
   description="Create binary distribution">
    <mkdir      dir="${dist.home}"/>
    <copy      file="LICENSE.txt"
              todir="${dist.home}"/>
    <jar    jarfile="${dist.home}/commons-${component.name}-${component.version}.jar"
            basedir="${build.home}/classes"
           manifest="${build.home}/conf/MANIFEST.MF"/>
  </target>


<!-- ========== Unit Test Targets ========================================= -->


  <target name="test"  depends="compile.tests,
                                test.all
                               "
   description="Run all unit test cases">
  </target>


  <target name="test.all">
    <echo message="Running all Threading tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <arg value="org.apache.commons.threading.TestAll"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>


</project>
