<!--
  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">
  <!--
      EDIT DARTC.XML FIRST.  This file is no longer used to build
      dartc proper.  It is only here to avoid breaking dartium.gyp
      short term.  Change dartc.xml to get everything working, 
      then update this file to match.
  -->

  <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"/>
  </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"
           encoding="UTF-8">
      <classpath refid="classpath.compile"/>
    </javac>
    <!--
      Copy all non-java resources.
    -->
    <copy todir="${build.classes.dir}">
      <filelist refid="java_resources"/>
    </copy>

  </target>

  <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"
           encoding="UTF-8">
      <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 for dartc 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="Creates a directory that contains 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 library 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>

    <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="$DARTC_LIBS/dart_analyzer.jar:${analyzer.classpath.runtime.unix}"/>
      </filterset>
    </copy>
    <chmod file="${build.dir}/analyzer_metrics.sh" perm="a+rx"/>

    <!--
      Copy of all of the dependencies to the lib folder.
    -->
    <copy todir="${dist.dir}/util/analyzer">
      <path refid="classpath.runtime"/>
      <regexpmapper from="${third_party.dir}/(.*)" to="\1"/>
    </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>
