<!--
  Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
  for details. All rights reserved. Use of this source code is governed by a
  BSD-style license that can be found in the LICENSE file.
 -->
<project default="dist">
  <import file="sources.xml"/>
  <import file="test_sources.xml"/>

  <!--
    The file build.properties does not exist. If provided, properties can be customized.
  -->
  <property file="build.properties" />

  <!--
    Configuration properties.
  -->
  <property name="build.dir" value="out"/>

  <property name="build.classes.dir" value="${build.dir}/classes"/>

  <property name="build.test.classes.dir" value="${build.dir}/test/classes"/>

  <property name="dart_analyzer.jar" value="${build.dir}/dart_analyzer.jar"/>

  <property name="dist.dir" value="${build.dir}/dist"/>

  <property name="test.report.dir" value="${build.dir}/test"/>

  <property name="third_party.dir" value="../third_party"/>

  <property name="test_py" location="../tools/test.py"/>

  <!--
    Define buildtime and runtime classpaths.
  -->
  <path id="classpath.compile">
    <pathelement location="${third_party.dir}/args4j/2.0.12/args4j-2.0.12.jar"/>
    <pathelement location="${third_party.dir}/guava/r13/guava-13.0.1.jar"/>
    <pathelement location="${third_party.dir}/json/r2_20080312/json.jar"/>
  </path>

  <path id="classpath.runtime">
    <path refid="classpath.compile"/>
  </path>

  <path id="classpath.compile.tests">
    <path refid="classpath.compile"/>
    <pathelement location="${build.classes.dir}"/>
    <pathelement location="${third_party.dir}/junit/v4_8_2/junit.jar"/>
  </path>

  <path id="classpath.run.tests">
    <path refid="classpath.compile.tests"/>
    <pathelement location="${build.test.classes.dir}"/>
    <pathelement location="${third_party.dir}/hamcrest/v1_3/hamcrest-core-1.3.0RC2.jar"/>
    <pathelement location="${third_party.dir}/hamcrest/v1_3/hamcrest-generator-1.3.0RC2.jar"/>
    <pathelement location="${third_party.dir}/hamcrest/v1_3/hamcrest-integration-1.3.0RC2.jar"/>
    <pathelement location="${third_party.dir}/hamcrest/v1_3/hamcrest-library-1.3.0RC2.jar"/>
    <pathelement location="${third_party.dir}/fest/fest-util-1.1.6.jar"/>
    <pathelement location="${third_party.dir}/fest/fest-assert-1.4.jar"/>
  </path>

  <target name="compile" description="Compiles all of the java source and copies resources to the classes directory.">
    <!--
      Ensure the necessary subdirectories exist.
    -->
    <mkdir dir="${build.classes.dir}"/>

    <javac destdir="${build.classes.dir}"
           sourcepath=""
           srcdir="java"
           includes="${java_sources}"
           fork="true"
           debug="true"
           source="1.6"
           target="1.6"
           includeAntRuntime="false">
      <classpath refid="classpath.compile"/>
    </javac>
    <!--
      Copy all non-java resources.
    -->
    <copy todir="${build.classes.dir}">
      <filelist refid="java_resources"/>
    </copy>
  </target>

  <!--
    We rely on GYP to call these targets when dependencies change, hence this
    ant file cannot be used standalone.
  -->
  <target name="compile-tests" depends="compile" description="Compiles all of the java tests and copies the resources to the test classes directory." >
    <mkdir dir="${build.test.classes.dir}"/>
    <javac destdir="${build.test.classes.dir}"
           sourcepath=""
           srcdir="javatests"
           includes="${javatests_sources}"
           excludes="com/google/dart/compiler/vm/**"
           fork="true"
           debug="true"
           source="1.6"
           target="1.6"
           includeAntRuntime="false">
      <classpath refid="classpath.compile.tests"/>
    </javac>
    <!--
      Copy the non-java resources.
    -->
    <copy todir="${build.test.classes.dir}">
      <filelist refid="javatests_resources"/>
    </copy>
  </target>

  <target name="dart_analyzer.jar" depends="compile" description="Creates a jar without bundling the dependencies.">
    <jar destfile="${dart_analyzer.jar}" basedir="${build.classes.dir}" 
        manifest="dart_analyzer.mf"/>
  </target>

  <target name="dist" depends="dart_analyzer.jar" 
      description="Create a directory with a standalone distribution.">
    <!--
      Ensure the necessary subdirectories exist.
    -->
    <mkdir dir="${dist.dir}/bin"/>
    <mkdir dir="${dist.dir}/util"/>
    <mkdir dir="${dist.dir}/util/analyzer"/>

    <!--
      Copy the dart jar to the lib folder.
    -->
    <copy file="${dart_analyzer.jar}" todir="${dist.dir}/util/analyzer"/>

    <!--
      Re-root the classpaths from third_party into the util folder of the distro.
    -->
    <pathconvert property="analyzer.classpath.runtime.unix" targetos="unix" refid="classpath.runtime">
      <regexpmapper from="${third_party.dir}/(.*)" to="$DART_ANALYZER_LIBS/\1"/>
    </pathconvert>

    <pathconvert property="analyzer.classpath.runtime.win" targetos="windows" refid="classpath.runtime">
      <regexpmapper from="(.*)third_party\\(.*)" to="%DART_ANALYZER_LIBS%\\\2"/>
    </pathconvert>

    <copy file="scripts/dart_analyzer.sh" tofile="${dist.dir}/bin/dart_analyzer">
      <filterset>
        <filter token="CLASSPATH" value="$DART_ANALYZER_LIBS/dart_analyzer.jar:${analyzer.classpath.runtime.unix}"/>
      </filterset>
    </copy>
    <chmod file="${dist.dir}/bin/dart_analyzer" perm="a+rx"/>

    <copy file="scripts/dart_analyzer.bat" tofile="${dist.dir}/bin/dart_analyzer.bat">
      <filterset>
        <filter
          token="CLASSPATH"
          value="%DART_ANALYZER_LIBS%\dart_analyzer.jar;${analyzer.classpath.runtime.win}"/>
      </filterset>
    </copy>

   <!--
      TODO: The following files are not strictly due to dist, move them out.
    -->
    <copy todir="${build.dir}">
      <fileset dir="scripts">
        <include name="analyzer_metrics.sh"/>
      </fileset>
      <filterset>
        <filter token="CLASSPATH" value="$DART_ANALYZER_LIBS/dart_analyzer.jar:${analyzer.classpath.runtime.unix}"/>
      </filterset>
    </copy>
    <chmod file="${build.dir}/analyzer_metrics.sh" perm="a+rx"/>

    <!--
      Copy of all dependencies to the util folder.
    -->
    <copy todir="${dist.dir}/util/analyzer">
      <path refid="classpath.runtime"/>
      <regexpmapper from="(.*)third_party[/\\](.*)" to="\2"/>
    </copy>
  </target>

  <target name="clean" description="Deletes the build output directory.">
    <delete dir="${build.dir}"/>
    <delete dir="${dist.dir}"/>
  </target>

  <target name="tests.jar" depends="compile-tests">
    <jar destfile="${build.dir}/tests.jar" basedir="${build.test.classes.dir}"/>
  </target>
</project>
