<?xml version="1.0"?>

<project name="COOJA Simulator" default="run" basedir=".">
  <property name="java" location="java"/>
  <property name="build" location="build"/>
  <property name="javadoc" location="javadoc"/>
  <property name="config" location="config"/>
  <property name="dist" location="dist"/>
  <property name="lib" location="lib"/>
  <property name="args" value="" />

  <target name="help">
    <echo>
The COOJA Simulator

  Start COOJA
  > ant run
  Build COOJA (dist/cooja.jar) and all default projects (MSPSim et al)
  > ant jar

  Start COOJA with more memory allocated (for large simulations)
  > ant run_bigmem
  Start COOJA, show error box if process terminates unexpectedly.
  > ant run_errorbox

  Start COOJA and immediately load simulation in sim.csc
  > java -mx512m -jar dist/cooja.jar -quickstart=sim.csc
  Start COOJA without GUI and run simulation in sim.csc
  > java -mx512m -jar dist/cooja.jar -nogui=sim.csc

  Build executable simulation JAR from mysim.csc
  > ant export-jar -DCSC="c:/mysim.csc"
    or
  > ant export-jar -DCSC="/home/user/sim.csc"
    The output JAR is saved to exported.jar
    </echo>
  </target>

  <target name="init">
    <tstamp/>
  </target>
  
  <target name="export-jar" depends="init, jar">
    <java fork="yes" dir="${build}" classname="se.sics.cooja.util.ExecuteJAR" maxmemory="512m">
        <sysproperty key="user.language" value="en"/>
        <arg file="${CSC}"/>
        <arg file="exported.jar"/>
        <env key="LD_LIBRARY_PATH" value="."/>
        <classpath>
          <pathelement path="${build}"/>
          <pathelement location="lib/jdom.jar"/>
          <pathelement location="lib/log4j.jar"/>
        </classpath>
    </java>
  </target>
  
  <target name="javadoc" depends="init">
    <delete dir="${javadoc}" quiet="true"/>
    <mkdir dir="${javadoc}/"/>
    <javadoc destdir="${javadoc}">
      <fileset dir="${java}/" includes="**/*.java"/>
      <classpath>
        <pathelement location="lib/jdom.jar"/>
        <pathelement location="lib/log4j.jar"/>
      </classpath>
    </javadoc>
  </target>

  <target name="compile" depends="init">
    <mkdir dir="${build}"/>
    <javac srcdir="${java}" destdir="${build}" debug="on">
      <classpath>
        <pathelement path="."/>
        <pathelement location="lib/jdom.jar"/>
        <pathelement location="lib/log4j.jar"/>
      </classpath>
    </javac>
  </target>

  <target name="copy configs" depends="init">
    <mkdir dir="${build}"/>
    <copy todir="${build}">
      <fileset dir="${config}"/>
    </copy>
  </target>

  <target name="clean" depends="init">
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
    <ant antfile="build.xml" dir="apps/mrm" target="clean" inheritAll="false"/>
    <ant antfile="build.xml" dir="apps/mspsim" target="clean" inheritAll="false"/>
    <ant antfile="build.xml" dir="apps/avrora" target="clean" inheritAll="false"/>
    <ant antfile="build.xml" dir="apps/serial_socket" target="clean" inheritAll="false"/>
    <ant antfile="build.xml" dir="apps/collect-view" target="clean" inheritAll="false"/>
  </target>

  <target name="run" depends="init, compile, jar, copy configs">
    <java fork="yes" dir="${build}" classname="se.sics.cooja.GUI" maxmemory="512m">
      <sysproperty key="user.language" value="en"/>
      <arg line="${args}"/>
      <env key="LD_LIBRARY_PATH" value="."/>
      <classpath>
        <pathelement path="${build}"/>
        <pathelement location="lib/jdom.jar"/>
        <pathelement location="lib/log4j.jar"/>
      </classpath>
    </java>
  </target>

  <target name="run_errorbox" depends="init, compile, jar, copy configs">
    <java fork="yes" dir="${build}" classname="se.sics.cooja.GUI" maxmemory="512m">
      <sysproperty key="user.language" value="en"/>
      <jvmarg value="-XX:+ShowMessageBoxOnError"/>
      <env key="LD_LIBRARY_PATH" value="."/>
      <classpath>
        <pathelement path="${build}"/>
        <pathelement location="lib/jdom.jar"/>
        <pathelement location="lib/log4j.jar"/>
      </classpath>
    </java>
  </target>

  <target name="runprof" depends="init, compile, jar, copy configs">
    <java fork="yes" dir="${build}" classname="se.sics.cooja.GUI">
      <arg line="${args}"/>
      <env key="LD_LIBRARY_PATH" value="."/>
      <jvmarg line="-agentlib:yjpagent"/>
      <classpath>
        <pathelement path="${build}"/>
        <pathelement location="lib/jdom.jar"/>
        <pathelement location="lib/log4j.jar"/>
      </classpath>
    </java>
  </target>

  <target name="runfree" depends="init, compile, jar, copy configs">
    <java fork="yes" dir="${build}" classname="se.sics.cooja.GUI" maxmemory="1536m">
      <arg line="${args}"/>
      <env key="LD_LIBRARY_PATH" value="."/>
      <classpath>
        <pathelement path="${build}"/>
        <pathelement location="lib/jdom.jar"/>
        <pathelement location="lib/log4j.jar"/>
        <pathelement location="../mspsim/lib/jfreechart-1.0.11.jar"/>
        <pathelement location="../mspsim/lib/jcommon-1.0.14.jar"/>
      </classpath>
    </java>
  </target>

  <target name="run_bigmem" depends="init, compile, jar, copy configs">
    <java fork="yes" dir="${build}" classname="se.sics.cooja.GUI" maxmemory="1536m">
      <arg line="${args}"/>
      <env key="LD_LIBRARY_PATH" value="."/>
      <classpath>
        <pathelement path="${build}"/>
        <pathelement location="lib/jdom.jar"/>
        <pathelement location="lib/log4j.jar"/>
      </classpath>
    </java>
  </target>

  <target name="jar" depends="jar_cooja">
    <ant antfile="build.xml" dir="apps/mrm" target="jar" inheritAll="false"/>
    <ant antfile="build.xml" dir="apps/mspsim" target="jar" inheritAll="false"/>
    <ant antfile="build.xml" dir="apps/avrora" target="jar" inheritAll="false"/>
    <ant antfile="build.xml" dir="apps/serial_socket" target="jar" inheritAll="false"/>
    <ant antfile="build.xml" dir="apps/collect-view" target="jar" inheritAll="false"/>
  </target>

  <target name="run_nogui" depends="init, compile, jar, copy configs">
    <java fork="yes" dir="${build}" classname="se.sics.cooja.GUI" maxmemory="512m">
      <arg line="-nogui=${args}"/>
      <env key="LD_LIBRARY_PATH" value="."/>
      <classpath>
        <pathelement path="${build}"/>
        <pathelement location="lib/jdom.jar"/>
        <pathelement location="lib/log4j.jar"/>
      </classpath>
    </java>
  </target>

  <target name="run_applet" depends="init, compile, jar, copy configs">
    <exec executable="appletviewer" dir="${build}">
      <arg value="-J-Djava.security.policy=cooja.policy"/>
      <arg value="cooja.html"/>
      <env key="LD_LIBRARY_PATH" value="."/>
      <env key="CLASSPATH" path="${build}"/>
    </exec>
  </target>

  <target name="java_version" depends="init">
    <exec executable="javac" dir="${build}">
      <arg value="-version"/>
    </exec>
  </target>

  <target name="jar_cooja" depends="init, compile, copy configs">
    <mkdir dir="${dist}"/>
    <jar destfile="${dist}/cooja.jar" basedir="${build}">
      <manifest>
        <attribute name="Main-Class" value="se.sics.cooja.GUI"/>
        <attribute name="Class-Path" value=". lib/log4j.jar lib/jdom.jar"/>
      </manifest>
    </jar>
    <mkdir dir="${dist}/lib"/>
    <copy todir="${dist}/lib">
      <fileset dir="${lib}"/>
    </copy>
  </target>

</project>