<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- todo: directory name from tar is not terrier or ${final.name} -->
<!-- todo: windows .zip distribution -->
<project basedir="." name="Terrier" default="core-jar">

	<property file="build.properties"/>
	
	<property name="base.dir"	value="." />
	<property name="lib.dir"	 value="${base.dir}/lib" />
	<property name="src.dir"	 value="${base.dir}/src" />
	<property name="src.test.dir" value="${base.dir}/src_test" />
	<property name="classes.dir" value="${base.dir}/classes" />
	<property name="javadoc.dir" value="${base.dir}/doc/javadoc" />

	<property name="javac.debug" value="on"/>
	<property name="javac.optimize" value="on"/>
	<property name="javac.deprecation" value="off"/>
	<property name="javac.version" value="1.5"/>
	<property name="javac.args" value=""/>
	<property name="javac.args.warnings" value="-Xlint:unchecked"/>

	<property name="Name" value="Terrier"/>
	<property name="name" value="terrier"/>
	<property name="version" value="3.0-dev"/>
	<property name="final.name" value="${name}-${version}"/>
	<property name="year" value="2009"/>
	<property name="url" value="http://ir.dcs.gla.ac.uk/terrier/"/>

	<property name="javadoc.link.java"
		value="http://java.sun.com/j2se/1.5/docs/api/"/>

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

	<target name="clean" description="Remove all generated files">
		<delete dir="${classes.dir}" />
	</target>

	<target name="init" description="Create the folders required for compilation">
		<mkdir dir="${classes.dir}" />
		 <mkdir dir="${classes.dir}_test" />
	</target>

	<target name="compile"  description="Compile Terrier" depends="core-jar" />

	<target name="compile-core-grammars" description="Compile ANTLR grammars" depends="init">
		<antlr target="src/uk/ac/gla/terrier/querying/parser/terrier_floatlex.g" />
		<antlr target="src/uk/ac/gla/terrier/querying/parser/terrier_normallex.g" />
		<antlr target="src/uk/ac/gla/terrier/querying/parser/terrier.g" />
	</target>

	<target name="compile-core-classes" description="Compile core Terrier classes" depends="init,compile-core-grammars">
		<javac srcdir="${src.dir}" destdir="${classes.dir}" deprecation="on">
			<compilerarg value="-Xlint:unchecked"/>
			<classpath refid="classpath" />
			<include name="**/*.java" />
		</javac>
	</target>

	<target name="core-jar" description="Build the core jar file" depends="compile-core-classes">
		<jar jarfile="${lib.dir}/${final.name}-core.jar" basedir="${classes.dir}" />
	</target>

	<target name="compile-test-classes" description="Compile core Terrier classes" depends="core-jar,init">
		<javac srcdir="${src.test.dir}" destdir="${classes.dir}_test" deprecation="on">
			<compilerarg value="-Xlint:unchecked"/>
			<classpath refid="classpath" />
			<include name="**/*.java" />
		</javac>
	</target>	

	<target name="test-jar" description="Build the test jar file" depends="compile-test-classes">
		<jar jarfile="${lib.dir}/${final.name}-core.jar" basedir="${classes.dir}_test" />
	</target>

	<target name="test" description="Run the tests" depends="test-jar">
		 <junit showoutput="${test.output}" haltonfailure="no" 
			fork="yes" maxmemory="256m" dir="${basedir}" printsummary="yes"
			errorProperty="tests.failed" failureProperty="tests.failed"
			>
			<formatter type="plain" />
			<classpath refid="classpath" />
			<!--
			<batchtest>
				<fileset dir="${src.test.dir}" includes="**/*Suite.java" />
			</batchtest>
			-->
			<test name="TerrierDefaultTestSuite" />
		</junit>
		<fail if="tests.failed">Tests failed!</fail>
	</target>

	<target name="javadoc" description="Generate javadoc">
		<mkdir dir="${javadoc.dir}"/>
		 <javadoc
			destdir="${javadoc.dir}"
			overview="${src.dir}/overview.html"
			sourcepath="${src.dir}"
			packagenames="uk.ac.gla.terrier.*"
			author="true"
			version="true"
			use="true"
			windowtitle="${Name} ${version} API"
			doctitle="${Name} ${version} API"
			bottom="&lt;a href='${url}'&gt;${Name}&lt;/a&gt; ${version}. Copyright &amp;copy; 2004-${year} ;a href='http://www.gla.ac.uk/'&gt;University of Glasgow&lt;/a&gt;"
			failonerror="true"
		>
			<!-- <packageset dir="${src.dir}" /> -->
			<classpath refid="classpath" />
			<link href="${javadoc.link.java}"/>
			<group title="Core" packages="uk.ac.gla.terrier.*"/>
		</javadoc>	
	</target>

	<target name="dist" description="Build the {final.name}.tar.gz file" depends="clean, core-jar, javadoc">
		<mkdir dir="${base.dir}/dist"/>
		<mkdir dir="${base.dir}/dist/var" />
		<copy toDir="${base.dir}/dist">
			<fileset dir="${base.dir}">
				<include name="${src.dir}/**" />
				<include name="${lib.dir}/**" />
				<include name="${src.test.dir}/**" />
				<include name="bin/**" />
				<include name="etc/*" />
				<include name="share/**" />
				<include name="licenses/**" />
				<include name="LICENSE.txt" />
				<include name="README.txt" />
				<include name="build.xml" />
				<include name="build.properties" />
			</fileset>
		</copy>

		<tar destfile="${base.dir}/dist/${final.name}.tar" longfile="gnu">
			<tarfileset	dir="${base.dir}/dist">
				<include name="**" />
			</tarfileset>
		</tar>
		<gzip src="${base.dir}/dist/${final.name}.tar" destfile="${base.dir}/${final.name}.tar.gz" />
		<delete dir="${base.dir}/dist"/>
	</target>

	<property name="findbugs.home" value=""/>
	<target name="findbugs" depends="check-for-findbugs, core-jar" if="findbugs.present" 
		description="Run findbugs if present">
		<property name="findbugs.out.dir" value="${test.build.dir}/findbugs"/>
		<property name="findbugs.exclude.file" value="${test.src.dir}/findbugsExcludeFile.xml"/>
		<property name="findbugs.report.htmlfile" value="${findbugs.out.dir}/hadoop-findbugs-report.html"/>
		<property name="findbugs.report.xmlfile" value="${findbugs.out.dir}/hadoop-findbugs-report.xml"/>
		<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" 
		classpath="${findbugs.home}/lib/findbugs-ant.jar" />

	<mkdir dir="${findbugs.out.dir}"/>
		<findbugs home="${findbugs.home}" output="xml:withMessages" 
			outputFile="${findbugs.report.xmlfile}" effort="max" 
			excludeFilter="${findbugs.exclude.file}" jvmargs="-Xmx512M">
			<auxClasspath>
				<fileset dir="${lib.dir}">
					<include name="**/*.jar"/>
				</fileset>
			</auxClasspath>
	  		<sourcePath path="${src.dir}"/>
	  		<sourcePath path="${basedir}/src/contrib/streaming/src/java" />
			<class location="${lib.dir}/{final.name}-core.jar" />
		</findbugs>

		<xslt style="${findbugs.home}/src/xsl/default.xsl"
			in="${findbugs.report.xmlfile}"
			out="${findbugs.report.htmlfile}"/>
	</target>
	<target name="check-for-findbugs">
		<available property="findbugs.present" 
	   		file="${findbugs.home}/lib/findbugs.jar" />
	</target>

</project>

