<?xml version="1.0" encoding="UTF-8"?>
<!--
 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="exec" default="jar" basedir=".">

  <!-- include optional user-defined properties -->
  <property file="user.properties" />
  
  <property file="build.properties" />
  <property name="maven.build.version" value="1.1"/>
  <property name="maven.build.output" value="target/classes"/>
  <property name="maven.build.directory" value="target"/>
  <property name="maven.build.final.name" value="commons-exec-${maven.build.version}"/>
  <property name="maven.test.reports" value="${maven.build.directory}/test-reports"/>
  <property name="maven.test.output" value="target/test-classes"/>
  <property name="maven.repo.local" value="${user.home}/.m2/repository"/>
  <!-- JUnit version should agree with the version in pom.xml -->
  <property name="maven.junit.jar" value="${maven.repo.local}/junit/junit/3.8.1/junit-3.8.1.jar"/>
  <!-- These must agree with the versions in pom.xml -->
  <property name="maven.compile.source" value="1.3"/>
  <property name="maven.compile.target" value="1.3"/>

  <path id="junit">
      <pathelement location="${maven.junit.jar}"/>
  </path>

  <target name="clean" description="Clean the output directory">
    <delete dir="${maven.build.directory}"/>
  </target>

  <target name="compile" description="Compile the code">
    <mkdir dir="${maven.build.output}"/>
    <javac destdir="${maven.build.output}" excludes="**/package.html" debug="true" deprecation="true" optimize="false"
        includeAntRuntime="false"
        source="${maven.compile.source}" target="${maven.compile.target}">
      <src>
        <pathelement location="${basedir}/src/main/java"/>
      </src>
    </javac>
  </target>

  <target name="jar" depends="compile,test" description="Build the JAR">
    <jar jarfile="${maven.build.directory}/${maven.build.final.name}.jar" basedir="${maven.build.output}" excludes="**/package.html"/>
  </target>

  <target name="compile-tests" depends="junit-present, compile" description="Compile the test code" if="junit.present">
    <mkdir dir="${maven.test.output}"/>
    <javac destdir="${maven.test.output}" excludes="**/package.html" debug="true" deprecation="true" optimize="false" 
        includeAntRuntime="false"
        source="${maven.compile.source}" target="${maven.compile.target}">
      <src>
        <pathelement location="${basedir}/src/test/java"/>
      </src>
      <classpath>
        <pathelement location="${maven.build.output}"/>
        <path refid="junit"/>
      </classpath>
    </javac>
  </target>

  <target name="test" depends="junit-present, compile-tests" if="junit.present" description="Run the test cases">
    <mkdir dir="${maven.test.reports}"/>
    <junit printSummary="yes" haltonerror="true" haltonfailure="true" fork="true" dir=".">
      <sysproperty key="basedir" value="."/>
      <sysproperty key="COMMONS_EXEC_DEBUG" value="true"/>
      <sysproperty key="COMMONS_EXEC_LENIENT" value="false"/>
      <!-- 2008-12-30 fix sgoeschl using xml formatter breaks junit on JDK 1.3.1 -->
      <!-- <formatter type="xml"/> -->
      <formatter type="plain" usefile="false"/>
      <classpath>
        <pathelement location="${maven.build.output}"/>
        <pathelement location="${maven.test.output}"/>
        <path refid="junit"/>
      </classpath>
      <batchtest todir="${maven.test.reports}">
        <fileset dir="${basedir}/src/test/java">
          <include name="**/*Test.java"/>
          <exclude name="**/*Abstract*Test.java"/>
        </fileset>
      </batchtest>
    </junit>
  </target>

  <target name="test-junit-present">
    <available classname="junit.framework.Test" property="junit.present" classpathref="junit"/>
  </target>

  <target name="junit-present" depends="test-junit-present" unless="junit.present">
    <echo>================================= WARNING ================================</echo>
    <echo> JUnit isn't present in your classpath. Tests not executed. </echo>
    <echo>==========================================================================</echo>
  </target>

  <!-- Starts preparing a test distribution -->
  <target name="test-distribution-prepare" depends="clean, compile, compile-tests" if="junit.present">
    <mkdir dir="${maven.build.directory}/dist/lib"/>
    <!-- create the libraries -->
    <copy file="${maven.junit.jar}" todir="${maven.build.directory}/dist/lib"/>
    <jar jarfile="${maven.build.directory}/dist/lib/commons-exec-test-${maven.build.version}.jar" basedir="${maven.test.output}" excludes="**/package.html"/>
    <jar jarfile="${maven.build.directory}/dist/lib/${maven.build.final.name}.jar" basedir="${maven.build.output}" excludes="**/package.html"/>
    <!-- copy the scripts -->
    <copy todir="${maven.build.directory}/dist">
      <fileset dir="${basedir}/src/test/bin"/>
      <filterset>
        <filter token="VERSION" value="${maven.build.version}"/>
      </filterset>
    </copy>
    <copy todir="${maven.build.directory}/dist/src/test/scripts">
      <fileset dir="${basedir}/src/test/scripts"/>
    </copy>
    <!-- make the shell script files readable/executable -->
    <chmod dir="${maven.build.directory}/dist" perm="ugo+rx" includes="**/*.sh"/>
    <!-- copy the various legal files -->
    <copy file="${basedir}/NOTICE.txt" tofile="${maven.build.directory}/dist/NOTICE.txt"/>    
    <copy file="${basedir}/LICENSE.txt" tofile="${maven.build.directory}/dist/LICENSE.txt"/>        
  </target>
  
  <!-- Create a zip containing the test environment -->
  <target name="test-distribution-zip" depends="test-distribution-prepare" if="junit.present">
    <zip destfile="${maven.build.directory}/commons-exec-test-${maven.build.version}.zip">
      <fileset dir="${maven.build.directory}/dist">
        <filename name="**/*.*"/>
      </fileset>
    </zip>
  </target>

  <!-- Create a tar.gz containing the test environment -->
  <target name="test-distribution-tar" depends="test-distribution-prepare" if="junit.present">
    <tar tarfile="${maven.build.directory}/dist/commons-exec-test-${maven.build.version}.tar" basedir="${maven.build.directory}/dist"/>
    <gzip zipfile="${maven.build.directory}/commons-exec-test-${maven.build.version}.tar.gz" src="${maven.build.directory}/dist/commons-exec-test-${maven.build.version}.tar"/>
    <delete file="${maven.build.directory}/dist/commons-exec-test-${maven.build.version}.tar"/>
  </target>

  <target name="test-distribution" depends="junit-present,test-distribution-zip,test-distribution-tar" description="Creates a test distribution" if="junit.present" >
  </target>
  
</project>
