<?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="libthrift" default="dist" basedir="."
  xmlns:ivy="antlib:org.apache.ivy.ant">

  <description>Thrift Build File</description>

  <property environment="env" />

  <property name="gen" location="gen-java" />
  <property name="genbean" location="gen-javabean" />

  <property name="src" location="src" />
  <property name="build" location="build" />
  <property name="javadoc" location="${build}/javadoc" />
  <property name="install.path" value="/usr/local/lib" />
  <property name="src.test" location="test" />
  <property name="build.test" location="${build}/test" />
  <property name="test.thrift.home" location="../../test"/>

  <property file="${user.home}/.thrift-build.properties" />

  <!-- ivy properties -->
  <property name="ivy.version" value="2.0.0-rc2" />
  <property name="ivy.dir" location="${build}/ivy" />
  <property name="ivy.jar" location="${ivy.dir}/ivy-${ivy.version}.jar"/>
  <property name="ivy.lib.dir" location="${ivy.dir}/lib" />
  <property name="ivy_repo_url" value="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"/>
  <property name="ivysettings.xml" location="${ivy.dir}/ivysettings.xml" />

  <path id="compile.classpath">
    <fileset dir="${ivy.lib.dir}">
      <include name="**/*.jar" />
    </fileset>
  </path>

  <path id="test.classpath">
    <path refid="compile.classpath" />
    <pathelement path="${env.CLASSPATH}" />
    <pathelement location="build/test" />
    <pathelement location="libthrift.jar" />
  </path>

  <target name="init">
    <tstamp />
    <mkdir dir="${build}"/>
    <mkdir dir="${build.test}" />
    <!--
    Allow Ivy to be disabled with "-Dnoivy=".
    It is kind of a hack to pretend that we already found it,
    but Ant doesn't provide an easy way of blocking dependencies
    from executing or checking multiple conditions.
    -->
    <condition property="ivy.found"><isset property="noivy" /></condition>
    <condition property="offline"><isset property="noivy" /></condition>
  </target>

  <target name="ivy-init-dirs">
    <mkdir dir="${ivy.dir}" />
    <mkdir dir="${ivy.lib.dir}" />
  </target>

  <target name="ivy-download" depends="ivy-init-dirs" description="To download ivy" unless="offline">
    <get src="${ivy_repo_url}" dest="${ivy.jar}" usetimestamp="true"/>
  </target>

  <target name="ivy-probe-antlib">
    <condition property="ivy.found">
      <typefound uri="antlib:org.apache.ivy.ant" name="cleancache"/>
    </condition>
  </target>

  <target name="ivy-init-antlib" depends="ivy-download,ivy-probe-antlib" unless="ivy.found">
    <typedef uri="antlib:org.apache.ivy.ant" onerror="fail"
      loaderRef="ivyLoader">
      <classpath>
        <pathelement location="${ivy.jar}"/>
      </classpath>
    </typedef>
    <fail>
      <condition >
        <not>
          <typefound uri="antlib:org.apache.ivy.ant" name="cleancache"/>
        </not>
      </condition>
      You need Apache Ivy 2.0 or later from http://ant.apache.org/
      It could not be loaded from ${ivy_repo_url}
    </fail>
  </target>

  <target name="resolve" depends="ivy-init-antlib" description="retrieve dependencies with ivy" unless="noivy">
    <ivy:retrieve />
  </target>

  <target name="compile" depends="init,resolve">
    <javac srcdir="${src}" destdir="${build}" source="1.5" target="1.5" debug="true" classpathref="compile.classpath" />
  </target>

  <target name="javadoc" depends="init">
    <javadoc sourcepath="${src}"
      destdir="${javadoc}"
      version="true"
      windowtitle="Thrift Java API"
      doctitle="Thrift Java API">
    </javadoc>
  </target>

  <target name="dist" depends="compile">
    <jar jarfile="libthrift.jar">
      <fileset dir="${build}">
        <include name="**/*.class" />
      </fileset>
      <fileset dir="src">
        <include name="**/*.java" />
      </fileset>
    </jar>
  </target>

  <target name="install" depends="dist,javadoc">
    <copy todir="${install.path}">
        <fileset dir="."><include name="*.jar" /></fileset>
    </copy>
    <copy todir="${install.javadoc.path}">
      <fileset dir="${javadoc}">
        <include name="**/*" />
      </fileset>
    </copy>
  </target>

  <target name="clean">
    <delete dir="${build}" />
    <delete dir="${gen}"/>
    <delete dir="${genbean}"/>
    <delete dir="${javadoc}"/>
    <delete file="libthrift.jar" />
  </target>

  <target name="compile-test" description="Build the test suite classes" depends="generate,dist">
    <javac debug="true" srcdir="${gen}" destdir="${build.test}" classpathref="test.classpath" />
    <javac debug="true" srcdir="${genbean}" destdir="${build.test}" classpathref="test.classpath" />
    <javac debug="true" srcdir="${src.test}" destdir="${build.test}" classpathref="test.classpath" />
  </target>

  <target name="test" description="Run the full test suite" depends="compile-test">
    <java classname="org.apache.thrift.test.JSONProtoTest"
      classpathref="test.classpath" failonerror="true" />
    <java classname="org.apache.thrift.test.TCompactProtocolTest"
      classpathref="test.classpath" failonerror="true" />
    <java classname="org.apache.thrift.test.IdentityTest"
      classpathref="test.classpath" failonerror="true" />
    <java classname="org.apache.thrift.test.EqualityTest"
      classpathref="test.classpath" failonerror="true" />
    <java classname="org.apache.thrift.test.ToStringTest"
      classpathref="test.classpath" failonerror="true" />
    <java classname="org.apache.thrift.test.DeepCopyTest"
      classpathref="test.classpath" failonerror="true" />
    <java classname="org.apache.thrift.test.MetaDataTest"
      classpathref="test.classpath" failonerror="true" />
    <java classname="org.apache.thrift.test.JavaBeansTest"
      classpathref="test.classpath" failonerror="true" />
  </target>

  <target name="generate">
    <exec executable="../../compiler/cpp/thrift">
      <arg line="--gen java:hashcode ${test.thrift.home}/ThriftTest.thrift" />
    </exec>
    <exec executable="../../compiler/cpp/thrift">
      <arg line="--gen java:hashcode ${test.thrift.home}/DebugProtoTest.thrift" />
    </exec>
    <exec executable="../../compiler/cpp/thrift">
      <arg line="--gen java:hashcode ${test.thrift.home}/OptionalRequiredTest.thrift" />
    </exec>
    <exec executable="../../compiler/cpp/thrift">
      <arg line="--gen java:beans,nocamel ${test.thrift.home}/JavaBeansTest.thrift" />
    </exec>
  </target>

</project>
