<?xml version="1.0"?>
<project name="Java Mode" default="build">

  <property name="generated" 
	    value="${basedir}/generated/processing/mode/java/preproc" />
  <mkdir dir="${generated}" />

  <property name="grammars" 
	    value="${basedir}/src/processing/mode/java/preproc" />

  <property name="antlr_jar" 
	    value="${basedir}/mode/antlr.jar" />

  <property name="mode_jar"
            value="${basedir}/mode/JavaMode.jar" />

  <classloader taskname="antlr">
    <classpath path="${antlr_jar}" />
  </classloader>

  <target name="clean" description="Clean the build directories">
    <delete dir="bin" />
    <delete file="${mode_jar}" />
    <delete>
      <fileset dir="${generated}">
	<include name="*.java" />
	<include name="*.tokens" />
	<include name="*.txt" />
	<include name="*.g" />
	<include name="*.smap" />
	<include name="*.properties" />
      </fileset>
    </delete>
  </target>

  <target name="preproc" description="Compile ANTLR grammar">
    <antlr target="${grammars}/java15.g" outputdirectory="${generated}">
      <classpath path="${antlr_jar}" />
    </antlr>
    <antlr target="${grammars}/pde.g" 
	   outputdirectory="${generated}" 
	   glib="${grammars}/java15.g">
      <classpath path="${antlr_jar}" />
    </antlr>

    <!-- clean up the warning mess caused by this old antlr version -->
    <!--<property name="uuc" value="@SuppressWarnings({ &quot;unused&quot;, &quot;unchecked&quot;, &quot;cast&quot; })${line.separator}" />-->
    <property name="uucr" value="@SuppressWarnings({ &quot;unused&quot;, &quot;unchecked&quot;, &quot;cast&quot;, &quot;rawtypes&quot;  })${line.separator}" />
    <property name="uc" value="@SuppressWarnings({ &quot;unused&quot;, &quot;cast&quot; })${line.separator}" />

    <!-- need to match against the previous line so that we don't re-add -->
    <replaceregexp 
        file="generated/processing/mode/java/preproc/JavaLexer.java"
        match="(\n\n)(public class JavaLexer .*)" 
        replace="\1${uucr}\2">
    </replaceregexp>

    <replaceregexp 
        file="generated/processing/mode/java/preproc/JavaRecognizer.java"
        match="(\*/\n)(public class JavaRecognizer .*)" 
        replace="\1${uc}\2">
    </replaceregexp>

    <replaceregexp 
        file="generated/processing/mode/java/preproc/PdeLexer.java"
        match="(\n\n)(public class PdeLexer .*)" 
        replace="\1${uucr}\2">
    </replaceregexp>

    <replaceregexp 
        file="generated/processing/mode/java/preproc/PdeRecognizer.java"
        match="(\n\n)(public class PdeRecognizer .*)" 
        replace="\1${uc}\2">
    </replaceregexp>
    <!-- end of workaround for old antlr -->
  </target>

  <target name="compile" depends="preproc" description="Compile sources">
    <condition property="core-built">
      <available file="../core/library/core.jar" />
    </condition>
    <fail unless="core-built" message="Please first build the core library and make sure it is located at ../core/library/core.jar" />

    <condition property="app-built">
      <available file="../app/pde.jar" />
    </condition>
    <fail unless="app-built" message="Please build app first and make sure it is located at ../app/pde.jar" />


    <mkdir dir="bin" />
       
    <!-- in some cases, pde.jar was not getting built
	 https://github.com/processing/processing/issues/1792 -->
    <delete file="${mode_jar}" />

    <!-- env used to set classpath below -->
    <property environment="env" />

    <javac source="1.8"
	   target="1.8"
	   destdir="bin" 
	   excludes="**/tools/format/**" 
	   encoding="UTF-8" 
	   includeAntRuntime="false" 
	   classpath="../core/library/core.jar; 

                      ../app/pde.jar;
                      ../app/lib/ant.jar; 
                      ../app/lib/ant-launcher.jar; 
                      ../app/lib/apple.jar; 
                      ../app/lib/jna.jar; 
                      ../app/lib/jna-platform.jar; 

                      mode/antlr.jar; 
                      mode/classpath-explorer-1.0.jar; 
                      mode/jsoup-1.7.1.jar;
                      mode/org.netbeans.swing.outline.jar; 

                      mode/jdi.jar; 
                      mode/jdimodel.jar; 

                      mode/com.ibm.icu.jar;

                      mode/org.eclipse.core.contenttype.jar;
                      mode/org.eclipse.core.jobs.jar;
                      mode/org.eclipse.core.resources.jar;
                      mode/org.eclipse.core.runtime.jar;
                      mode/org.eclipse.equinox.common.jar;
                      mode/org.eclipse.equinox.preferences.jar;
                      mode/org.eclipse.jdt.core.jar;
                      mode/org.eclipse.osgi.jar;
                      mode/org.eclipse.text.jar"
	   debug="on"
	   nowarn="true"
	   compiler="org.eclipse.jdt.core.JDTCompilerAdapter">
      <src path="src" />
      <src path="generated" />
      <compilerclasspath path="mode/org.eclipse.jdt.core.jar; 
                               mode/jdtCompilerAdapter.jar" />
    </javac>
  </target>

  <target name="build" depends="compile" description="Build PDE">
    <jar basedir="bin" destfile="${mode_jar}" />
  </target>
</project>
