<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>
<project name="com.ibm.wala.core.testdata" default="build.update.jar" basedir=".">

	<property name="basews" value="${ws}"/>
	<property name="baseos" value="${os}"/>
	<property name="basearch" value="${arch}"/>
	<property name="basenl" value="${nl}"/>

	<!-- Compiler settings. -->
	<property name="javacFailOnError" value="true"/>
	<property name="javacDebugInfo" value="on"/>
	<property name="javacVerbose" value="false"/>
	<property name="logExtension" value=".log"/>
	<property name="compilerArg" value=""/>
	<property name="javacSource" value="1.8"/>
	<property name="javacTarget" value="1.8"/>
    <property name="dir_bootclasspath" value="${java.home}/lib"/>
    <path id="path_bootclasspath">
            <fileset dir="${dir_bootclasspath}">

                    <include name="*.jar"/>
            </fileset>
    </path>	
	<property name="bootclasspath" refid="path_bootclasspath"/>
	<property name="bundleJavacSource" value="${javacSource}"/>
	<property name="bundleJavacTarget" value="${javacTarget}"/>
	<property name="bundleBootClasspath" value="${bootclasspath}"/>

     <target name="JLexPresent" depends="init">
        <available file="${plugin.destination}/JLex.jar" property="jlex.present"/>
     </target>

   <target name="fetchJLex" depends="JLexPresent" unless="jlex.present">
     <delete dir="${temp.folder}"/>
     <mkdir dir="${temp.folder}/JLex"/>
     <get src="http://www.cs.princeton.edu/~appel/modern/java/JLex/current/Main.java" dest="${temp.folder}/JLex/Main.java"/>
     <javac includeAntRuntime="no" srcdir="${temp.folder}" destdir="${temp.folder}"/>
     <jar destfile="${plugin.destination}/JLex.jar" basedir="${temp.folder}" />
     <delete dir="${temp.folder}"/>
   </target>
	
     <target name="javaCupPresent" depends="init">
        <available file="${plugin.destination}/java-cup-11a.jar" property="javacup.present"/>
     </target>

   <target name="fetchJavaCup" depends="javaCupPresent" unless="javacup.present">
     <get src="http://www2.cs.tum.edu/projects/cup/java-cup-11a.jar" dest="${plugin.destination}/java-cup-11a.jar"/>
   </target>

     <target name="bcelPresent" depends="init">
        <available file="${plugin.destination}/bcel-5.2.jar" property="bcel.present"/>
     </target>

     <target name="OCamlPresent" depends="init">
        <available file="${plugin.destination}/ocaml/ocamljava-2.0-alpha1/lib/ocamljava.jar" property="ocaml.present"/>
     </target>

     <target name="fetchOCaml" depends="OCamlPresent" unless="ocaml.present">
       <delete dir="${temp.folder}"/>
       <mkdir dir="${temp.folder}"/>
       <get src="http://www.ocamljava.org/downloads/download.php?version=2.0-alpha1-bin" dest="${temp.folder}/ocamljava-2.0-alpha1-bin.tar.gz"/>
       <gunzip src="${temp.folder}//ocamljava-2.0-alpha1-bin.tar.gz" dest="${temp.folder}/ocamljava-2.0-alpha1-bin.tar"/>
       <untar src="${temp.folder}/ocamljava-2.0-alpha1-bin.tar" dest="${plugin.destination}/ocaml">
       </untar>
       <delete dir="${temp.folder}"/>
     </target>

     <target name="HelloHashPresent" depends="init">
        <available file="${plugin.destination}/hello_hash.jar" property="hello.hsh.present"/>
     </target>

     <target name="buildOCamlHelloHash" unless="hello.hash.present" depends="HelloHashPresent,fetchOCaml">
       <java jar="${plugin.destination}/ocaml/ocamljava-2.0-alpha1/lib/ocamljava.jar" fork="true">
         <arg file="${basedir}/ocaml/hello_hash.ml"/>
         <arg value="-o"/>
         <arg file="${plugin.destination}/hello_hash.jar"/>
       </java>
     </target>

   <target name="fetchBcel" depends="bcelPresent" unless="bcel.present">
     <delete dir="${temp.folder}"/>
     <mkdir dir="${temp.folder}"/>
     <get src="http://archive.apache.org/dist/jakarta/bcel/binaries/bcel-5.2.tar.gz" dest="${temp.folder}/bcel-5.2.tar.gz"/>
     <gunzip src="${temp.folder}/bcel-5.2.tar.gz" dest="${temp.folder}/bcel-5.2.tar"/>
     <untar src="${temp.folder}/bcel-5.2.tar" dest="${temp.folder}"/>
     <copy file="${temp.folder}/bcel-5.2/bcel-5.2.jar" tofile="${plugin.destination}/bcel-5.2.jar" />
     <delete dir="${temp.folder}"/>
   </target>

	<target name="copyJars" depends="fetchJLex,fetchJavaCup,fetchBcel,buildOCamlHelloHash,compileKawaTest,compileKawaChess">
	  <copy todir="${plugin.destination}/bin">
	  	<fileset dir="${plugin.destination}" includes="*.jar" />
	  </copy>
	</target>

	
	<target name="KawaChessPresent" depends="init">
          <available file="${plugin.destination}/kawa-chess/chess.scm" property="kawa.chess.present"/>
	</target>

	<target name="getKawaChess" depends="KawaChessPresent" unless="kawa.chess.present" >
	  <exec executable="git"
		dir="${plugin.destination}">
	    <arg value="clone"/>
	    <arg value="http://github.com/ttu-fpclub/kawa-chess" />
	  </exec>
	</target>

	
	<target name="KawaPresent" depends="init">
          <available file="${plugin.destination}/kawa-3.0/lib/kawa.jar" property="kawa.present"/>
	</target>
	
	<target name="fetchKawa" depends="KawaPresent" unless="kawa.present">
	  <delete dir="${temp.folder}"/>
	  <mkdir dir="${temp.folder}"/>
	  <exec executable="wget" dir="${temp.folder}">
	    <arg line="ftp://ftp.gnu.org/pub/gnu/kawa/kawa-3.0.zip"/>
	  </exec>	
	  <unzip src="${temp.folder}/kawa-3.0.zip" dest="${plugin.destination}"/>
	  <copy file="${plugin.destination}/kawa-3.0/lib/kawa.jar" todir="${plugin.destination}" failonerror="false" overwrite="false"/>
	  <delete dir="${temp.folder}"/>
	</target>
	
	<target name="compileKawaTest" depends="fetchKawa">
	  <exec executable="java" dir="${plugin.destination}/kawasrc">
	    <arg line="-cp ${plugin.destination}/kawa-3.0/lib/kawa.jar kawa.repl --main -C test.scm"/>
	  </exec>	
	  <jar destfile="${plugin.destination}/kawatest.jar" basedir="${plugin.destination}/kawasrc" />
	</target>
	
	<target name="compileKawaChess" depends="fetchKawa,getKawaChess">
	  <exec executable="java" dir="${plugin.destination}/kawa-chess">
	    <arg line="-cp ${plugin.destination}/kawa-3.0/lib/kawa.jar kawa.repl -C img.scm pos.scm chess.scm gui.scm"/>
	  </exec>
	  <exec executable="java" dir="${plugin.destination}/kawa-chess">
	    <arg line="-cp ${plugin.destination}/kawa-3.0/lib/kawa.jar kawa.repl --main -C main.scm"/>
	  </exec>	
	  <jar destfile="${plugin.destination}/kawachess.jar" basedir="${plugin.destination}/kawa-chess" />
	</target>

	
	<target name="init" depends="properties">
		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
			<isset property="buildTempFolder"/>
		</condition>
		<property name="pluginTemp" value="${basedir}"/>
		<condition property="build.result.folder" value="${pluginTemp}/com.ibm.wala.core.testdata">
			<isset property="buildTempFolder"/>
		</condition>
		<property name="build.result.folder" value="${basedir}"/>
		<property name="temp.folder" value="${basedir}/temp.folder"/>
		<property name="plugin.destination" value="${basedir}"/>
	</target>

	<target name="properties" if="eclipse.running">
		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

	</target>

	<target name="build.update.jar" depends="copyJars,init" description="Build the plug-in: com.ibm.wala.core.testdata for an update site.">
		<delete dir="${temp.folder}"/>
		<mkdir dir="${temp.folder}"/>
		<antcall target="build.jars"/>
		<antcall target="gather.bin.parts">
		  <param name="destination.temp.folder" value="${temp.folder}/jdk"/>
		</antcall>
		<zip destfile="${plugin.destination}/com.ibm.wala.core.testdata_1.0.0a.jar" basedir="${temp.folder}/jdk/com.ibm.wala.core.testdata_1.0.0" filesonly="false" whenempty="skip" update="false" excludes="**/CodeDeleted.class,**/SortingExample.class,**/A.class"/>
		<zip destfile="${plugin.destination}/com.ibm.wala.core.testdata_1.0.0.jar" basedir="${temp.folder}/jdk/com.ibm.wala.core.testdata_1.0.0" filesonly="false" whenempty="skip" update="false"/>
		<delete dir="${temp.folder}"/>
	</target>

	<target name="@dot" depends="init"  description="Create jar: com.ibm.wala.core.testdata @dot.">
	  <delete dir="${destdir}"/>
	  <mkdir dir="${destdir}"/>
	  <path id="@dot.classpath">
	  </path>
	  <!-- compile the source code -->
	  <javac destdir="${destdir}" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${jsv}" target="${jtv}" excludes="${excludes}">
	    <compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
	    <classpath refid="@dot.classpath" />
	    <src path="src/"/>
	    <compilerarg line="-log '${destdir}${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>
	  </javac>
	  <!-- Copy necessary resources -->
	  <copy todir="${destdir}" failonerror="true" overwrite="false">
	    <fileset dir="src/" excludes="**/*.java, **/package.htm*"/>
	  </copy>
	</target>

	<target name="src.zip" depends="init" unless="src.zip">
		<mkdir dir="${build.result.folder}"/>
		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
			<fileset dir="src/" includes="**/*.java"/>
		</zip>
	</target>

	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: com.ibm.wala.core.testdata.">
		<available property="@dot" file="${build.result.folder}/@dot"/>
		<antcall target="@dot">
		  <param name="destdir" value="${temp.folder}/jdk/@dot"/>
		  <param name="jsv" value="${bundleJavacSource}"/>
		  <param name="jtv" value="${bundleJavacTarget}"/>
		  <param name="excludes" value="**/bak/"/>
		</antcall>
	</target>

	<target name="build.sources" depends="init">
		<available property="src.zip" file="${build.result.folder}/src.zip"/>
		<antcall target="src.zip"/>
	</target>

	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
		<mkdir dir="${destination.temp.folder}/com.ibm.wala.core.testdata_1.0.0"/>
		<copy todir="${destination.temp.folder}/com.ibm.wala.core.testdata_1.0.0" failonerror="true" overwrite="false">
		  <fileset dir="${destination.temp.folder}/@dot" includes="**"/>
		</copy>
		<copy todir="${destination.temp.folder}/com.ibm.wala.core.testdata_1.0.0" failonerror="true" overwrite="false">
		  <fileset dir="${basedir}" includes="META-INF/"/>
		</copy>
		<copy todir="${destination.temp.folder}/com.ibm.wala.core.testdata_1.0.0" failonerror="true" overwrite="false">
		  <fileset dir="${basedir}/classes" includes="**"/>
		</copy>
	</target>

	<target name="build.zips" depends="init">
	</target>

	<target name="gather.sources" depends="init" if="destination.temp.folder">
		<mkdir dir="${destination.temp.folder}/com.ibm.wala.core.testdata_1.0.0"/>
		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/com.ibm.wala.core.testdata_1.0.0" failonerror="false" overwrite="false"/>
	</target>

	<target name="gather.logs" depends="init" if="destination.temp.folder">
		<mkdir dir="${destination.temp.folder}/com.ibm.wala.core.testdata_1.0.0"/>
		<copy file="${temp.folder}/@dot.bin${logExtension}" todir="${destination.temp.folder}/com.ibm.wala.core.testdata_1.0.0" failonerror="false" overwrite="false"/>
	</target>

	<target name="clean" depends="init" description="Clean the plug-in: com.ibm.wala.core.testdata of all the zips, jars and logs created.">
		<delete dir="${build.result.folder}/@dot"/>
		<delete file="${build.result.folder}/src.zip"/>
		<delete file="${plugin.destination}/com.ibm.wala.core.testdata_1.0.0.jar"/>
		<delete file="${plugin.destination}/com.ibm.wala.core.testdata_1.0.0.zip"/>
		<delete dir="${temp.folder}"/>
	</target>

	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
		<eclipse.convertPath fileSystemPath="C:/temp/walaWorkspace/com.ibm.wala.core.testdata" property="resourcePath"/>
		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
	</target>

	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: com.ibm.wala.core.testdata.">
		<delete dir="${temp.folder}"/>
		<mkdir dir="${temp.folder}"/>
		<antcall target="build.jars"/>
		<antcall target="build.sources"/>
		
		<antcall target="gather.bin.parts">
		  <param name="destination.temp.folder" value="${temp.folder}/jdk"/>
		</antcall>
		<antcall target="gather.sources">
		  <param name="destination.temp.folder" value="${temp.folder}/jdk"/>
		</antcall>
		
		<antcall target="gather.bin.parts">
		  <param name="destination.temp.folder" value="${temp.folder}/dalvik"/>
		</antcall>
		<antcall target="gather.sources">
		  <param name="destination.temp.folder" value="${temp.folder}/dalvik"/>
		</antcall>
		<delete>
		  <fileset dir="${temp.folder}" includes="**/*.bin${logExtension}"/>
		</delete>
		<zip destfile="${plugin.destination}/com.ibm.wala.core.testdata_1.0.0.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
		<delete dir="${temp.folder}"/>
	</target>

</project>
