<?xml version="1.0"?>

<!--
   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="failmon" default="compile">

  <import file="../build-contrib.xml"/>

  <property name="jarfile" value="${build.dir}/${name}.jar"/>

  <target name="jar" depends="compile" unless="skip.contrib">
    <!-- Make sure that the hadoop jar has been created -->
<!-- This works, but causes findbugs to fail
    <subant antfile="build.xml" target="jar">
      <fileset dir="../../.." includes="build.xml"/>
    </subant>
-->
    <!-- Copy the required files so that the jar can run independently
	 of Hadoop source code -->
    
  <!-- create the list of files to add to the classpath -->
  <fileset dir="${hadoop.root}/lib" id="class.path">
    <include name="**/*.jar" />
    <exclude name="**/excluded/" />
  </fileset>
  
  <pathconvert pathsep=" " property="failmon-class-path" refid="class.path">
    <map from="${basedir}/" to=""/>
  </pathconvert>

    <echo message="contrib: ${name}"/>
    <jar jarfile="${jarfile}" basedir="${build.classes}">
      <manifest>
        <attribute name="Main-Class" value="org.apache.hadoop.contrib.failmon.RunOnce"/>
	<attribute name="Class-Path" value="${failmon-class-path}"/> 
      </manifest>
    </jar>

  </target>

  
  <!-- Override test target to copy sample data -->
  <target name="test" depends="compile-test, compile, compile-examples" if="test.available">
    <echo message="contrib: ${name}"/>
    <delete dir="${hadoop.log.dir}"/>
    <mkdir dir="${hadoop.log.dir}"/>
    <delete dir="${build.test}/sample"/>
    <mkdir dir="${build.test}/sample"/>
    <copy todir="${build.test}/sample">
      <fileset dir="${root}/sample"/>
    </copy>
    <junit
      printsummary="yes" showoutput="${test.output}" 
      haltonfailure="no" fork="yes" maxmemory="256m"
      errorProperty="tests.failed" failureProperty="tests.failed"
      timeout="${test.timeout}">
      
      <sysproperty key="test.build.data" value="${build.test}/data"/>
      <sysproperty key="build.test" value="${build.test}"/>
      <sysproperty key="contrib.name" value="${name}"/>
      
      <!-- requires fork=yes for: 
        relative File paths to use the specified user.dir 
        classpath to use build/contrib/*.jar
      -->
      <sysproperty key="user.dir" value="${build.test}/data"/>
      
      <sysproperty key="fs.default.name" value="${fs.default.name}"/>
      <sysproperty key="hadoop.test.localoutputfile" value="${hadoop.test.localoutputfile}"/>
      <sysproperty key="hadoop.log.dir" value="${hadoop.log.dir}"/>
      <classpath refid="test.classpath"/>
      <formatter type="${test.junit.output.format}" />
      <batchtest todir="${build.test}" unless="testcase">
        <fileset dir="${src.test}"
                 includes="**/Test*.java" excludes="**/${test.exclude}.java" />
      </batchtest>
      <batchtest todir="${build.test}" if="testcase">
        <fileset dir="${src.test}" includes="**/${testcase}.java"/>
      </batchtest>
    </junit>
    <fail if="tests.failed">Tests failed!</fail>

  </target>
  
  <target name="tar" depends="jar">

    <copy todir=".">
      <fileset dir="${hadoop.root}/build/contrib/failmon/"
	       includes="failmon.jar"/>
    </copy>
    
    <tar tarfile="${name}.tar" 
	 basedir=".." 
	 includes="${name}/**"
	 excludes="${name}/${name}.tar.gz, ${name}/src/**, ${name}/logs/**, ${name}/build.xml*"/>
    <gzip zipfile="${name}.tar.gz" src="${name}.tar"/>
    <delete file="${name}.tar"/>
    <delete file="${name}.jar"/>

    <move file="${name}.tar.gz" todir="${build.dir}"/>
    <echo message= "${hadoop.root}/build/contrib/failmon/${name}.jar"/>
    
  </target>
  
</project>
