<!--
   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.
-->
<project name="Bean Utilities" default="compile" basedir=".">


<!--
        "Bean Utilities" component of the Apache Commons Subproject
        $Id$
-->


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


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


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


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

  <!-- The primary package name of this component -->
  <property name="component.package"       value="org.apache.commons.beanutils"/>

  <!-- The title of this component -->
  <property name="component.title"         value="Bean Introspection Utilities"/>

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

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

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

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

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


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


  <!-- Compiler source JDK version -->
  <property name="compile.source"          value="1.5"/>

  <!-- Compiler target JDK version -->
  <property name="compile.target"          value="1.5"/>

  <!-- 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="false"/>

  <!-- 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"/>
    <pathelement location="${commons-logging.jar}"/>
    <pathelement location="${commons-collections.jar}"/>
  </path>


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


  <!-- Construct unit test classpath -->
  <path id="test.classpath">
    <pathelement location="${build.home}/classes"/>
    <pathelement location="${build.home}/tests"/>
    <pathelement location="${commons-collections.jar}"/>
    <pathelement location="${commons-collections-testframework.jar}"/>
    <pathelement location="${commons-logging.jar}"/>
    <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"/>

  <!-- The Commons Logger LogFactory implementation to use -->
  <property name="test.factory"
           value="org.apache.commons.logging.impl.LogFactoryImpl"/>

  <!-- The Commons Logger Log implementation to use (standard factory) -->
  <property name="test.log"
           value="org.apache.commons.logging.impl.SimpleLog"/>

  <!-- The Commons Logger SimpleLog level for testing -->
  <property name="test.level"               value="error"/>

  <!-- Loop counter for microbenchmarks -->
  <property name="bench.counter"            value="100000"/>


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


  <target name="init"
   description="Initialize and evaluate conditionals">
    <echo message="-------- ${component.name} ${component.version} --------"/>
    <filter  token="name"                  value="${component.name}"/>
    <filter  token="package"               value="${component.package}"/>
    <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"/>
    <tstamp/>
  </target>


  <target name="compile" depends="prepare"
   description="Compile shareable components">
    <javac  srcdir="${source.home}"
           destdir="${build.home}/classes"
            source="${compile.source}"
            target="${compile.target}"
             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"
               overview="src/java/overview.html"
               doctitle="&lt;h1&gt;${component.title} (Version ${component.version})&lt;/h1&gt;"
            windowtitle="${component.title} (Version ${component.version})"
                 bottom="Copyright (c) 2000-2008 - Apache Software Foundation">
      <classpath refid="compile.classpath"/>
    </javadoc>
  </target>


  <target name="dist" depends="compile,javadoc"
   description="Create binary distribution">
    <mkdir      dir="${dist.home}"/>
    <copy      file="LICENSE.txt"
              todir="${dist.home}"/>
    <copy      file="NOTICE.txt"
              todir="${dist.home}"/>
    <copy      file="RELEASE-NOTES.txt"
              todir="${dist.home}"/>
    <copy      file="README.md"
              todir="${dist.home}"/>
    <antcall target="jar"/>
  </target>


  <target name="jar" depends="compile"
   description="Create jar">
    <mkdir      dir="${dist.home}"/>
    <mkdir      dir="${build.home}/classes/META-INF"/>
    <copy      file="LICENSE.txt"
             tofile="${build.home}/classes/META-INF/LICENSE.txt"/>
    <copy      file="NOTICE.txt"
             tofile="${build.home}/classes/META-INF/NOTICE.txt"/>

    <jar    jarfile="${dist.home}/commons-beanutils-${component.version}.jar">
        <manifest>
            <attribute name="Built-By" value="${user.name}"/>
            <attribute name="Specification-Title" value="Commons BeanUtils"/>
            <attribute name="Specification-Version" value="${component.version}"/>
            <attribute name="Specification-Vendor" value="The Apache Software Foundation"/>
            <attribute name="Implementation-Title" value="Commons BeanUtils"/>
            <attribute name="Implementation-Version" value="${component.version}"/> 
            <attribute name="Implementation-Vendor" value="The Apache Software Foundation"/>
            <attribute name="Implementation-Vendor-Id" value="org.apache"/>
            <attribute name="X-Compile-Source-JDK" value="${compile.source}"/>
            <attribute name="X-Compile-Target-JDK" value="${compile.target}"/>
        </manifest>
        <fileset dir="${build.home}/classes">
            <include name="**/*.class"/>
            <include name="**/LICENSE.txt"/>
            <include name="**/NOTICE.txt"/>
        </fileset>
    </jar>

  </target>

  <target name="install-jar" depends="jar"
   description="--> Installs jar file in ${lib.repo}">
    <copy todir="${lib.repo}" filtering="no">
      <fileset dir="${dist.home}">
        <include name="commons-${component.name}.jar"/>
      </fileset>
    </copy>
  </target>

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


 <target name="test" depends="compile.tests"
   description="Run all unit test cases">
      <junit printsummary="true" showoutput="true" fork="yes" haltonfailure="${test.failonerror}"
        maxmemory="25m">
        <classpath refid="test.classpath"/>
        <batchtest>
          <fileset dir="${test.home}">
            <include name="**/*TestCase.java"/>
            <exclude name="**/*MemoryTestCase.java"/>
            <exclude name="**/MemoryLeakTestCase.java"/>
          </fileset>
        </batchtest>
      </junit>
  </target>

  <!-- ========== Microbenchmark Cases ===================================== -->


  <target name="bench"  depends="compile.tests,
                                 bench.BeanUtils,
                                 bench.PropertyUtils
                                "
   description="Execute microbenchmark cases"/>


  <target name="bench.BeanUtils" depends="compile.tests">
    <echo message="Running BeanUtils microbenchmarks"/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="counter"
                 value="${bench.counter}"/>
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.BeanUtilsBenchCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="bench.PropertyUtils" depends="compile.tests">
    <echo message="Running PropertyUtils microbenchmarks"/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="counter"
                 value="${bench.counter}"/>
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.PropertyUtilsBenchCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>



</project>
