<project default="common-compile" basedir=".">

	<target name="init">
		<property name="distname" value="JuiCE"/>

    	<property name='product.Name' value='Apache JCE Provider for OpenSSL crypto library'/>
	    <property name='product.name' value='JuiCE'/>
    	<property name='product.shortname' value='juice'/>

	    <property name='product.version.major' value='0'/>
    	<property name='product.version.minor' value='9'/>
	    <property name='product.version.level' value='0'/>
    	<property name='product.Version' value='${product.version.major}.${product.version.minor}'/>
	    <property name='product.version' value='${product.version.major}.${product.version.minor}.${product.version.level}'/>
    	<property name='product_version' value='${product.version.major}_${product.version.minor}_${product.version.level}'/>
	    <property name="year" value="2006"/>
    	<property name="copyright" value="Copyright &#169; ${year} Apache WS-Security Project. All Rights Reserved."/>

		<!-- set global properties for this build -->
		<property name="root" value="java"/>
		<property name="common-root" value="${root}/common"/>
		<property name="common-src" value="${common-root}/src"/>
		<property name="common-tests" value="${common-root}/test"/>
    	<property name="common-build.dir" value="build"/>
    	<property name="common-build.classes" value="${common-root}/${common-build.dir}/classes"/>

		<property name="jdk14-root" value="${root}/jdk14"/>
		<property name="jdk14-src" value="${jdk14-root}/src"/>
		<property name="jdk14-tests" value="${jdk14-root}/test"/>
    	<property name="jdk14-build.dir" value="build"/>
    	<property name="jdk14-build.classes" value="${jdk14-root}/${jdk14-build.dir}/classes"/>

		<property name="java5-root" value="${root}/java5"/>
		<property name="java5-src" value="${java5-root}/src"/>
		<property name="java5-tests" value="${java5-root}/test"/>
    	<property name="java5-build.dir" value="build"/>
    	<property name="java5-build.classes" value="${java5-root}/${java5-build.dir}/classes"/>

		<property name="native" value="./native"/>
	
    	<property name="dir.dist" value="./dist"/>
    	<property name="dir.libs" value="./lib"/>

	    <property name="build.doc" value="${root}/doc"/>
	
    	<property name="jdk14-jar.name" value="${product.shortname}-jdk14-${product.version}.jar"/>
    	<property name="java5-jar.name" value="${product.shortname}-java5-${product.version}.jar"/>
    	<property name="jdk14-zip.name" value="${product.shortname}-jdk14-${product.version}.zip"/>
    	<property name="java5-zip.name" value="${product.shortname}-java5-${product.version}.zip"/>

		<property name="bcjdk14" value="bcprov-jdk14-132.jar" />
		<property name="bcjava5" value="bcprov-jdk15-132.jar" />

		<property name="LD_LIBRARY_PATH" value="${native}/src/.libs" />

		<!-- Use this library to compile the JuiCE common sources. Required
	  		 to resolve ASN.1 classes mainly.
		-->
		<property name="BCforCommon.lib" value="${bcjdk14}" />

	    <condition property="jdk13.present">
    		<equals arg1="${ant.java.version}" arg2="1.3"/>
    	</condition>

    	<condition property="jdk14.present">
      		<equals arg1="${ant.java.version}" arg2="1.4"/>
    	</condition>

		<condition property="java5.present">
			<equals arg1="${ant.java.version}" arg2="1.5"/>
    	</condition>

		<!-- set the path ids to use in the compile targets. To compile
			 we need some 3rd party libs for common, and the compiled common
			 classes for jdk1.4 and java5.
		-->
    	<path id="common.libraries" description="required libs to compile the common sources">
        	<fileset dir="${dir.libs}">
            	<include name="${BCforCommon.lib}"/>
        		<include name="log4j-1.2.9.jar" />
        		<include name="commons-logging-1.0.4.jar" />
        	</fileset>
    	</path>

	 	<path id="jdk14.libraries" description="required libs to compile the jdk1.4 sources">
        	<fileset dir="${dir.libs}">
        		<include name="${bcjdk14}" />
        		<include name="log4j-1.2.9.jar" />
        		<include name="commons-logging-1.0.4.jar" />
        	</fileset>
        	<pathelement path="${common-build.classes}"/>    	
    	</path>

	 	<path id="java5.libraries" description="required 3rd party libs to compile the java5 sources">
        	<fileset dir="${dir.libs}">
        		<include name="${bcjava5}" />        		
        		<include name="log4j-1.2.9.jar" />
        		<include name="commons-logging-1.0.4.jar" />
        	</fileset>
        	<pathelement path="${common-build.classes}"/>    	
    	</path>
	
    	<path id="testjdk14.libraries" description="path setup for jdk1.4 tests">
       		<fileset dir="${dir.dist}">
           		<include name="**/${jdk14-jar.name}"/>
       		</fileset>
       		<fileset dir="${dir.libs}">
       			<include name="log4j-1.2.9.jar" />
       			<include name="commons-logging-1.0.4.jar" />
       	    	<include name="${bcjdk14}"/>
        	</fileset>
        	<pathelement path="${jdk14-build.classes}"/>
    	</path>

		<path id="testjava5.libraries" description="path setup for java5 tests">
        	<fileset dir="${dir.dist}">
            	<include name="**/${java5-jar.name}"/>
        	</fileset>
        	<fileset dir="${dir.libs}">
        		<include name="log4j-1.2.9.jar" />
        		<include name="commons-logging-1.0.4.jar" />
            	<include name="${bcjava5}"/>
        	</fileset>
        	<pathelement path="${java5-build.classes}"/>
    	</path>

	</target>  <!-- end of target "init" -->

	<target name="jdk14-jar" depends="jdk14-compile" 
		description="Create the juice jar file for jdk1.4" >
	     <jar destfile="${dir.dist}/${jdk14-jar.name}" >
	     	<fileset dir="${common-build.classes}" includes="org/apache/**/security/juice/**" />
	     	<fileset dir="${jdk14-build.classes}" includes="org/apache/**/security/juice/**" />
	     </jar>
	</target>

	<target name="java5-jar" depends="java5-compile" 
		description="Create the juice jar file for java5" >
	     <jar destfile="${dir.dist}/${java5-jar.name}" >
	     	<fileset dir="${common-build.classes}" includes="org/apache/**/security/juice/**" />
	     	<fileset dir="${java5-build.classes}" includes="org/apache/**/security/juice/**" />
	     </jar>
	</target>

	<target name="jdk14-bindist" depends="jdk14-jar" description="Build zip file for JDK 1.4 distro">
	     <zip destfile="${dir.dist}/${jdk14-zip.name}">
	        <zipfileset prefix="juice" dir="."
	          includes="LICENSES/**, README.txt, juice-0.0.5.tar.gz" />
<!--	        <zipfileset prefix="juice/doc/api" dir="${build.javadoc}"/> -->
	        <zipfileset fullpath="juice/${jdk14-jar.name}" dir="${dir.dist}" 
	          includes="${jdk14-jar.name}"/>
	      </zip>
	</target>

	<target name="java5-bindist" depends="java5-jar" description="Build zip file for Java 5.0 distro">
	     <zip destfile="${dir.dist}/${java5-zip.name}">
	        <zipfileset prefix="juice" dir="."
	          includes="LICENSES/**, README.txt, juice-0.0.5.tar.gz" />
<!--	        <zipfileset prefix="juice/doc/api" dir="${build.javadoc}"/> -->
	        <zipfileset fullpath="juice/${java5-jar.name}" dir="${dir.dist}" 
	          includes="${java5-jar.name}"/>
	      </zip>
	</target>

	<!-- Prepare directory structure for project build-->
	<target name="prepare" depends="init">
		<mkdir dir="${common-build.dir}"/>
		<mkdir dir="${jdk14-build.dir}"/>
		<mkdir dir="${java5-build.dir}"/>
		
		<mkdir dir="${common-build.classes}"/>
		<mkdir dir="${jdk14-build.classes}"/>
		<mkdir dir="${java5-build.classes}"/>

		<mkdir dir="${dir.dist}"/>
	</target>

	<!-- Compile classes and store them to ${*-build.classes} -->
	<target name="common-compile" depends="prepare">
		<javac srcdir="${common-src}" destdir="${common-build.classes}" debug="on">
            <classpath refid="common.libraries"/>			
		</javac>
	</target>
	
	<target name="jdk14-compile" depends="init">
		<fail unless="jdk14.present">
			Wrong JVM version. Expected: 1.4, found: ${ant.java.version}.
			This target is not executed.			
		</fail>
		<javac srcdir="${jdk14-src}" destdir="${jdk14-build.classes}" debug="on">
            <classpath refid="jdk14.libraries"/>			
		</javac>
	</target>
	
	<target name="java5-compile" depends="init">
		<fail unless="java5.present">
			Wrong JVM version. Expected: 1.5, found: ${ant.java.version}.
			This target is not executed.			
		</fail>
		<javac srcdir="${java5-src}" destdir="${java5-build.classes}" debug="on">
            <classpath refid="java5.libraries"/>			
		</javac>
	</target>
	
	<!-- Delete the ${build} and ${dist} directory trees -->
	<target name="clean" depends="clean-build, clean-dist, clean-native"/>

	<target name="clean-build">
		<delete dir="${common-build.dir}"/>
		<delete dir="${jdk14-build.dir}"/>
		<delete dir="${java5-build.dir}"/>
	</target>

	<target name="clean-dist">
		<delete dir="${dir.dist}"/>
	</target>

	<target name="clean-native">
	</target>

	<!-- Create C headers
	<target name="headers">
		<javah outputFile="${native}/src/juice.h" force="yes">
			<class name="org.apache.security.jce.MD5"/>
			<class name="org.apache.security.jce.SHA"/>
			<class name="org.apache.security.jce.RSA"/>
			<class name="org.apache.security.jce.SecureRandom"/>
			<classpath refid="build.path"/>
		</javah>
	</target>
    -->
	
	<target name="java5-test" depends="common-compile, java5-compile">
		<junit printsummary="yes" fork="yes" haltonfailure="yes" haltonerror="yes" dir="${basedir}">
			<env key="LD_LIBRARY_PATH" value="${LD_LIBRARY_PATH}" />			
			<classpath refid="testjava5.libraries" />
			<formatter type="plain" />
	        <batchtest>
	            <fileset dir="${java5-build.classes}">
	                <include name="**/test/PackageTests.class"/>
	            </fileset>
	        </batchtest>
		</junit>
	</target>

	<target name="jdk14-test" depends="common-compile, jdk14-compile">
		<junit printsummary="yes" fork="yes" haltonfailure="yes" haltonerror="yes" dir="${basedir}">
			<env key="LD_LIBRARY_PATH" value="${LD_LIBRARY_PATH}" />
			<classpath refid="testjdk14.libraries" />
			<formatter type="plain" />
	        <batchtest>
	            <fileset dir="${jdk14-build.classes}">
	                <include name="**/PackageTests.class"/>
	            </fileset>
	        </batchtest>
		</junit>
	</target>
	
</project>
