<?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=".">

  <property file="build.properties" />
  <property name="maven.build.version" value="1.0-SNAPSHOT"/>
  <property name="maven.build.output" value="target/classes"/>
  <property name="maven.build.directory" value="target"/>
  <property name="maven.build.final.name" value="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"/>

  <path id="build.classpath">
    <!-- assume that we pick up the junit stuff from the repo - won't work on all boxes -->
    <fileset dir="${maven.repo.local}/junit/junit/3.8.1">
      <include name="junit-3.8.1.jar"/>
    </fileset>
  </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" target="1.3">
      <src>
        <pathelement location="${basedir}/src/main/java"/>
      </src>
      <classpath refid="build.classpath"/>
    </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" target="1.3">
      <src>
        <pathelement location="${basedir}/src/test/java"/>
      </src>
      <classpath>
        <path refid="build.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"/>
      <formatter type="xml"/>
      <formatter type="plain" usefile="false"/>
      <classpath>
        <path refid="build.classpath"/>
        <pathelement location="${maven.build.output}"/>
        <pathelement location="${maven.test.output}"/>
      </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"/>
  </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, junit-present, compile-tests">
    <mkdir dir="${maven.build.directory}/dist/lib"/>
    <!-- create the libraries -->
    <copy file="${maven.repo.local}/junit/junit/3.8.1/junit-3.8.1.jar" todir="${maven.build.directory}/dist/lib"/>
    <jar jarfile="${maven.build.directory}/dist/lib/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"/>
    </copy>
    <copy todir="${maven.build.directory}/dist/src/test/scripts">
      <fileset dir="${basedir}/src/test/scripts"/>
    </copy>
    <!-- make the script files executable -->
    <chmod dir="${maven.build.directory}/dist" perm="u+x" includes="**/*.sh"/>
  </target>
  
  <!-- Create a zip containing the test environment -->
  <target name="test-distribution-zip" depends="test-distribution-prepare">
    <zip destfile="${maven.build.directory}/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">
    <tar tarfile="${maven.build.directory}/dist/exec-test-${maven.build.version}.tar" basedir="${maven.build.directory}/dist"/>
    <gzip zipfile="${maven.build.directory}/exec-test-${maven.build.version}.tar.gz" src="${maven.build.directory}/dist/exec-test-${maven.build.version}.tar"/>
    <delete file="${maven.build.directory}/dist/exec-test-${maven.build.version}.tar"/>
  </target>

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