<?xml version="1.0" encoding="UTF-8"?>
<project name="android_rules" default="debug">

    <!--
        This rules file is meant to be imported by the custom Ant task:
            com.android.ant.SetupTask

        The following properties are put in place by the importing task:
            android.jar, android.aidl, aapt, aidl, and dx

        Additionnaly, the task sets up the following classpath reference:
            android.target.classpath
        This is used by the compiler task as the boot classpath.
    -->

    <!-- Custom tasks -->
    <taskdef name="aaptexec"
        classname="com.android.ant.AaptExecLoopTask"
        classpathref="android.antlibs" />

    <taskdef name="xpath"
        classname="com.android.ant.XPathTask"
        classpathref="android.antlibs" />

    <!-- Properties -->

    <!-- Tells adb which device to target. You can change this from the command line
         by invoking "ant -Dadb.device.arg=-d" for device "ant -Dadb.device.arg=-e" for
         the emulator. -->
    <property name="adb.device.arg" value="" />

    <property name="android.tools.dir" location="${sdk.dir}/tools" />
    <!-- Name of the application package extracted from manifest file -->
    <xpath input="AndroidManifest.xml" expression="/manifest/@package"
                output="manifest.package" />

    <!-- Input directories -->
    <property name="source.dir" value="src" />
    <property name="source.absolute.dir" location="${source.dir}" />
    <property name="gen.dir" value="gen" />
    <property name="gen.absolute.dir" location="${gen.dir}" />
    <property name="resource.dir" value="res" />
    <property name="resource.absolute.dir" location="${resource.dir}" />
    <property name="asset.dir" value="assets" />
    <property name="asset.absolute.dir" location="${asset.dir}" />

    <!-- Directory for the third party java libraries -->
    <property name="external.libs.dir" value="libs" />
    <property name="external.libs.absolute.dir" location="${external.libs.dir}" />

    <!-- Directory for the native libraries -->
    <property name="native.libs.dir" value="libs" />
    <property name="native.libs.absolute.dir" location="${native.libs.dir}" />

    <!-- Output directories -->
    <property name="out.dir" value="bin" />
    <property name="out.absolute.dir" location="${out.dir}" />
    <property name="out.classes.dir" value="${out.absolute.dir}/classes" />
    <property name="out.classes.absolute.dir" location="${out.classes.dir}" />

    <!-- Verbosity -->
    <property name="verbose" value="false" />
    <!-- This is needed by emma as it uses multilevel verbosity instead of simple 'true' or 'false'
         The property 'verbosity' is not user configurable and depends exclusively on 'verbose'
         value.-->
    <condition property="verbosity" value="verbose" else="quiet">
        <istrue value="${verbose}" />
    </condition>

    <!-- Tools -->
    <condition property="exe" value=".exe" else=""><os family="windows" /></condition>

    <!-- Emma configuration -->
    <property name="emma.dir" value="${sdk.dir}/tools/lib" />
        <path id="emma.lib">
            <pathelement location="${emma.dir}/emma.jar" />
            <pathelement location="${emma.dir}/emma_ant.jar" />
        </path>
    <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
    <!-- End of emma configuration -->

    <!-- Rules -->

    <!-- Creates the output directories if they don't exist yet. -->
    <target name="-dirs">
        <echo>Creating output directories if needed...</echo>
        <mkdir dir="${resource.absolute.dir}" />
        <mkdir dir="${external.libs.absolute.dir}" />
        <mkdir dir="${gen.absolute.dir}" />
        <mkdir dir="${out.absolute.dir}" />
        <mkdir dir="${out.classes.absolute.dir}" />
    </target>

    <!-- Generates the R.java file for this project's resources. -->
    <target name="-resource-src" depends="-dirs">
        <echo>Generating R.java / Manifest.java from the resources...</echo>
        <aaptexec executable="${aapt}"
                command="package"
                verbose="${verbose}"
                manifest="AndroidManifest.xml"
                androidjar="${android.jar}"
                rfolder="${gen.absolute.dir}">
            <res path="${resource.absolute.dir}" />
        </aaptexec>
    </target>

    <!-- Compiles this project's .java files into .class files. -->
    <target name="compile" depends="-resource-src"
                description="Compiles project's .java files into .class files">
        <!-- If android rules are used for a test project, its classpath should include
             tested project's location -->
        <condition property="extensible.classpath"
                           value="${tested.project.absolute.dir}/bin/classes" else=".">
            <isset property="tested.project.absolute.dir" />
        </condition>
        <javac encoding="ascii" target="1.5" debug="true" extdirs=""
                destdir="${out.classes.absolute.dir}"
                bootclasspathref="android.target.classpath"
                verbose="${verbose}" classpath="${extensible.classpath}">
            <src path="${source.absolute.dir}" />
            <src path="${gen.absolute.dir}" />
            <classpath>
                <fileset dir="${external.libs.absolute.dir}" includes="*.jar" />
            </classpath>
        </javac>
    </target>

    <target name="clean" description="Removes output files created by other targets.">
        <delete dir="${out.absolute.dir}" verbose="${verbose}" />
        <delete dir="${gen.absolute.dir}" verbose="${verbose}" />
    </target>

    <target name="help">
        <!-- displays starts at col 13
              |13                                                              80| -->
        <echo>Android Ant Build. Available targets:</echo>
        <echo>   help:      Displays this help.</echo>
        <echo>   clean:     Removes output files created by other targets.</echo>
        <echo>   compile:   Compiles project's .java files into .class files.</echo>
    </target>
</project>