<?xml version="1.0" encoding="UTF-8"?>
<project name="K9" default="help">

    <!-- The local.properties file is created and updated by the 'android' tool.
         It contain the path to the SDK. It should *NOT* be checked in in Version
         Control Systems. -->
    <property file="local.properties"/>

    <!-- The build.properties file can be created by you and is never touched
         by the 'android' tool. This is the place to change some of the default property values
         used by the Ant rules.
         Here are some properties you may want to change/update:

         application-package
             the name of your application package as defined in the manifest. Used by the
             'uninstall' rule.
         source.dir
             the name of the source folder. Default is 'src'.
         out.dir
             the name of the output folder. Default is 'bin'.

         Properties related to the SDK location or the project target should be updated
          using the 'android' tool with the 'update' action.

         This file is an integral part of the build system for your application and
         should be checked in in Version Control Systems.

         -->
    <property file="build.properties"/>

    <!-- The default.properties file is created and updated by the 'android' tool, as well
         as ADT. 
         This file is an integral part of the build system for your application and
         should be checked in in Version Control Systems. -->
    <property file="default.properties"/>

    <!-- Custom Android task to deal with the project target, and import the proper rules.
         This requires ant 1.6.0 or above. -->
    <path id="android.antlibs">
        <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
        <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
        <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
        <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
        <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
	</path>

	<property environment="env"/>

    <taskdef name="setup"
        classname="com.android.ant.SetupTask"
        classpathref="android.antlibs"/>

     <setup />
    <!-- Execute the Android Setup task that will setup some properties specific to the target,
         and import the rules files.
         To customize the rules, copy/paste them below the task, and disable import by setting
         the import attribute to false:
         
         This will ensure that the properties are setup correctly but that your customized
         targets are used.
    -->

    <!-- folder for the java libraries already in AOP but not in the official SDK -->
    <property name="compile-only-libs-folder" value="compile-only-libs" />

    <!-- out folders for a parent project if this project is an instrumentation project -->
    <property name="rclib" value="${out.dir}/K9RemoteControl.jar" />
    <property name="rcdir" value="com/fsck/k9/remotecontrol/**" />

    <!-- A bloody hack, but a useful and quick one -->
    <target name="get-version">
    <exec executable="perl" failonerror="true" outputproperty="version-name" errorproperty="version-error">
        <!-- yes, ant needs &quot; for " in doublequoted strings. -->
        <arg line="-ne'/android:versionName.*?=.*?&quot;(.*?)&quot;/ ? print $1 : undef ' AndroidManifest.xml" />
    </exec>
    <echo>Building version number ${version-name}</echo>
    </target>
    
    <target name="get-version-from-git">
    <exec executable="git" failonerror="true" outputproperty="version-name" errorproperty="version-error">
        <arg line="describe --tags"/>
    </exec>
    <echo>Building version number ${version-name}</echo>
    </target>

    <target name="set-version">
        <echo>Setting version to ${version-name}</echo>
        <fail unless="version-name">You can't set the version without passing -Dversion-name=1.234</fail>
    <exec executable="perl" failonerror="true">
        <arg line="-p -i.bak -e's/(?&lt;=android:versionName=&quot;)(.*?)(?=&quot;)/${version-name}/' AndroidManifest.xml"/>
    </exec>
    <exec executable="perl" failonerror="true">
        <arg line="-p -i.bak -e's/(?&lt;=android:versionCode=&quot;)(\d+)(?=&quot;)/$1+1/e' AndroidManifest.xml" />
    </exec>
    </target>

    <!-- rules -->
    <target name="bump-version" depends="set-version,commit-version,git-tag,git-svn-tag">
        <echo>Bumping K-9 to ${version-name}</echo>
    </target>

    <target name="git-tag">
    <exec executable="git" failonerror="true">
        <arg line="tag ${version-name}"/>
    </exec>
    </target>
    <target name="git-svn-tag">
    <exec executable="git" failonerror="true">
        <arg line="svn tag ${version-name}"/>
    </exec>
    </target>
    <target name="commit-version">
    <exec executable="git" failonerror="true">
        <arg line="commit -m'Bumped manifest to ${version.name}' AndroidManifest.xml"/>
    </exec>
    <exec executable="git" failonerror="true">
        <arg line="svn dcommit"/>
    </exec>
    </target>


    <!-- Create the output directories if they don't exist yet. -->
    <target name="rclib" depends="compile">
        <echo>Creating library ${rclib} for remote control
        applications</echo>

	<jar destfile="${rclib}" basedir="${out.classes.dir}" includes="${rcdir}" />
    </target>

    <target name="upload" depends="clean,get-version,release">
        <echo>Uploading to Google Code using Google::Code::Upload</echo>
        <exec executable="mv" failonerror="true">
            <arg value="${out.release.file}" />
            <arg value="bin/k9-${version-name}-release.apk" />
        </exec>
        <exec executable="googlecode_upload.pl" failonerror="true">
            <arg value="--summary" />
            <arg value="${ant.project.name} ${version-name}"/>
            <arg value="--project" />
            <arg value="k9mail"/>
            <arg value="--user"/>
            <arg value="${gcode-user}" />
            <arg value="--pass"/>
            <arg value="${gcode-pass}" />
            <arg value="--labels"/>
            <arg value="Type-Installer"/>
            <arg value="bin/k9-${version-name}-release.apk" />
        </exec>
    </target>

    <!-- Install the package on the default emulator -->
    <target name="install" depends="debug">
        <echo>Installing ${out-debug-package} onto default emulator...</echo>
        <exec executable="${adb}" failonerror="true">
            <arg value="install" />
            <arg path="${out-debug-package}" />
        </exec>
    </target>

    <!-- Compiles this project's .java files into .class files. -->
    <target name="compile" depends="-resource-src, -aidl"
                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" />
                <fileset dir="compile-only-libs" includes="*.jar" />
            </classpath>
        </javac>
    </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>   debug:     Builds the application and sign it with a debug key.</echo>
        <echo>   release:   Builds the application. The generated apk file must be</echo>
        <echo>              signed before it is published.</echo>
        <echo>   install:   Installs the debug package onto a running emulator or</echo>
        <echo>              device. This can only be used if the application has </echo>
        <echo>              not yet been installed.</echo>
        <echo>   reinstall: Installs the debug package on a running emulator or</echo>
        <echo>              device that already has the application.</echo>
        <echo>              The signatures must match.</echo>
        <echo>   uninstall: uninstall the application from a running emulator or</echo>
        <echo>              device.</echo>
        <echo>   bump-version: ant -Dversion-name=3.123</echo>
        <echo>               Bumps the project version to 3.123,tags and commits it</echo>
        <echo>               (Only works under git-svn)</echo>
    </target>

</project>
