<project name="LWJGL" default="all" basedir=".">

	<property name="build.sysclasspath" value="last" />

	<import file="platform_build/build-definitions.xml"/>
	<import file="platform_build/build-generator.xml"/>
	<import file="platform_build/build-applet.xml"/>
	<import file="platform_build/build-webstart.xml"/>
	<import file="platform_build/build-maven.xml"/>
	<import file="eclipse-update/org.lwjgl.build/build-updatesite.xml"/>

	<!-- ================================================================== -->
	<!-- Everything below this line is targets.								-->
	<!-- Do not modify, unless you know what you're doing 					-->
	<!-- ================================================================== -->

	<!-- ================================================================== -->
	<!-- Initialize build			 										-->
	<!-- ================================================================== -->
	<target name="-initialize">
		<mkdir dir="${lwjgl.bin}"                   taskname="initialiazing bin folder" />
		<mkdir dir="${lwjgl.bin}/lwjgl"             taskname="initialiazing native bin folder" />
		<mkdir dir="${lwjgl.bin}/lwjgles"           taskname="initialiazing native OpenGL ES bin folder"/>
		<mkdir dir="${lwjgl.lib}"                   taskname="initialiazing lib folder" />
		<mkdir dir="${lwjgl.dist}"                  taskname="initialiazing dist folder" />
		<mkdir dir="${lwjgl.docs}/javadoc"          taskname="initialiazing docs folder" />
		<mkdir dir="${lwjgl.res}"                   taskname="initialiazing res folder" />
		<mkdir dir="${lwjgl.temp}"                  taskname="initialiazing temp folder" />
		<mkdir dir="${lwjgl.temp}/jar"              taskname="initialiazing temp/jar folder" />
		<mkdir dir="${lwjgl.temp}/doc"              taskname="initialiazing temp/doc folder" />
		<mkdir dir="${lwjgl.temp}/res"              taskname="initialiazing temp/res folder" />
		<mkdir dir="${lwjgl.temp}/native"           taskname="initialiazing temp/native folder" />
		<mkdir dir="${lwjgl.temp}/native/windows"   taskname="initialiazing temp/windows folder" />
		<mkdir dir="${lwjgl.temp}/native/linux"     taskname="initialiazing temp/linux folder" />
		<mkdir dir="${lwjgl.temp}/native/freebsd"   taskname="initialiazing temp/freebsd folder" />
		<mkdir dir="${lwjgl.temp}/native/macosx"    taskname="initialiazing temp/macosx folder" />
		<mkdir dir="${lwjgl.temp}/native/solaris"   taskname="initialiazing temp/solaris folder" />
	</target>

	<!-- Cleans up any files created during the execution of this script -->
	<target name="clean" description="Cleans all directories controlled by this ant script" depends="clean-java, clean-native"/>

    <!-- Cleans up any non-native files created during the execution of this script -->
    <target name="clean-java" description="Cleans non-native files generated by this ant script" depends="clean-generated">
        <delete dir="${lwjgl.temp}" quiet="true" failonerror="false" taskname="cleaning temp folder" />
        <delete dir="${lwjgl.docs}/javadoc" quiet="true" failonerror="false" taskname="cleaning javadoc folder" />
        <!-- Delete java classes only to avoid unnecessary native recompilation -->
        <delete dir="${lwjgl.bin}/org" quiet="true" failonerror="false" taskname="cleaning bin folder" />
    </target>

    <!-- Useful when we need to force native recompilation -->
    <target name="clean-native" description="Cleans native files generated by this ant script" depends="clean-generated-native">
        <delete dir="${lwjgl.bin}/lwjgl" quiet="true" failonerror="false" taskname="cleaning native bin folder" />
	    <delete dir="${lwjgl.bin}/lwjgles" quiet="true" failonerror="false" taskname="cleaning native OpenGL ES bin folder"/>
    </target>

	<!-- Creates a distribution of LWJGL -->
	<target name="release" description="Creates a distribution of LWJGL using supplied native binaries">
		<!-- Warn user -->
        <echo message="Before running the release target, please manually compile all platforms and place required files in ${lwjgl.lib}/windows, ${lwjgl.lib}/linux, ${lwjgl.lib}/freebsd and ${lwjgl.lib}/macosx${line.separator}Missing files will result in a successfull built, but with incomplete release zips"/>
        <input
            message="All data in the ${lwjgl.dist} folder will be deleted. Continue? "
            validargs="yes,no"
            addproperty="do.delete"
        />
        <condition property="do.abort">
            <equals arg1="no" arg2="${do.delete}"/>
        </condition>
        <fail if="do.abort">Build aborted by user.</fail>

        <!-- prepare -->
        <delete dir="${lwjgl.dist}" quiet="true" failonerror="false" />
        <antcall target="clean-java" />
        <antcall target="-initialize" />

        <!-- compile and create debug jars -->
        <antcall target="generate-debug" />
        <antcall target="compile" />
        <antcall target="-createdebugjars" />

		<!-- Generator will skip all templates if we don't clean -->
		<delete dir="${lwjgl.bin}/org" quiet="true" failonerror="false" taskname="cleaning bin folder" />

        <!-- compile and create jars -->
        <antcall target="generate-all" />
        <antcall target="compile" />
        <antcall target="-createjars" />

        <antcall target="-jars_NoDEP" />
        <antcall target="javadoc" />
        <antcall target="applet-release" />

        <!-- copy resources to res folder -->
        <copy todir="${lwjgl.temp}/res">
            <fileset dir="res"/>
        </copy>

  	    <!-- copy docs -->
 		<copy todir="${lwjgl.temp}/doc">
    	<fileset dir="${lwjgl.docs}">
    		<patternset refid="lwjgl-docs.fileset" />
    	</fileset>
      	</copy>

		<!-- create distribution from files in libs/ and temp/ -->
		<antcall target="-distribution_javadoc" />
		<antcall target="-distribution_source" />
		<antcall target="-distribute" />
	</target>

	<target name="all" description="Creates the Java archives and the natives for the current platform" depends="jars, compile_native"/>

	<!-- Create ONLY the jar archives -->
	<target name="jars" description="Creates the Java archives ONLY and places them in libs/" depends="-initialize, generate-all, compile, -createjars">
		<antcall target="-jars_NoDEP" />
	</target>

	<!-- Create ONLY the jar archives for the ES build -->
	<target name="jars_es" description="Creates the Java archives ONLY for the ES build and places them in libs/"
	        depends="-initialize, generate-all, compile, -createjars_es">
		<antcall target="-jars_NoDEP"/>
	</target>

	<target name="-jars_NoDEP">
		<move todir="libs/">
			<fileset dir="${lwjgl.temp}/jar">
				<include name="*.jar"/>
			</fileset>
		</move>
	</target>

	<!-- Packages the java files -->
	<target name="-createdebugjars">
		<!-- Create lwjgl.jar -->
		<jar destfile="${lwjgl.temp}/jar/lwjgl-debug.jar" taskname="lwjgl-debug.jar">
			<fileset refid="lwjgl.fileset" />
			<fileset refid="lwjgl.fileset.dependencies"/>
			<manifest>
				<attribute name="Sealed" value="true"/>
			</manifest>
		</jar>
	</target>

	<!-- Packages the java files -->
	<target name="-createjars">
		<!-- Create lwjgl.jar -->
		<jar destfile="${lwjgl.temp}/jar/lwjgl.jar" taskname="lwjgl.jar">
			<fileset refid="lwjgl.fileset" />
			<fileset refid="lwjgl.fileset.dependencies"/>
			<manifest>
				<attribute name="Sealed" value="true"/>
			</manifest>
		</jar>

		<!-- Create lwjgl_util_applet.jar -->
		<jar destfile="${lwjgl.temp}/jar/lwjgl_util_applet.jar" taskname="lwjgl_util_applet.jar">
			<fileset dir="${lwjgl.res}" includes="applet*"/>
			<fileset refid="lwjgl_util_applet.fileset" />
			<manifest>
				<attribute name="Sealed" value="true"/>
			</manifest>
		</jar>

		<!-- Create lwjgl_test.jar -->
		<jar destfile="${lwjgl.temp}/jar/lwjgl_test.jar" taskname="lwjgl_test.jar">
			<fileset refid="lwjgl_test.fileset" />
			<fileset refid="lwjgl_test_extra.fileset" />
		</jar>

		<!-- Create lwjgl_util.jar -->
		<jar destfile="${lwjgl.temp}/jar/lwjgl_util.jar" taskname="lwjgl_util.jar">
			<fileset refid="lwjgl_util.fileset" />
		</jar>
	</target>

	<!-- Packages the java files for the ES build -->
	<target name="-createjars_es">
		<!-- ================================================================== -->
		<!-- Generate a list of the OpenGL extension classes					-->
		<!-- ================================================================== -->
		<fileset id="opengl-template-fileset" dir="${lwjgl.src}/generated/org/lwjgl/opengl" includes="${opengl-template-pattern}"/>
		<property name="opengl-template-files" refid="opengl-template-fileset"/>

		<tempfile property="temp.file"/>
		<echo file="${temp.file}" message="${opengl-template-files}" taskname=""/>

		<loadfile srcfile="${temp.file}" property="opengl-template-classes">
			<filterchain>
				<tokenfilter delimoutput=",">
					<stringtokenizer delims=";"/>
					<replaceregex pattern="(.+)[.]java"
					              replace="org/lwjgl/opengl/\1.class"/>
				</tokenfilter>
			</filterchain>
		</loadfile>

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

		<!-- Create lwjgl.jar -->
		<jar destfile="${lwjgl.temp}/jar/lwjgl.jar" taskname="lwjgl.jar">
			<!-- Files to include in the lwjgl.jar file, for the ES build -->
			<fileset dir="${lwjgl.bin}" excludes="${opengl-template-classes}">
				<patternset id="lwjgl_es.package.pattern">
					<include name="org/**/*"/>
					<exclude name="org/lwjgl/d3d/**"/>
					<exclude name="org/lwjgl/test/**"/>
					<exclude name="org/lwjgl/util/**"/>
					<exclude name="org/lwjgl/examples/**"/>
				</patternset>
			</fileset>

			<manifest>
				<attribute name="Sealed" value="true"/>
			</manifest>
		</jar>

		<!-- Create lwjgl_test.jar -->
		<jar destfile="${lwjgl.temp}/jar/lwjgl_test.jar" taskname="lwjgl_test.jar">
			<fileset refid="lwjgl_test_es.fileset"/>
		</jar>
	</target>

	<!-- Distributes files  -->
	<target name="-distribute">
		<delete>
			<fileset dir="${lwjgl.temp}/native/" includes="**/*"/>
		</delete>

		<copy todir="${lwjgl.temp}/jar">
			<fileset dir="${lwjgl.lib}/" includes="*.jar"/>
		</copy>
		<copy todir="${lwjgl.temp}/native/windows">
			<fileset dir="${lwjgl.lib}/windows">
				<patternset refid="lwjgl-windows.fileset" />
			</fileset>
		</copy>
		<copy todir="${lwjgl.temp}/native/linux">
			<fileset dir="${lwjgl.lib}/linux">
				<patternset refid="lwjgl-linux.fileset" />
			</fileset>
		</copy>
		<copy todir="${lwjgl.temp}/native/freebsd" failonerror="false">
			<fileset dir="${lwjgl.lib}/freebsd">
				<patternset refid="lwjgl-freebsd.fileset" />
			</fileset>
		</copy>
		<copy todir="${lwjgl.temp}/native/macosx">
			<fileset dir="${lwjgl.lib}/macosx">
				<patternset refid="lwjgl-macosx.fileset" />
			</fileset>
		</copy>
		<copy todir="${lwjgl.temp}/native/solaris">
			<fileset dir="${lwjgl.lib}/solaris">
				<patternset refid="lwjgl-solaris.fileset" />
			</fileset>
		</copy>

		<!-- create base package -->
		<zip destfile="${lwjgl.dist}/lwjgl-${lwjgl.version}.zip">
			<zipfileset dir="${lwjgl.temp}" prefix="lwjgl-${lwjgl.version}/">
				<patternset refid="lwjgl_base"/>
			</zipfileset>
		</zip>

		<!-- create applet package -->
		<zip destfile="${lwjgl.dist}/lwjgl_applet-${lwjgl.version}.zip">
			<zipfileset dir="." prefix="lwjgl_applet-${lwjgl.version}/">
				<patternset refid="lwjgl_applet"/>
			</zipfileset>
		</zip>
	</target>

	<!-- Creates a versioned distribution of javadocs -->
	<target name="-distribution_javadoc">
		<zip destfile="${lwjgl.dist}/lwjgl-docs-${lwjgl.version}.zip" basedir="${lwjgl.docs}" includes="javadoc/**" />
	</target>

	<!-- Creates a versioned distribution of the source code -->
	<target name="-distribution_source">
		<zip destfile="${lwjgl.dist}/lwjgl-source-${lwjgl.version}.zip">
			<fileset refid="lwjgl.source.fileset" />
		</zip>
	</target>

	<!-- Generates the native headers from source files -->
	<target name="headers" description="invokes javah on java classes" depends="compile">
		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/linux">
			<class name="org.lwjgl.LinuxSysImplementation" />
			<class name="org.lwjgl.opengl.LinuxEvent" />
			<class name="org.lwjgl.opengl.LinuxMouse" />
			<class name="org.lwjgl.opengl.LinuxKeyboard" />
			<class name="org.lwjgl.opengl.LinuxDisplay" />
			<class name="org.lwjgl.opengl.LinuxPeerInfo" />
		</javah>

		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/linux/opengl">
			<class name="org.lwjgl.opengl.LinuxPbufferPeerInfo"/>
			<class name="org.lwjgl.opengl.LinuxDisplayPeerInfo"/>
			<class name="org.lwjgl.opengl.LinuxAWTGLCanvasPeerInfo"/>
			<class name="org.lwjgl.opengl.LinuxContextImplementation"/>
			<class name="org.lwjgl.opengl.LinuxCanvasImplementation"/>
		</javah>

		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows">
			<class name="org.lwjgl.WindowsSysImplementation"/>
			<class name="org.lwjgl.opengl.WindowsKeyboard" />
			<class name="org.lwjgl.opengl.WindowsRegistry" />
			<class name="org.lwjgl.opengl.WindowsDisplay"/>
			<class name="org.lwjgl.opengl.WindowsDisplayPeerInfo"/>
			<class name="org.lwjgl.opengl.WindowsAWTGLCanvasPeerInfo"/>
		</javah>

		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows/opengl">
			<class name="org.lwjgl.opengl.WindowsPbufferPeerInfo"/>
			<class name="org.lwjgl.opengl.WindowsPeerInfo"/>
			<class name="org.lwjgl.opengl.WindowsContextImplementation"/>
		</javah>

		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows/opengles">
			<class name="org.lwjgl.opengl.WindowsPeerInfo"/>
		</javah>

		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/macosx">
			<class name="org.lwjgl.MacOSXSysImplementation" />
			<class name="org.lwjgl.opengl.MacOSXCanvasPeerInfo" />
			<class name="org.lwjgl.opengl.MacOSXPeerInfo" />
			<class name="org.lwjgl.opengl.MacOSXPbufferPeerInfo" />
			<class name="org.lwjgl.opengl.MacOSXDisplay" />
			<class name="org.lwjgl.opengl.MacOSXContextImplementation" />
			<class name="org.lwjgl.opengl.MacOSXNativeKeyboard" />
			<class name="org.lwjgl.opengl.MacOSXNativeMouse" />
			<class name="org.lwjgl.opengl.MacOSXMouseEventQueue" />
		</javah>

		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}">
			<class name="org.lwjgl.opengl.AWTSurfaceLock" />
			<class name="org.lwjgl.DefaultSysImplementation" />
			<class name="org.lwjgl.input.Cursor" />
			<class name="org.lwjgl.input.Keyboard" />
			<class name="org.lwjgl.input.Mouse" />
			<class name="org.lwjgl.openal.AL" />
			<class name="org.lwjgl.opencl.CL" />
            <class name="org.lwjgl.opencl.CallbackUtil" />
            <class name="org.lwjgl.BufferUtils" />
		</javah>

		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}/opengl">
			<class name="org.lwjgl.opengl.GLContext"/>
			<class name="org.lwjgl.opengl.Pbuffer"/>
			<class name="org.lwjgl.opengl.CallbackUtil"/>
			<class name="org.lwjgl.opengl.NVPresentVideoUtil"/>
			<class name="org.lwjgl.opengl.NVVideoCaptureUtil"/>
		</javah>

		<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}/opengles">
			<class name="org.lwjgl.opengles.EGL"/>
			<class name="org.lwjgl.opengles.EGLKHRFenceSync"/>
			<class name="org.lwjgl.opengles.EGLKHRReusableSync"/>
			<class name="org.lwjgl.opengles.EGLNVSync"/>
			<class name="org.lwjgl.opengles.GLContext"/>
			<class name="org.lwjgl.opengles.CallbackUtil"/>
		</javah>
	</target>

	<target name="touch-version">
		<touch file="${lwjgl.src.native}/windows/org_lwjgl_opengl_Display.c"/>
		<touch file="${lwjgl.src.native}/linux/org_lwjgl_opengl_Display.c"/>
		<touch file="${lwjgl.src.native}/macosx/org_lwjgl_opengl_Display.m"/>
	</target>

	<target name="version-mismatch">
		<loadfile srcfile="${lwjgl.src}/java/org/lwjgl/WindowsSysImplementation.java" property="lwjgl.java.windows.version">
			<filterchain>
				<tokenfilter>
	    		<containsstring contains="JNI_VERSION ="/>
				</tokenfilter>
			</filterchain>
		</loadfile>
		<loadfile srcfile="${lwjgl.src}/java/org/lwjgl/LinuxSysImplementation.java" property="lwjgl.java.linux.version">
			<filterchain>
				<tokenfilter>
	    		<containsstring contains="JNI_VERSION ="/>
				</tokenfilter>
			</filterchain>
		</loadfile>
		<loadfile srcfile="${lwjgl.src}/java/org/lwjgl/MacOSXSysImplementation.java" property="lwjgl.java.macosx.version">
			<filterchain>
				<tokenfilter>
	    		<containsstring contains="JNI_VERSION ="/>
				</tokenfilter>
			</filterchain>
		</loadfile>
		<loadfile srcfile="${lwjgl.src.native}/windows/org_lwjgl_WindowsSysImplementation.h" property="lwjgl.native.windows.version">
			<filterchain>
				<tokenfilter>
	    		<containsstring contains="#define org_lwjgl_WindowsSysImplementation_JNI_VERSION"/>
				</tokenfilter>
			</filterchain>
		</loadfile>
		<loadfile srcfile="${lwjgl.src.native}/linux/org_lwjgl_LinuxSysImplementation.h" property="lwjgl.native.linux.version">
			<filterchain>
				<tokenfilter>
	    		<containsstring contains="#define org_lwjgl_LinuxSysImplementation_JNI_VERSION"/>
				</tokenfilter>
			</filterchain>
		</loadfile>
		<loadfile srcfile="${lwjgl.src.native}/macosx/org_lwjgl_MacOSXSysImplementation.h" property="lwjgl.native.macosx.version">
			<filterchain>
				<tokenfilter>
	    		<containsstring contains="#define org_lwjgl_MacOSXSysImplementation_JNI_VERSION"/>
				</tokenfilter>
			</filterchain>
		</loadfile>
		<echo>
			lwjgl.java.windows.version = ${lwjgl.java.windows.version}
			lwjgl.native.windows.version = ${lwjgl.native.windows.version}
			lwjgl.java.linux.version = ${lwjgl.java.linux.version}
			lwjgl.native.linux.version = ${lwjgl.native.linux.version}
			lwjgl.java.freebsd.version = ${lwjgl.java.linux.version}
			lwjgl.native.freebsd.version = ${lwjgl.native.linux.version}
			lwjgl.java.macosx.version = ${lwjgl.java.macosx.version}
			lwjgl.native.macosx.version = ${lwjgl.native.macosx.version}
		</echo>
	</target>

	<macrodef name="version-check">
	  <attribute name="platform"/>
	  <sequential>
			<java classname="org.lwjgl.test.NativeTest" logError="false" resultproperty="nativetest.res" outputproperty="nativetest.out" errorproperty="nativetest.err" fork="true">
				<jvmarg value="-Djava.library.path=libs/@{platform}"/>
                <jvmarg value="-Dorg.lwjgl.util.Debug=true"/>
	    	<classpath>
	      	<pathelement path="${lwjgl.bin}"/>
	        <pathelement path="${java.class.path}"/>
	      </classpath>
	    </java>

	    <fail message="Unable to load native library: ${nativetest.err}">
	     <condition>
	       <not>
	         <equals arg1="OK" arg2="${nativetest.out}"/>
	       </not>
	     </condition>
	   </fail>

	   <echo message="Successfully executed NativeTest"/>
		</sequential>
	</macrodef>

	<!-- Compiles the Java source code -->
	<target name="compile" description="Compiles the java source code" depends="-initialize">
		<javac debug="yes" destdir="${lwjgl.bin}" source="1.5" target="1.5" classpath="${lwjgl.lib}/jinput.jar:${lwjgl.lib}/AppleJavaExtensions.jar:${lwjgl.lib}/asm-debug-all.jar" taskname="core">
            <!--<compilerarg value="-Xlint:unchecked"/>-->
			<src path="${lwjgl.src}/java/"/>
			<src path="${lwjgl.src}/generated/"/>
			<include name="org/lwjgl/*.java"/>
			<include name="org/lwjgl/input/**"/>
			<include name="org/lwjgl/opengl/**"/>
			<include name="org/lwjgl/opengles/**"/>
			<include name="org/lwjgl/openal/**"/>
            <include name="org/lwjgl/opencl/**"/>
			<include name="org/lwjgl/util/**"/>
			<exclude name="org/lwjgl/util/generator/**"/>
		</javac>
		<javac debug="yes" srcdir="${lwjgl.src}/java/" destdir="${lwjgl.bin}" includes="org/lwjgl/test/**" source="1.5" target="1.5" taskname="test" />
		<javac debug="yes" srcdir="${lwjgl.src}/java/" destdir="${lwjgl.bin}" includes="org/lwjgl/examples/**" source="1.5" target="1.5" taskname="examples" />
	</target>

	<target name="compile_native" depends="-initialize, headers, touch-version, version-mismatch" description="Compiles the native files">
		<condition property="lwjgl.platform.windows">
			<os family="windows" />
		</condition>
		<antcall target="-compile_native_win32" />

		<condition property="lwjgl.platform.linux">
			<os name="Linux" />
		</condition>
		<antcall target="-compile_native_linux" />

		<condition property="lwjgl.platform.freebsd">
			<os name="FreeBSD" />
		</condition>
		<antcall target="-compile_native_freebsd" />

		<condition property="lwjgl.platform.solaris">
			<os name="SunOS" />
		</condition>
		<antcall target="-compile_native_solaris" />

		<condition property="lwjgl.platform.macosx">
			<os name="Mac OS X" />
		</condition>
		<antcall target="-compile_native_macosx" />
	</target>

	<!-- Compiles LWJGL on Win32 platforms  -->
	<target name="-compile_native_win32" if="lwjgl.platform.windows">
		<ant antfile="platform_build/windows_ant/build.xml" inheritAll="false"/>
		<copy todir="${lwjgl.lib}/windows">
			<fileset dir="${lwjgl.bin}/lwjgl" includes="lwjgl*.dll"/>
		</copy>
		<version-check platform="windows"/>
	</target>

	<!-- Compiles LWJGL on Linux platforms -->
	<target name="-compile_native_linux" if="lwjgl.platform.linux">
		<ant antfile="platform_build/linux_ant/build.xml" inheritAll="false"/>
		<copy todir="${lwjgl.lib}/linux">
			<fileset dir="${lwjgl.bin}/lwjgl" includes="liblwjgl*.so"/>
		</copy>
		<!-- headless issues <version-check platform="linux"/> -->
	</target>

	<!-- Compiles LWJGL on FreeBSD platforms -->
	<target name="-compile_native_freebsd" if="lwjgl.platform.freebsd">
		<ant antfile="platform_build/bsd_ant/build.xml" inheritAll="false"/>
		<copy todir="${lwjgl.lib}/freebsd">
			<fileset dir="${lwjgl.bin}/lwjgl" includes="liblwjgl*.so"/>
		</copy>
	</target>

	<!-- Compiles LWJGL on solaris platforms -->
	<target name="-compile_native_solaris" if="lwjgl.platform.solaris">
		<!-- Reusing the linux ant task, but copy the output to solaris -->
		<ant antfile="platform_build/linux_ant/build.xml" inheritAll="false"/>
		<copy todir="${lwjgl.lib}/solaris">
			<fileset dir="${lwjgl.bin}/lwjgl" includes="liblwjgl*.so"/>
		</copy>
		<version-check platform="solaris"/>
	</target>

	<!-- Compiles LWJGL on Mac platforms -->
	<target name="-compile_native_macosx" if="lwjgl.platform.macosx">
		<ant antfile="platform_build/macosx_ant/build.xml" inheritAll="false"/>
		<copy file="${lwjgl.bin}/lwjgl/liblwjgl.jnilib" todir="${lwjgl.lib}/macosx"/>
		<version-check platform="macosx"/>
	</target>

	<target name="compile_native_es" depends="-initialize, headers, touch-version, version-mismatch" description="Compiles the native files">
		<condition property="lwjgl.platform.windows">
			<os family="windows"/>
		</condition>
		<antcall target="-compile_native_win32_es"/>

		<condition property="lwjgl.platform.linux">
			<os name="Linux"/>
		</condition>
		<antcall target="-compile_native_linux_es"/>
	</target>

	<!-- Compiles LWJGL ES on Win32 platforms  -->
	<target name="-compile_native_win32_es" if="lwjgl.platform.windows">
		<ant antfile="platform_build/windows_ant/build_es.xml" inheritAll="false"/>
		<copy todir="${lwjgl.lib}/windows">
			<fileset dir="${lwjgl.bin}/lwjgles" includes="lwjgl*.dll"/>
		</copy>
	</target>

	<!-- Compiles LWJGL ES on Linux platforms -->
	<target name="-compile_native_linux_es" if="lwjgl.platform.linux">
		<ant antfile="platform_build/linux_ant/build_es.xml" inheritAll="false"/>
		<copy todir="${lwjgl.lib}/linux">
			<fileset dir="${lwjgl.bin}/lwjgles" includes="liblwjgl*.so"/>
		</copy>
	</target>

	<target name="repack200" description="Pack200-repack a jar file">
		<pack200 src="${input}" destfile="${output}" repack="true"/>
	</target>

	<target name="pack200" description="Pack200 a jar file">
     <pack200 src="${input}" destfile="${output}"/>
	</target>

	<target name="lzma" description="LZMA compress a file">
  	<java fork="true" classname="SevenZip.LzmaAlone">
			<classpath>
      	<pathelement location="platform_build/JLzma.jar"/>
      </classpath>
      <jvmarg value="-Xmx512m"/>
    	<arg value="e"/>
    	<arg value="${input}"/>
    	<arg value="${output}"/>
   	</java>
	</target>

	<target name="compress-sign-class">
		<antcall target="repack200">
			<param name="input" value="${dir}${jarfile}.jar"/>
			<param name="output" value="${dir}${jarfile}-repack.jar"/>
		</antcall>
		<signjar jar="${dir}${jarfile}-repack.jar" alias="${alias}" keystore="${keystore}" storepass="${password}"/>
		<antcall target="pack200">
			<param name="input" value="${dir}${jarfile}-repack.jar"/>
			<param name="output" value="${dir}${jarfile}.jar.pack"/>
		</antcall>
		<antcall target="lzma">
			<param name="input" value="${dir}${jarfile}.jar.pack"/>
			<param name="output" value="${outputdir}${jarfile}.jar.pack.lzma"/>
		</antcall>
		<!--delete file="${dir}${jarfile}-repack.jar"/-->
		<delete file="${dir}${jarfile}.jar.pack"/>
		<!--delete file="${dir}${jarfile}.jar"/-->
		<rename src="${dir}${jarfile}-repack.jar" dest="${dir}${jarfile}.jar" replace="yes"/>
	</target>

	<target name="compress-resource">
		<antcall target="lzma">
			<param name="input" value="${input}"/>
			<param name="output" value="${output}"/>
		</antcall>
	</target>

	<target name="applettest" depends="applet">
		<exec executable="appletviewer">
			<arg value="-J-Djava.security.policy=applet/appletviewer.policy"/>
			<arg path="applet/applet.html"/>
		</exec>
	</target>

	<target name="runtest" depends="all">
		<fail message="test.mainclass is not set. Use 'ant -Dtest.mainclass=&lt;main-class&gt; runtest'" unless="test.mainclass"/>
		<condition property="native_path" value="libs/windows">
			<os family="windows" />
		</condition>

		<condition property="native_path" value="libs/linux">
			<or>
				<os name="Linux" />
				<os name="SunOS" />
			</or>
		</condition>

		<condition property="native_path" value="libs/macosx">
			<os name="Mac OS X" />
		</condition>
		<property name="native_path_expanded" location="${native_path}"/>
		<java classname="${test.mainclass}" classpath="res:${lwjgl.lib}/lwjgl.jar:${lwjgl.lib}/lwjgl_util.jar:${lwjgl.lib}/lwjgl_test.jar:${lwjgl.lib}/jinput.jar" fork="true">
			<sysproperty key="org.lwjgl.util.Debug" value="true"/>
			<sysproperty key="java.library.path" value="${native_path_expanded}"/>
			<arg line="${args}"/>
		</java>
	</target>

	<!-- Creates the Javadoc -->
	<target name="javadoc" description="Creates javadoc from java source code">
		<javadoc destdir="${lwjgl.docs}/javadoc" classpath="${lwjgl.lib}/jinput.jar" author="true" version="true" use="true" source="1.5" windowtitle="LWJGL API" useexternalfile="true">
			<fileset refid="lwjgl.javadoc.fileset" />
			<doctitle><![CDATA[<h1>Lightweight Java Game Toolkit</h1>]]></doctitle>
			<bottom><![CDATA[<i>Copyright &#169; 2002-2009 lwjgl.org. All Rights Reserved.</i>]]></bottom>
		</javadoc>
	</target>

	<!-- get and copy nightly binaries into libs folder -->
	<target name="copy-nightly-binaries" depends="-initialize" description="Copies latest successful nightly binaries into appropriate libs folder">
		<delete file="${lwjgl.temp}/lwjgl-${lwjgl.version}.zip" failonerror="false"/>
		<get src="http://ci.newdawnsoftware.com/view/LWJGL/job/LWJGL-git-dist/lastSuccessfulBuild/artifact/dist/lwjgl-${lwjgl.version}.zip" dest="${lwjgl.temp}" verbose="true"/>
		<unzip src="${lwjgl.temp}/lwjgl-${lwjgl.version}.zip" dest="${lwjgl.lib}" overwrite="true">
		 	<patternset>
				<include name="**/native/**/*lwjgl*"/>
			</patternset>
			<globmapper from="lwjgl-${lwjgl.version}/native/*" to="*"/>
		</unzip>
	</target>
</project>
