<!--
   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="PigMix" default="jar">

  <property name="pig.dir" value="${basedir}/../../.."/>
  <property name="pig.bin" value="${pig.dir}/bin/pig"/>
  <property name="ivy.dir" location="${pig.dir}/ivy" />
  <loadproperties srcfile="${ivy.dir}/libraries.properties"/>

  <path id="classpath">
    <fileset dir="${basedir}/lib">
      <include name="*.jar"/>
    </fileset>
    <fileset dir="${pig.dir}/build/ivy/lib/Pig">
      <include name="*.jar"/>
    </fileset>
    <fileset dir="${pig.dir}">
      <include name="pig*-core-*.jar"/>
    </fileset>
  </path>

  <property name="java.dir" value="${basedir}/src/java"/>
  <property name="pigmix.build.dir" value="${basedir}/build"/>
  <property name="pigmix.jar" value="${basedir}/pigmix.jar"/>

  <condition property="harness.cluster.conf" value="${harness.hadoop.home}/conf">
    <not>
      <isset property="harness.cluster.conf"/>
    </not>
  </condition>

  <!-- Build the UDFs -->

  <target name="clean">
    <delete dir="${pigmix.build.dir}" />
    <delete file="${pigmix.jar}" />
  </target>

  <target name="compile">
    <mkdir dir="${pigmix.build.dir}" />
    <javac srcdir="${java.dir}" destdir="${pigmix.build.dir}" debug="on">
      <classpath refid="classpath" />
    </javac>
  </target>

  <target name="jar" depends="compile">
    <jar jarfile="${pigmix.jar}">
      <fileset dir="build"/>
      <zipfileset src="lib/sdsuLibJKD12.jar"/>
    </jar>
  </target>

  <target name="property-check">
    <fail message="Please set the property harness.hadoop.home to HADOOP_HOME, make sure ${harness.hadoop.home}/bin/hadoop exists."
      unless="harness.hadoop.home"/>
  </target>

  <target name="deploy" depends="jar, property-check">
    <exec executable="bash" failonerror="true">
      <arg value="${basedir}/bin/generate_data.sh"/>
      <env key="PIG_HOME" value="${pig.dir}"/>
      <env key="PIG_BIN" value="${pig.bin}"/>
      <env key="PIGMIX_HOME" value="${basedir}"/>
      <env key="HADOOP_HOME" value="${harness.hadoop.home}"/>
      <env key="HADOOP_VERSION" value="${hadoopversion}"/>
      <!--env key="HADOOP_CONF_DIR" value="${harness.cluster.conf}"/-->
    </exec>
  </target>

  <target name="test" depends="jar, property-check">
    <exec executable="perl" failonerror="true">
      <arg value="${basedir}/bin/runpigmix.pl"/>
      <arg value="${pig.dir}"/>
      <arg value="${pig.bin}"/>
      <arg value="${basedir}/pigmix.jar"/>
      <arg value="${harness.hadoop.home}"/>
      <arg value="${harness.hadoop.home}/bin/hadoop"/>
      <arg value="${basedir}/src/pig"/>
      <arg value="/user/pig/tests/data/pigmix"/>
      <arg value="output"/>
      <!--parallel is hardcoded, we can change but L9/L10 mapreduce program will still use 40 reduces-->
      <arg value="40"/>
      <!--number of runs-->
      <arg value="1"/>
      <!--env key="HADOOP_CONF_DIR" value="${harness.cluster.conf}"/-->
    </exec>
  </target>
</project>
