<?xml version="1.0" encoding="UTF-8"?>
<project name="jogamp-androidtasks" basedir=".">
    <dirname property="jogamp-androidtasks.basedir" file="${ant.file.jogamp-androidtasks}"/>
    <taskdef resource="net/sf/antcontrib/antlib.xml">
      <classpath> 
        <pathelement location="${jogamp-androidtasks.basedir}/lib/ant-contrib-1.0b3.jar"/> 
      </classpath>
    </taskdef>

    <!---
        <aapt.signed 
            jarbuilddir="${build}"   // jar build location
            jarbasename="gluegen-rt" // jar base file name
            nativebuilddir="${gluegen.lib.dir}" // native library build location
            nativebasename="gluegen-rt"         // native library base file name "*${nativebasename}*.${native.library.suffix}"
            androidmanifest.path="lib/android/AndroidManifest.xml"
            jarmanifest.path="${build}/Manifest-rt.temp" // optional
            version.code="${gluegen_int_version}"
            version.name="${gluegen.version.plus}" 

            // optional values, for having a valid keystore:
            keystore.file="./my-kstore.jks"  // user supplied keystore
            keystore.alias="mykey01"         // key alias
            keystore.storepass="spwd"        // store pwd
            keystore.keypass="kpwd"          // key pwd
        />

        Even though we have impl. signing w/ an own keystore,
        we strongly discourage users to actually use it in an automated environment!
        Pls sign your apps manually. 
      -->

    <macrodef name="aapt.signed">
      <attribute name="jarbuilddir" />
      <attribute name="jarbasename" />
      <attribute name="nativebuilddir" />
      <attribute name="nativebasename" />
      <attribute name="androidmanifest.path" />
      <attribute name="jarmanifest.path" default="/non.existing.manifest.file"/>
      <attribute name="jarclasspathrefid" default="android.classpath"/>
      <attribute name="version.code" />
      <attribute name="version.name" />
      <attribute name="keystore.file" default="/non.existing.user.keystore.file" />
      <attribute name="keystore.alias" default="debug" />
      <attribute name="keystore.storepass" default="jogamp" />
      <attribute name="keystore.keypass" default="jogamp" />
      <sequential>
        <var name="m.aapt.build.apk" unset="true"/>
        <var name="m.aapt.dex.file" unset="true"/>
        <var name="m.aapt.resource.package.file.name" unset="true"/>
        <var name="m.aapt.signed.file.name" unset="true"/>
        <var name="m.aapt.release.file.name" unset="true"/>
        <var name="m.aapt.keystore.file" unset="true"/>

        <var name="m.aapt.java.encoding" unset="true"/>
        <var name="m.aapt.java.target" unset="true"/>
        <var name="m.aapt.java.source" unset="true"/>

        <property name="m.aapt.build.apk" value="@{jarbuilddir}/@{jarbasename}.apk.d" />
        <property name="m.aapt.dex.file" location="${m.aapt.build.apk}/image/classes.dex" />
        <property name="m.aapt.resource.package.file.name" value="${m.aapt.build.apk}/@{jarbasename}.ap_" />
        <property name="m.aapt.signed.file.name" value="${m.aapt.build.apk}/@{jarbasename}-sign.ap_" />
        <property name="m.aapt.release.file.name" value="@{jarbuilddir}/@{jarbasename}.apk" />

        <property name="m.aapt.java.encoding" value="UTF-8" />
        <property name="m.aapt.java.target" value="1.5" />
        <property name="m.aapt.java.source" value="1.5" />

        <path id="android.classpath">
            <pathelement location="${antlr.jar}" />
            <pathelement location="@{jarbuilddir}/@{jarbasename}.jar" />
            <pathelement location="${env.ANDROID_SDK_HOME}/platforms/android-${env.ANDROID_SDK_VERSION}/android.jar" />
        </path>

        <condition property="m.aapt.keystore.file" value="@{keystore.file}" else="${m.aapt.build.apk}/debug.keystore">
            <available file="@{keystore.file}"/>
        </condition>

        <delete file="${m.aapt.release.file.name}" includeEmptyDirs="true" quiet="true" failonerror="false" />
        <delete dir="${m.aapt.build.apk}" includeEmptyDirs="true" quiet="true" failonerror="false" />

        <mkdir dir="${m.aapt.build.apk}/image/lib/armeabi" />
        <mkdir dir="${m.aapt.build.apk}/image/lib/src" />
        <mkdir dir="${m.aapt.build.apk}/image/lib/classes" />
        <mkdir dir="${m.aapt.build.apk}/image/lib/assets" />
        <copy todir="${m.aapt.build.apk}/image/lib/armeabi">
            <fileset dir="@{nativebuilddir}">
                <include name="*@{nativebasename}*.${native.library.suffix}" />
            </fileset>
        </copy>

        <copy file="@{androidmanifest.path}" tofile="${m.aapt.build.apk}/image/AndroidManifest.xml"/>
        <copy file="@{jarmanifest.path}" failonerror="false" tofile="${m.aapt.build.apk}/image/META-INF/MANIFEST.MF"/>

        <echo>aapt.signed @{jarbasename}: generating Android R.java from the resources...</echo>
        <exec dir="." executable="aapt" logError="true" failonerror="true" failifexecutionfails="true">
            <arg line="package"/>
            <arg line="-v"/>
            <arg line="--debug-mode"/>
            <arg line="-f"/>
            <arg line="-S"/>
            <arg line="lib/android/res"/>
            <arg line="-M"/>
            <arg line="${m.aapt.build.apk}/image/AndroidManifest.xml"/>
            <arg line="-I"/>
            <arg line="${env.ANDROID_SDK_HOME}/platforms/android-${env.ANDROID_SDK_VERSION}/android.jar"/>
            <arg line="-J"/>
            <arg line="${m.aapt.build.apk}/image/lib/src"/>
        </exec>

        <echo>aapt.signed @{jarbasename}: compiling R.java...</echo>
        <javac encoding="${m.aapt.java.encoding}"
            source="${m.aapt.java.source}" target="${m.aapt.java.target}"
            debug="true" extdirs=""
            destdir="${m.aapt.build.apk}/image/lib/classes"
            verbose="true">
            <src path="${m.aapt.build.apk}/image/lib/src" />
            <classpath refid="@{jarclasspathrefid}" />
        </javac>

        <echo>aapt.signed @{jarbasename}: dex'ing</echo>
        <exec dir="." executable="dx" logError="true" failonerror="true" failifexecutionfails="true">
            <arg line="--dex"/>
            <arg line="--output=${m.aapt.dex.file}"/>
            <arg line="@{jarbuilddir}/@{jarbasename}.jar"/>
            <arg line="${m.aapt.build.apk}/image/lib/classes"/>
        </exec>
        
        <path id="android.antlibs">
            <pathelement path="${env.ANDROID_SDK_HOME}/tools/lib/anttasks.jar" />
            <pathelement path="${env.ANDROID_SDK_HOME}/tools/lib/sdklib.jar" />
            <pathelement path="${env.ANDROID_SDK_HOME}/tools/lib/androidprefs.jar" />
            <pathelement path="${env.ANDROID_SDK_HOME}/tools/lib/apkbuilder.jar" />
            <pathelement path="${env.ANDROID_SDK_HOME}/tools/lib/jarutils.jar" />
        </path>

        <echo>aapt.signed @{jarbasename}: packaging</echo>
        <exec dir="." executable="aapt" logError="true" failonerror="true" failifexecutionfails="true">
            <arg line="package"/>
            <!--arg line="-v"/-->
            <arg line="--debug-mode"/>
            <arg line="-f"/>

            <arg line="-S" />
            <arg value="lib/android/res"/>

            <arg line="-A" />
            <arg value="${m.aapt.build.apk}/image/lib/assets"/>

            <arg line="-I" />
            <arg value="${env.ANDROID_SDK_HOME}/platforms/android-${env.ANDROID_SDK_VERSION}/android.jar"/>

            <arg line="--version-code" />
            <arg value="@{version.code}"/>

            <arg line="--version-name" />
            <arg value="@{version.name}"/>

            <arg line="-F" />
            <arg value="${m.aapt.resource.package.file.name}"/>

            <arg line="${m.aapt.build.apk}/image/"/>
        </exec>
        
        <echo>aapt.signed @{jarbasename}: gen temp keystore @{keystore.alias} @ ${m.aapt.build.apk}/debug.keystore</echo>
        <exec dir="." executable="keytool" failonerror="true">
            <arg value="-genkey"/>

            <arg value="-keystore" />
            <arg value="${m.aapt.build.apk}/debug.keystore" />

            <arg value="-alias" />
            <arg value="@{keystore.alias}" />

            <arg value="-dname" />
            <arg value="CN=JogAmp Debug,O=JogAmp,C=DE" />

            <arg value="-keypass" />
            <arg value="@{keystore.keypass}" />

            <arg value="-storepass" />
            <arg value="@{keystore.storepass}" />
        </exec>

        <echo>aapt.signed @{jarbasename}: signing w/ key @{keystore.alias} @ ${m.aapt.keystore.file}</echo>
        <signjar
              jar="${m.aapt.resource.package.file.name}"
              signedjar="${m.aapt.signed.file.name}"
              keystore="${m.aapt.keystore.file}"
              alias="@{keystore.alias}"
              keypass="@{keystore.keypass}"
              storepass="@{keystore.storepass}"
              verbose="false" />

        <echo>aapt.signed @{jarbasename}: zip aligning</echo>
        <exec dir="." executable="${env.ANDROID_SDK_HOME}/tools/zipalign" failonerror="true">
            <arg line="-v" />
            <arg value="-f" />
            <arg value="4" />
            <arg path="${m.aapt.signed.file.name}" />
            <arg path="${m.aapt.release.file.name}" />
        </exec>

        <delete dir="${m.aapt.build.apk}" includeEmptyDirs="true" quiet="true" failonerror="false" />
    </sequential>
  </macrodef>  
</project>