<?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="pdk" default="jar">
  
  <property name="src.dir"  location="${basedir}/src/java"/>
  <import file="../build-common.xml"/>

  <path id="classpath-pdk">
    <fileset dir="${hive.root}/testlibs" includes="junit-4.10.jar"/>
    <path refid="classpath"/>
  </path>

  <target name="compile" depends="init, setup, ivy-retrieve">
    <echo message="Project: ${ant.project.name}"/>
    <javac
     encoding="${build.encoding}"
     srcdir="${src.dir}"
     includes="**/*.java"
     destdir="${build.classes}"
     debug="${javac.debug}"
     deprecation="${javac.deprecation}"
     includeantruntime="false">
      <compilerarg line="${javac.args} ${javac.args.warnings}" />
      <classpath refid="classpath-pdk"/>
    </javac>
  </target>

  <target name="test" unless="testcase" depends="ivy-retrieve-test">
    <echo message="Project: ${ant.project.name}"/>
    <delete quiet="true" dir="${build.dir}/test-plugin"/>
    <copy todir="${build.dir}/test-plugin">
      <fileset dir="${basedir}/test-plugin"/>
    </copy>
    <ant antfile="${build.dir}/test-plugin/build.xml"
         target="package" inheritAll="false" inheritRefs="false">
      <property name="hive.install.dir" value="${build.dir.hive}/dist"/>
      <property name="hadoop.home" value="${hadoop.root}"/>
      <property name="build.ivy.lib.dir" value="${build.ivy.lib.dir}"/>
    </ant>
    <ant antfile="${build.dir}/test-plugin/build.xml"
         target="test" inheritAll="false" inheritRefs="false">
      <property name="hive.install.dir" value="${build.dir.hive}/dist"/>
      <property name="hadoop.home" value="${hadoop.root}"/>
      <property name="build.ivy.lib.dir" value="${build.ivy.lib.dir}"/>
      <property name="test.hadoop.bin.path" value="${test.hadoop.bin.path}"/>
    </ant>
  </target>

</project>
