<?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="fuse-dfs" default="jar" xmlns:ivy="antlib:org.apache.ivy.ant">

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

  <target name="check-libhdfs-exists" if="fusedfs">
    <property name="libhdfs.lib" value="${build.c++.libhdfs}/libhdfs.so"/>
    <available file="${libhdfs.lib}" property="libhdfs-exists"/>
    <fail message="libhdfs.so does not exist: ${libhdfs.lib}. Please check flags -Dlibhdfs=1 -Dfusedfs=1 are set or first try ant compile -Dcompile.c++=true -Dlibhdfs=true">
      <condition><not><isset property="libhdfs-exists"/></not></condition>
    </fail>
  </target>

  <target name="compile">
    <condition property="perms" value="1" else="0">
      <not> <isset property="libhdfs.noperms"/> </not>
    </condition>

    <exec executable="autoreconf" dir="${basedir}" 
          searchpath="yes" failonerror="yes">
       <arg value="-if"/>
    </exec>

    <exec executable="${basedir}/configure" dir="${basedir}"
          failonerror="yes">
    </exec>

    <exec executable="make" failonerror="true">
      <env key="OS_NAME" value="${os.name}"/>
      <env key="OS_ARCH" value="${os.arch}"/>
      <env key="HADOOP_PREFIX" value="${hadoop.root}"/>
      <env key="PACKAGE_VERSION" value="0.1.0"/>
      <env key="BUILD_PLATFORM" value="${build.platform}" />
      <env key="PERMS" value="${perms}"/>
    </exec>
  </target>

  <target name="jar" />
  <target name="package" />

  <target name="compile-test" depends="ivy-retrieve-common, check-libhdfs-exists" if="fusedfs">
    <mkdir dir="${build.dir}"/>
    <mkdir dir="${build.dir}/test"/>
    <javac encoding="${build.encoding}"
	   srcdir="${src.test}"
	   includes="**/*.java"
	   destdir="${build.test}"
	   debug="${javac.debug}">
      <classpath refid="test.classpath"/>
    </javac>

    <!-- Use exec since the copy task doesn't preserve attrs -->
    <exec executable="cp" failonerror="true">
      <arg line="${hadoop.root}/src/contrib/fuse-dfs/src/fuse_dfs ${build.dir}"/>
    </exec>

    <mkdir dir="${build.dir}/test"/>

    <exec executable="cp" failonerror="true">
      <arg line="${hadoop.root}/src/contrib/fuse-dfs/src/fuse_dfs_wrapper.sh ${build.dir}"/>
    </exec>
  </target>

  <target name="test" depends="compile-test,check-libhdfs-exists" if="fusedfs">
    <junit showoutput="${test.output}" fork="yes" printsummary="yes" errorProperty="tests.failed" haltonfailure="no" failureProperty="tests.failed">
      <classpath refid="test.classpath"/>
      <sysproperty key="test.build.data" value="${build.test}/data"/>
      <sysproperty key="build.test" value="${build.test}"/>
      <sysproperty key="user.dir" value="${build.test}/data"/>
      <sysproperty key="hadoop.log.dir" value="${hadoop.log.dir}"/>
      <sysproperty key="test.src.dir" value="${test.src.dir}"/>
      <formatter type="plain" />
      <batchtest todir="${build.test}" unless="testcase">
        <fileset dir="${src.test}">
          <include name="**/Test*.java"/>
        </fileset>
      </batchtest>
      <batchtest todir="${build.test}" if="testcase">
        <fileset dir="${src.test}">
          <include name="**/${testcase}.java"/>
        </fileset>
      </batchtest>
    </junit>
    <fail if="tests.failed">Tests failed!</fail>
 </target>
</project>
