<?xml version="1.0"?>
<project name="Arduino PDE" default="build">

  <path id="class.path">
    <fileset dir="lib">
      <include name="*.jar"/>
    </fileset>
    <pathelement path="${env.JAVA_HOME}/lib/tools.jar"/>
    <pathelement path="../arduino-core/arduino-core.jar"/>
  </path>

  <path id="class.path.test">
    <path refid="class.path"/>
    <pathelement location="bin/"/>
    <fileset dir="test-lib">
      <include name="*.jar"/>
    </fileset>
  </path>

  <target name="clean" description="Clean the build directories">
    <delete dir="bin" />
    <delete dir="test-bin" />
    <delete file="pde.jar" />
  </target>

  <target name="compile" description="Compile sources">
    <condition property="core-built">
      <available file="../arduino-core/arduino-core.jar" />
    </condition>
    <fail unless="core-built" message="Please build the Arduino-core library first and make sure it sits in ../arduino-core/arduino-core.jar" />

    <mkdir dir="bin" />

    <!-- ant seems to nuke ${java.home} for some reason, pointing at the JRE
	 subfolder instead of the actual JDK found at JAVA_HOME. 
	 To avoid this, we grab the actual JAVA_HOME environment variable 
	 and use that to specify the location of tools.jar. -->

    <!-- if someone is better with ant please help clean this up -->
    <property environment="env" />
    <property name="java_home" value="${env.JAVA_HOME}" />

    <condition property="linux"><os family="unix" /></condition>
    <fail if="linux" unless="java_home"
	  message="The JAVA_HOME variable must be set to the location of a full JDK. For instance, on Ubuntu Linux, this might be /usr/lib/jvm/java-6-sun." />

    <condition property="windows"><os family="windows" /></condition>
    <fail if="windows" unless="java_home"
	  message="The JAVA_HOME variable must be set to the location of a full JDK. For instance, on Windows, this might be c:\jdk1.6.0_18." />

    <condition property="work.dir" value="../build/macosx/work/Arduino.app/Contents/Java/">
      <os family="mac"/>
    </condition>
    <condition property="java.additional.library.path" value=".">
      <os family="mac"/>
    </condition>
    <condition property="work.dir" value="../build/windows/work/">
      <os family="windows"/>
    </condition>
    <condition property="java.additional.library.path" value=".">
      <os family="windows"/>
    </condition>
    <condition property="work.dir" value="../build/linux/work/">
      <os family="unix"/>
    </condition>
    <condition property="java.additional.library.path" value="lib">
      <os family="unix"/>
    </condition>

<!--
    <dirname property="blah" file="${java.home}" />
    <echo message="here! ${java.home}/lib/tools.jar or there: ${blah}" />
    <echo message="override ${env.JAVA_HOME}/lib/tools.jar" />
    <fail />
-->
    <javac source="1.8" target="1.8"
	   srcdir="src"
	   destdir="bin"
	   encoding="UTF-8"
	   includeAntRuntime="false"
	   debug="true"
	   classpathref="class.path" />
  </target>

  <target name="test" depends="compile" description="Runs the test">
    <mkdir dir="test-bin"/>

    <javac source="1.8" target="1.8"
           srcdir="test"
           destdir="test-bin"
           encoding="UTF-8"
           includeAntRuntime="false"
           debug="true"
           classpathref="class.path.test">
    </javac>

    <copy todir="test-bin" overwrite="true" verbose="true">
      <fileset dir="test" includes="**/*.zip" />
      <fileset dir="test" includes="**/*.txt" />
      <fileset dir="test" includes="**/*.properties" />
      <fileset dir="test" includes="**/*.ino" />
      <fileset dir="test" includes="**/*.json*" />
      <fileset dir="test" includes="**/*.key" />
      <fileset dir="test" includes="**/*.hex" />
      <fileset dir="test" includes="**/*.pac" />
    </copy>

    <junit printsummary="yes" dir="${work.dir}" fork="true">
      <jvmarg value="-Djava.library.path=${java.additional.library.path}"/>
      <jvmarg value="-DWORK_DIR=."/>
      <jvmarg value="-ea"/>
      <classpath>
        <pathelement location="bin"/>
        <pathelement location="test-bin"/>
        <pathelement location="${work.dir}/lib/jna-4.2.2.jar"/>
        <pathelement location="${work.dir}/lib/jna-platform-4.2.2.jar"/>
        <path refid="class.path.test"/>
      </classpath>

      <formatter type="xml"/>

      <batchtest fork="yes" todir="test-bin">
        <fileset dir="test">
          <include name="**/*Test.java"/>
          <exclude name="**/Abstract*.java"/>
        </fileset>
      </batchtest>
    </junit>

  </target>

  <target name="build" depends="compile" description="Build PDE">
    <jar basedir="bin" destfile="pde.jar" />
  </target>
</project>
