<project name="Compiler" default="compile" basedir=".">
  <property name="cl"      location="cl"      />
  <property name="cup"     location="cup"     />
  <property name="flex"    location="flex"    />
  <property name="src"     location="src"     />
  <property name="java"    location="java"    />
  <property name="classes" location="classes" />
  <property name="dist"    location="dist"    />
  <property name="lib"     location="lib"     />
  <property name="bin"     location="bin"     />
  <property environment="env" />

  <!-- We rely on CUP-10k-TUM, JFlex 1.3.5 and Classgen 1.5pre -->
  <!-- residing in our directory ``bin'' -->
  <path id="binaries">
    <pathelement location="${bin}" />
    <fileset dir="${bin}">
      <include name="**/*.jar" />
      <include name="**/*.zip" />
    </fileset>
    <!-- When the user installed CCK, we use these tool directories -->
    <fileset dir="${env.CCK_HOME}/lib" includes="**/*.jar" />
    <pathelement path="${java.class.path}" />
    <pathelement path="${classes}" />
  </path>

  <path id="libraries">
    <pathelement location="${lib}" />
    <fileset dir="${lib}">
      <include name="**/*.jar" />
      <include name="**/*.zip" />
    </fileset>
    <!-- When the user installed CCK, we use these lib directories -->
    <fileset dir="${env.CCK_HOME}/lib" includes="**/*.jar" />
    <pathelement path="${java.class.path}" />
  </path>

  <taskdef name="jflex" 
           classname="JFlex.anttask.JFlexTask" 
           classpathref="binaries" 
  />
  <!-- We have Classgen 1.5pre -->
  <taskdef name="classgen"
           classname="classgen.AntTask"
           classpathref="binaries"
  />
  <!-- We also use CUP-TUM -->
  <taskdef name="cup" 
           classname="java_cup.anttask.CUPTask" 
           classpathref="binaries"
  />

  <target name="init">
    <mkdir dir="${classes}"/>
    <mkdir dir="${java}"/>
    <mkdir dir="${dist}"/>
  </target>

  <target name="classgen" depends="init">
    <classgen file="${cl}/ast.cl" 
              destdir="${java}" 
              visitor="true"
     />
  </target>

  <target name="cup" depends="classgen">
    <cup srcfile="${cup}/Parser.cup" 
         destdir="${java}" 
         interface="true"
	 parser="Parser"
    />
  </target>

  <target name="jflex" depends="cup">
    <jflex file="${flex}/Scanner.jflex" destdir="${java}" />
  </target>

  <target name="copy_src" depends="jflex">
   <copy todir="${java}">
     <fileset dir="${src}" includes="**/**.java" />
   </copy>
  </target>

  <target name="compile" depends="copy_src">
    <javac srcdir="${java}" destdir="${classes}">
      <classpath refid="libraries" />
    </javac>
  </target>

  <target name="dist" depends="compile">
    <jar jarfile="${dist}/Compiler.jar" basedir="${classes}">
     <manifest>
       <attribute name="Main-Class" value="Parser" />
       <attribute name="Class-Path" value="java-cup-10k-b2-runtime-TUM.jar" />
     </manifest>
    </jar>
  </target>

  <target name="run" depends="dist">
    <java classname="Parser" fork="true">
      <arg value="input.test" />
      <classpath refid="binaries" />
    </java>
  </target>

  <target name="clean">
    <delete dir="${java}" />
    <delete dir="${classes}" />
    <delete dir="${dist}" />
  </target>
</project>

