<?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.0.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"/>
  <property name="maven.junit.jar" value="${maven.repo.local}/junit/junit/3.8.1/junit-3.8.1.jar"/>

  <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" source="1.3" target="1.3">
      <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" source="1.3" target="1.3">
      <src>
        <pathelement location="${basedir}/src/test/java"/>
      </src>
      <classpath>
        <pathelement location="${maven.build.output}"/>
      </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>
