<?xml version="1.0" encoding="UTF-8"?>

<project name="jME3_ordered" default="default" basedir=".">
    <description>Builds, tests, and runs the project jME3_ordered.</description>
    <import file="nbproject/build-impl.xml"/>
    <!-- <import file="nbproject/profiler-build-impl.xml"/> -->

    <target name="-post-compile" depends="-compile-bullet, -compile-android">
    </target>
    
    <target name="-pre-jar" depends="-prepare-separate-jar-files">
    </target>
    
    <target name="-post-jar" depends="-create-optional-packages">
    </target>

    <!-- compiles the java classes of the native bullet version (works on all systems) -->
    <target name="-compile-bullet">
        <echo message="Compiling Bullet"/>
        <mkdir dir="build/bullet"/>
        <javac classpath="${javac.classpath}${path.separator}${build.classes.dir}" destdir="build/bullet" srcdir="src/bullet"/>
        <jar jarfile="build/jME3-bullet.jar" basedir="build/bullet/" compress="true"/>
    </target>
    
    <!--this target creates the separate jar files for jme3 and modifies the classpath to include them-->
    <target name="-prepare-separate-jar-files">
        <echo message="Preparing jME3 jar files"/>
        <!--separate test classes-->
        <mkdir dir="build/testclasses/"/>
        <move file="build/classes/jme3test" todir="build/testclasses/" failonerror="false"/>
        <move file="build/classes/jme3game" todir="build/testclasses/" failonerror="false"/>
        <jar jarfile="build/jME3-test.jar" basedir="build/testclasses/" compress="true"/>

        <!--separate jbullet physics classes-->
        <mkdir dir="build/jbullet/com/jme3/"/>
        <move file="build/classes/com/jme3/bullet" todir="build/jbullet/com/jme3/" failonerror="false"/>
        <jar jarfile="build/jME3-jbullet.jar" basedir="build/jbullet/" compress="true"/>

        <!--separate assets-->
        <jar jarfile="build/jME3-testdata.jar" basedir="src/test-data" compress="true"/>
        <property location="src/test-data" name="testdata.dir.resolved"/>
        <property location="build/jME3-testdata.jar" name="testdata.jar.resolved"/>

        <!--this sets properties that would normally later be created in the build-impl.xml-->
        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
        <pathconvert property="run.classpath.without.build.classes.dir">
            <path path="${run.classpath}"/>
            <map from="${build.classes.dir.resolved}" to=""/>
            
            <!--replace assets folder in dist classpath-->
            <map from="${testdata.dir.resolved}" to="${testdata.jar.resolved}"/>
            
            <!--add both bullet jar files to dist classpath, will both be in manifest-->
            <path path="build/jME3-jbullet.jar"/>
            <path path="build/jME3-bullet.jar"/>
            <path path="build/jME3-test.jar"/>
        </pathconvert>
    </target>
    
    <!-- compiles the android jar for jME3 -->
    <target name="-compile-android" description="builds the jMonkeyEngine3 distribution for android">
        <echo message="Compiling Android jMonkeyEngin3.jar"/>
        <path id="android-classpath">
            <pathelement path="lib/android/android.jar"/>
            <pathelement path="build/classes"/>
        </path>
        <mkdir dir="build/android"/>
        <javac  target="1.6"
                encoding="UTF-8"
                debug="true"
                deprecation="on"
                srcdir="src/android"
                destdir="build/android"
                classpathref="android-classpath"
                excludes="**/OGLESRenderer.java,**/TestsActivity.java,**/AboutActivity.java"/>
    </target>
    
    <!--separates and packs the o ptional packages-->
    <target name="-create-optional-packages">
        <echo message="Creating optional packages"/>
        <!--native bullet-->
        <mkdir dir="dist/opt/native-bullet"/>
        <mkdir dir="dist/opt/native-bullet/lib"/>
        <ant antfile="src/bullet/native/build.xml" target="bullet-api-diff"/>
        <move file="bullet-api-diff.html" todir="dist/opt/native-bullet" overwrite="true"/>
        <move file="dist/lib/jME3-bullet.jar" todir="dist/opt/native-bullet/lib" overwrite="true"/>
        <move file="dist/lib/jME3-bullet-natives.jar" todir="dist/opt/native-bullet/lib" overwrite="true"/>

        <!--android-->
        <mkdir dir="dist/opt/android"/>
        <jar jarfile="dist/opt/android/jMonkeyEngine3.jar"
                basedir="build/android"
                />
        <jar jarfile="dist/opt/android/jMonkeyEngine3.jar"
                basedir="build/classes"
		excludes="com/jme3/system/JmeSystem*"
                update="true"/>
        <!--<jar jarfile="dist/opt/jME3-android-tests.jar"
		basedir="build/testclasses"/>-->
    </target>

    <!-- compiles the *native binary* of the native bullet version (read bullet-native-build.txt for more info) -->
    <target name="build-bullet-natives" description="uses native build tools to build the bulletjme binary (read bullet-native-build.txt for more info)">
        <ant antfile="src/bullet/native/build.xml" target="build-bullet-natives"/>
    </target>
    
    <!-- puts jme3 jars, libs, source and javadoc in a dated zip file -->
    <target name="dist" depends="clean, jar, javadoc" description="puts jme3 jars, libs, source and javadoc in a dated zip file">
        <!-- create date in the format MM-dd-yyyy -->
        <tstamp>
            <format property="date" pattern="yyyy-MM-dd" locale="en,US"/>
        </tstamp>
        <property name="jme3zip" value="jME3_${date}.zip"/>

        <!-- make zip file -->
        <zip destfile="${jme3zip}">
            <fileset dir=".">
                <include name="TestChooser.exe"/>
                <include name="README.TXT"/>
            </fileset>
            <fileset dir="dist/">
                <include name="jMonkeyEngine3.jar"/>
            </fileset>
            <zipfileset dir="dist/lib" prefix="lib"/>
            <zipfileset dir="dist/opt" prefix="opt"/>
            <zipfileset dir="dist/javadoc" prefix="javadoc"/>
            <zipfileset dir="${src.core.dir}" prefix="source"/>
            <zipfileset dir="${src.core-data.dir}" prefix="source"/>
            <zipfileset dir="${src.core-plugins.dir}" prefix="source"/>
            <zipfileset dir="${src.desktop.dir}" prefix="source"/>
            <zipfileset dir="${src.desktop-fx.dir}" prefix="source"/>
            <zipfileset dir="${src.games.dir}" prefix="source"/>
            <zipfileset dir="${src.jbullet.dir}" prefix="source"/>
            <zipfileset dir="${src.niftygui.dir}" prefix="source"/>
            <zipfileset dir="${src.jogg.dir}" prefix="source"/>
            <zipfileset dir="${src.lwjgl-oal.dir}" prefix="source"/>
            <zipfileset dir="${src.lwjgl-ogl.dir}" prefix="source"/>
            <zipfileset dir="${src.ogre.dir}" prefix="source"/>
            <zipfileset dir="${src.pack.dir}" prefix="source"/>
            <zipfileset dir="${src.jheora.dir}" prefix="source"/>
            <zipfileset dir="${src.test.dir}" prefix="source"/>
            <zipfileset dir="${src.tools.dir}" prefix="source"/>
            <zipfileset dir="${src.xml.dir}" prefix="source"/>
            <zipfileset dir="${src.terrain.dir}" prefix="source"/>
            <zipfileset dir="${src.networking.dir}" prefix="source"/>
        </zip>
    </target>


    <!--
       ****************************************************************
       Only Relevant for building the SDK from here on
       ****************************************************************
      -->

    <!-- convenience target to transfer jme3 libraries to sdk (jMonkeyPlatform) -->
    <target name="update-sdk" depends="jar, javadoc">
        <antcall target="-do-update-sdk" inheritall="true">
            <param name="jmp_dir" value="../sdk/"/>
        </antcall>
    </target>

    <target name="-do-update-sdk">
        <fileset id="jme3-jars" dir="dist/">
            <include name="**/jME3-jbullet.jar"/>
            <include name="**/jME3-bullet.jar"/>
            <include name="**/jME3-bullet-natives.jar"/>
        </fileset>

        <!--clear old files-->
        <delete dir="${jmp_dir}/JME3TestsTemplate/src/"/>
        <delete dir="${jmp_dir}/jme3-core-baselibs/release/modules/ext/"/>
        <delete dir="${jmp_dir}/jme3-core-libraries/release/modules/ext/"/>
        <delete dir="${jmp_dir}/jme3-project-libraries/release/libs/"/>
        <delete dir="${jmp_dir}/jme3-project-baselibs/release/libs/"/>
        <delete dir="${jmp_dir}/jme3-project-testdata/release/libs/"/>

        <!--jMonkeyPlatform jME3 libs-->
        <copy file="${dist.jar}" toDir="${jmp_dir}/jme3-core-baselibs/release/modules/ext/" overwrite="true" failonerror="true" verbose="false"/>
        <copy toDir="${jmp_dir}/jme3-core-baselibs/release/modules/ext/" overwrite="true" failonerror="true" verbose="false" flatten="true">
            <fileset refid="jme3-jars"/>
        </copy>
        <!--natives need to be in jme3 package for jme to work in jMP-->
        <copy file="dist/lib/jME3-lwjgl-natives.jar" toDir="${jmp_dir}/jme3-core-baselibs/release/modules/ext/" overwrite="true" failonerror="true" verbose="false"/>

        <!--Project jME3 libs-->
        <copy file="${dist.jar}" toDir="${jmp_dir}/jme3-project-baselibs/release/libs/" overwrite="true" failonerror="true" verbose="false"/>
        <copy toDir="${jmp_dir}/jme3-project-baselibs/release/libs/" overwrite="true" failonerror="true" verbose="false" flatten="true">
            <fileset refid="jme3-jars"/>
        </copy>

        <!--jMonkeyPlatform external libraries-->
        <copy todir="${jmp_dir}/jme3-core-libraries/release/modules/ext/" overwrite="true" failonerror="true" verbose="false" flatten="true">
            <!--exclude jme3 test data from core-->
            <fileset dir="dist/lib/">
                <exclude name="jME3-**"/>
            </fileset>
        </copy>
        
        <!--Project external libraries-->
        <copy todir="${jmp_dir}/jme3-project-libraries/release/libs/" overwrite="true" failonerror="true" verbose="false" flatten="true">
            <!--exclude jme3 test data from libs-->
            <fileset dir="dist/lib/">
                <exclude name="jME3-**"/>
            </fileset>
            <!--lwjgl is an external library but has the "jME3-" prefix-->
            <fileset dir="dist/lib/">
                <include name="jME3-lwjgl-natives.jar"/>
            </fileset>
        </copy>

        <!--test data-->
        <copy file="dist/lib/jME3-testdata.jar" toDir="${jmp_dir}/jme3-project-testdata/release/libs/" overwrite="true" failonerror="true" verbose="false"/>

        <!--javadoc-->
        <zip destfile="dist/jMonkeyEngine3-javadoc.zip">
            <zipfileset dir="dist/javadoc/"/>
        </zip>
        <copy file="dist/jMonkeyEngine3-javadoc.zip" toDir="${jmp_dir}/jme3-project-baselibs/release/libs/" overwrite="true" failonerror="true" verbose="false"/>

        <!--sources-->
        <zip destfile="dist/jMonkeyEngine3-sources.zip">
            <zipfileset dir="${src.core.dir}"/>
            <zipfileset dir="${src.core-data.dir}"/>
            <zipfileset dir="${src.core-plugins.dir}"/>
            <zipfileset dir="${src.desktop.dir}"/>
            <zipfileset dir="${src.desktop-fx.dir}"/>
            <zipfileset dir="${src.games.dir}"/>
            <zipfileset dir="${src.jbullet.dir}"/>
            <zipfileset dir="${src.niftygui.dir}"/>
            <zipfileset dir="${src.jogg.dir}"/>
            <zipfileset dir="${src.lwjgl-oal.dir}"/>
            <zipfileset dir="${src.lwjgl-ogl.dir}"/>
            <zipfileset dir="${src.ogre.dir}"/>
            <zipfileset dir="${src.pack.dir}"/>
            <zipfileset dir="${src.jheora.dir}"/>
            <zipfileset dir="${src.test.dir}"/>
            <zipfileset dir="${src.tools.dir}"/>
            <zipfileset dir="${src.xml.dir}"/>
            <zipfileset dir="${src.terrain.dir}"/>
            <zipfileset dir="${src.networking.dir}"/>
        </zip>
        <copy file="dist/jMonkeyEngine3-sources.zip" toDir="${jmp_dir}/jme3-project-baselibs/release/libs/" overwrite="true" failonerror="true" verbose="false"/>
        
        <!--examples-->
        <copy todir="${jmp_dir}/JME3TestsTemplate/src/" overwrite="true" failonerror="true" verbose="false">
            <fileset dir="src/test/">
                <exclude name=".svn"/>
            </fileset>
        </copy>
    </target>

    <!--creates properties files containing svn info for the jme3 folders in jMP-->
    <target name="-create-jme3-svn-properties">
        <mkdir dir="${jmp_dir}/build"/>
        <!--update jme3 svn revision-->
        <exec executable="svn" dir=".">
            <arg value="update" />
        </exec>
        <!--jme3 svn properties-->
        <exec executable="svn" dir="." output="${jmp_dir}/build/jme3-svn.properties">
            <arg value="info" />
        </exec>
        <replace file="${jmp_dir}/build/jme3-svn.properties" token=" " value=""/>
        <!--jme3 test data svn properties-->
        <exec executable="svn" dir="src/test-data/" output="${jmp_dir}/build/jme3-testdata-svn.properties">
            <arg value="info" />
        </exec>
        <replace file="${jmp_dir}/build/jme3-testdata-svn.properties" token=" " value=""/>
        <!--jme3 libraries svn properties-->
        <exec executable="svn" dir="lib/" output="${jmp_dir}/build/jme3-lib-svn.properties">
            <arg value="info" />
        </exec>
        <replace file="${jmp_dir}/build/jme3-lib-svn.properties" token=" " value=""/>
        <!--jme3 tests svn properties-->
        <exec executable="svn" dir="src/test/" output="${jmp_dir}/build/jme3-tests-svn.properties">
            <arg value="info" />
        </exec>
        <replace file="${jmp_dir}/build/jme3-tests-svn.properties" token=" " value=""/>
    </target>

    
    <!--
       ****************************************************************
       Only Relevant for building nightly on Hudson server from here on
       ****************************************************************
      -->
      
    <!-- convenience target to transfer jme3 libraries to the jme3-jmp folder on the Hudson build server (jMonkeyPlatform) -->
    <target name="hudson-update-sdk" depends="init">
        <!--update jme3 svn revision info properly-->
        <exec executable="svn" dir=".">
            <arg value="update" />
        </exec>
        <!--update jmp-->
        <antcall target="-do-update-sdk" inheritall="true">
            <param name="jmp_dir" value="../sdk/"/>
        </antcall>
        <!--antcall target="-create-jme3-svn-properties" inheritall="true">
            <param name="jmp_dir" value="../../jme3-jmp/workspace/"/>
        </antcall-->
    </target>

    <!-- copy jme3 zip to jmonkeyengine.com/nightly -->
    <target name="deploy-hudson" depends="dist, build-bullet-natives">
        <copy
            file="${jme3zip}"
            toDir="/var/www/com/nightly" overwrite="true" failonerror="true" verbose="false"
            />
        <copydir
            src="dist/javadoc/" dest="/var/www/org/javadoc/" forceoverwrite="true"
            />
    </target>

</project>