<?xml version="1.0"?>

<project name="rif" default="usage">

<!-- DEFINITIONS -->

  <property name="SOURCES_DIR" value="sources"/>
  <property name="DOCS_DIR" value="docs"/>
  <property name="LIB_DIR" value="lib"/>
  <property name="CLASSES_DIR" value="classes"/>
  <property name="EXAMPLES_DIR" value="examples"/>
  <property name="JACC_JAR" value="${LIB_DIR}/ilog_language_20061023.jar"/>
  <property name="RIF_PATH" value="ilog/rif"/>
  <property name="ZIP_DIR" value=".."/>
  <property name="ZIP_FILE" value="ilog.rif.zip"/>

  <path id="CLASSPATH">
    <pathelement location="${LIB_DIR}"/>
    <pathelement location="${JACC_JAR}"/>
    <pathelement location="${CLASSES_DIR}"/>
  </path>

<!-- TARGETS -->

  <!--
  usage:
  -->

  <target name="usage">
    <echo message=""/>
    <echo message="Known targets:"/>
    <echo message="   ant all     --> generation + compilation + documentation"/>
    <echo message="   ant hrl     --> generation + compilation of HRL"/>
    <echo message="   ant classes --> compilation of generated java files"/>
    <echo message="   ant doc     --> generation of HRL grammar documentation"/>
    <echo message="   ant tidy    --> remove old *.class and generated HRL documentation"/>
    <echo message="   ant parse   --> parse file ${EXAMPLES_DIR}/Test.hrl"/>
    <echo message="   ant zip     --> create a zip file containing all this directory"/>
  </target>

  <!--
  all:
  -->

  <target name="all"
          depends="hrl,classes,doc"
          description="Generate all parsers and compile them"/>
 
  <!--
  hrl:
  -->

  <target name="hrl"
          depends="genhrl,classes"
          description="Generate the HRL parser"/>

  <!--
  doc:
  -->

  <target name="doc"
          depends="dochrl"
          description="Generate the HTML grammar documentation">
    <echo>Done generating HTML grammar documentation - see: ${DOCS_DIR}/HRLDoc/ROOT.html</echo>
  </target>

  <!--
  genhrl:
  -->

  <target name="genhrl" description="Generate the HRL parser">
    <echo>Generating the HRL parser</echo>
    <java classname="ilog.language.syntax.Jacc" dir="${SOURCES_DIR}" fork="true">
      <classpath refid="CLASSPATH"/>
      <arg line="-p Parser HRL"/>
    </java>
  </target>

  <!--
  dochrl:
  -->

  <target name="dochrl" description="Generate the HTML documentation for HRL">
    <echo>Generating the HRL gramar documentation</echo>
    <java classname="ilog.language.syntax.Jacc" dir="${SOURCES_DIR}" fork="true">
      <classpath refid="CLASSPATH"/>
      <arg line="-doc HRL"/>
    </java>
    <move file="${SOURCES_DIR}/HRLDoc/index.html" tofile="${SOURCES_DIR}/HRLDoc/ROOT.html"/>
    <move todir="${DOCS_DIR}/HRLDoc">
      <fileset dir="${SOURCES_DIR}/HRLDoc"/>
    </move>
    <java classname="ilog.language.tools.HiliteCommand" dir="${SOURCES_DIR}" fork="true">
      <classpath refid="CLASSPATH"/>
      <arg line="-c ../${LIB_DIR}/Hilite.Configuration"/>
      <arg line="*.grm"/>
      <arg line="*.java"/>
    </java>
    <move todir="${DOCS_DIR}/HRLDoc">
      <fileset dir="${SOURCES_DIR}">
        <include name="*.html"/>
      </fileset>
  </move>
  </target>

  <!--
  classes:
  -->

  <target name="classes" description="Compile the parser classes">
    <echo>Compiling java files...</echo>
    <javac srcdir="${SOURCES_DIR}" destdir="${CLASSES_DIR}" debug="on" fork="true">
      <classpath refid="CLASSPATH"/>
    </javac>
  </target>

  <!--
  parse:
  -->

  <target name="parse" description="parse a file">
    <echo>Parsing ${EXAMPLES_DIR}/Test.hrl</echo>
    <java classname="ilog.rif.Main" dir="${EXAMPLES_DIR}" fork="true">
      <classpath refid="CLASSPATH"/>
      <arg line="../${EXAMPLES_DIR}/Test.hrl"/>
    </java>
  </target>

  <!--
  tidy:
  -->

  <target name="tidy" description="delete the compiled classes">
    <delete>
      <fileset dir="${DOCS_DIR}" includes="HRLDoc/* HRLDoc/*/* HRLDoc"/>
      <fileset dir="${CLASSES_DIR}/${RIF_PATH}" includes="*.class"/>
    </delete>
  </target>

  <!--
  zip:
  -->

  <target name="zip" description="creates a zip distribution file for this directory">
    <zip update="true" basedir="${ZIP_DIR}/rif" destfile="${ZIP_DIR}/${ZIP_FILE}"/>
  </target>

</project>
