<project name="legend" default="release">

	<!-- Various build properties -->
	<property environment="env" />

	<property name="version" value="stable-1.0" />
	<property name="android-version" value="1.1"/>
	<property name="company-name" value="YOUR COMPANY"/>
	<property name="company-site" value="yourcompany.com"/>
	<property name="product-title" value="Your Company's Product"/>

	<taskdef resource="proguard/ant/task.properties" classpath="${env.PROGUARD_HOME}/lib/proguard.jar" />

	<!-- A macro which checks all appropriate environment varaibles are set. -->
	<macrodef name="checkenv">
		<sequential>
			<fail message="ANDROID_HOME is not set." unless="env.ANDROID_HOME" />
			<fail message="PROGUARD_HOME is not set." unless="env.PROGUARD_HOME" />
		</sequential>
	</macrodef>

	<!-- A macro which runs the dex command on a single jar. -->
	<macrodef name="dex">
		<attribute name="output" />
		<attribute name="jar" />
		<sequential>

			<condition property="dex.executable" value="${env.ANDROID_HOME}/platforms/android-${android-version}/tools/dx.bat">
				<os family="windows" />
			</condition>

			<condition property="dex.executable" value="${env.ANDROID_HOME}/platforms/android-${android-version}/tools/dx">
				<os family="unix" />
			</condition>

			<exec executable="${dex.executable}">
				<arg value="--dex" />
				<arg value="--output=@{output}" />
				<arg value="@{jar}" />
			</exec>

		</sequential>
	</macrodef>

	<!-- Runs the aapt tool with various options -->
	<macrodef name="aapt">
		<attribute name="output" />
		<attribute name="res" default="res" />
		<attribute name="gen" default="gen" />
		<attribute name="assets" default="assets" />
		<attribute name="manifest" default="AndroidManifest.xml" />
		<sequential>
		    <mkdir dir="@{gen}"/>
			<exec executable="${env.ANDROID_HOME}/platforms/android-${android-version}/tools/aapt">
				<arg value="package" />
				<arg value="-f" />
				<arg value="-m" />
				<arg value="-I" />
				<arg value="${env.ANDROID_HOME}/platforms/android-${android-version}/android.jar" />
				<arg value="-J" />
				<arg value="@{gen}" />
				<arg value="-M" />
				<arg value="@{manifest}" />
				<arg value="-A" />
				<arg value="@{assets}" />
				<arg value="-S" />
				<arg value="@{res}" />
				<arg value="-F" />
				<arg value="@{output}" />
			</exec>
		</sequential>
	</macrodef>

	<!-- Runs the APK tool with various options -->
	<macrodef name="apk">
		<attribute name="output" />
		<attribute name="dexfile" />
		<attribute name="resources" />
		<sequential>

			<condition property="apk.executable" value="${env.ANDROID_HOME}/tools/apkbuilder.bat">
				<os family="windows" />
			</condition>

			<condition property="apk.executable" value="${env.ANDROID_HOME}/tools/apkbuilder">
				<os family="unix" />
			</condition>

			<exec executable="${apk.executable}">
				<arg value="@{output}" />
				<arg value="-u"/>
				<arg value="-z" />
				<arg value="@{resources}" />
				<arg value="-f" />
				<arg value="@{dexfile}" />
			</exec>
		</sequential>

	</macrodef>

	<target name="clean">
		<delete dir="bin" />
		<delete dir="dex" />
		<delete file="${ant.project.name}.apk" />
	</target>

	<target name="clean-deps">
	    <!--
	        CLEAN ANY DEPENDENCIES HERE.
	    -->
	</target>

	<target name="clean-all" depends="clean, clean-deps"/>

	<target name="build-deps">
	    <!--
	        IF YOU HAVE TO BUILD DEPENDENT MODULES, THEN SPECIFY THEM HERE.
	    -->
	</target>

	<target name="aapt">
		<mkdir dir="bin" />
		<aapt output="bin/resources.res" />
	</target>

	<target name="build" depends="build-deps, aapt">
		<checkenv />
		<mkdir dir="bin" />
		<echo message="Building using Android SDK: ${env.ANDROID_HOME}" />

		<javac source="1.5" target="1.5" srcdir="gen" destdir="bin">
			<bootclasspath>
				<fileset dir="${env.ANDROID_HOME}/platforms/android-${android-version}">
					<include name="android.jar" />
				</fileset>
			</bootclasspath>
		</javac>

		<javac source="1.5" target="1.5" srcdir="src" destdir="bin">

			<bootclasspath>
				<fileset dir="${env.ANDROID_HOME}/platforms/android-${android-version}">
					<include name="android.jar" />
				</fileset>
			</bootclasspath>

			<classpath>
			    <!--
			        INCLUDE ANY JARS HERE WHICH ARE REQUIRED BY YOUR APPLICATION
			    -->
			</classpath>

		</javac>
	</target>

	<target name="jar" depends="build">
		<tempfile property="temp.file" prefix="jar" destdir="bin" />
		<echo message="Using temporary directory: ${temp.file}" />
		<mkdir dir="${temp.file}" />

		<copy todir="${temp.file}">
			<fileset dir="bin" includes="**/*.class" />
		</copy>

		<unjar dest="${temp.file}">

			<patternset>
				<include name="**/*.class" />
			</patternset>
			<!--
			    FOR BEST OPTIMIZATION RESULTS UNJAR ANY THIRD PARTY LIBRARIES
			    INTO THE TEMPORARY DIRECTORY.  THE MORE PROGUARD KNOWS AT BUILD
			    TIME THE MORE OPPORTUNITY IT HAS TO PERFORM OPTIMIZATIONS ON THE
			    CODE GENERATED BY javac
			-->
		</unjar>

		<jar basedir="${temp.file}" destfile="bin/${ant.project.name}-${version}.jar">
			<manifest>
				<attribute name="Implementation-Vendor" value="${company-name}" />
				<attribute name="Implementation-URL" value="http://www.namazustudios.com/" />
				<attribute name="Implementation-Title" value="The Title" />
				<attribute name="Implementation-Version" value="${version}" />
			</manifest>
		</jar>

		<delete dir="${temp.file}" />
	</target>

	<target name="obfuscate" depends="jar">
		<proguard printmapping="bin/proguard-map.txt" target="1.5" printusage="bin/proguard-usage.txt" verbose="true" optimizationpasses="2">

 			<libraryjar file="${env.ANDROID_HOME}/platforms/android-${android-version}/android.jar" />

			<injar file="bin/${ant.project.name}-${version}.jar" />
			<outjar file="bin/${ant.project.name}-${version}-obf.jar" />

			<keepclasseswithmembernames>
				<method access="native" />
			</keepclasseswithmembernames>

			<keep access="public" name="*" extends="android.app.Activity">
				<method access="public protected" />
			</keep>

			<keep access="public" name="com.namazustudios.legend.level.SaveGameData" />
			<keep access="public" name="com.namazustudios.legend.delegates.SplashScreen" />

			<keepclassmembers extends="java.lang.Enum">
				<method access="public static" type="**[]" name="values" parameters="" />
				<method access="public static" type="**" name="valueOf" parameters="java.lang.String" />
			</keepclassmembers>

            <optimizations filter="!code/simplification/*"/>

            <!--
                IF YOU HAVE ANY CLASSES WHICH CAN BE REMOVED TO IMPROVE PERFORMANCE
                SPECIFY THEM HERE.  OUR CLASS "Debug" PROVIDES PRINTF SUPPORT THROUGHOUT
                THE APPLICATION BUT IT IS TOSSED FROM THE BUILD BY PROGUARD FOR RELEASES.
            -->
			<assumenosideeffects name="com.namazustudios.pisces.utility.Debug">
				<method access="public static" />
			</assumenosideeffects>

		</proguard>

		<copy file="bin/${ant.project.name}-${version}-obf.jar" tofile="bin/${ant.project.name}-${version}.jar" overwrite="true" />

	</target>

	<target name="dex" depends="">
		<echo message="Creating dalvik executable." />
		<echo message="Input jar: ${basedir}/bin/${ant.project.name}-${version}.jar" />
		<echo message="Output dex: from: ${basedir}/bin/classes.dex" />
		<dex jar="${basedir}/bin/${ant.project.name}-${version}.jar" output="${basedir}/bin/classes.dex" />
	</target>

	<target name="apk" depends="dex">
		<apk output="${basedir}/bin/${ant.project.name}.apk" dexfile="${basedir}/bin/classes.dex" resources="${basedir}/bin/resources.res" pisces-assets="${basedir}/pisces-assets" />
	</target>

	<target name="sign" depends="apk">
		<echo message="Signing with official certificate."/>

		<input message="Alias" addproperty="alias"/>

		<input message="Keystore Password (will not be echoed)" addproperty="storepass">
		      <handler classname="org.apache.tools.ant.input.SecureInputHandler" />
		</input>

		<input message="Key Password (will not be echoed)" addproperty="keypass">
		      <handler classname="org.apache.tools.ant.input.SecureInputHandler" />
		</input>

		<signjar jar="bin/${and.project.name}.apk" alias="${alias}" storepass="${storepass}" keypass="${keypass}"/>
	</target>

	<target name="sign-debug" depends="apk">
		<echo message="Signing with debug certificate." />
		
		<signjar jar="bin/${ant.project.name}.apk" keystore="${user.home}/.android/debug.keystore" storepass="android" alias="androiddebugkey" keypass="android"/>
	</target>

	<target name="debug" depends="aapt, build, jar, dex, apk, sign-debug" />

	<target name="qa" depends="aapt, build, jar, obfuscate, dex, apk, sign-debug" />

	<target name="release" depends="aapt, build, jar, obfuscate, dex, apk, sign" />

</project>

