<?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.4"/>
  <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/4.11/junit-4.11.jar"/>
  <!-- These must agree with the versions in pom.xml -->
  <property name="maven.compiler.source" value="1.5"/>
  <property name="maven.compiler.target" value="1.5"/>

  <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.compiler.source}" target="${maven.compiler.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.compiler.source}" target="${maven.compiler.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>
