<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"/>

	<!-- Use this library to compile the JuiCE common sources. Required
	  	 to resolve ASN.1 classes mainly.
	-->
	<property name="BCforCommon.lib" value="bcprov-jdk14-131.jar" />
		
    <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>
        <!-- <pathelement path="${build.classes}"/> -->
    </path>

	 <path id="jdk14.libraries" description="required libs to compile the jdk1.4 sources">
        <fileset dir="${dir.libs}">
        	<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="log4j-1.2.9.jar" />
        	<include name="commons-logging-1.0.4.jar" />
        </fileset>
        <pathelement path="${common-build.classes}"/>    	
    </path>
	
    <path id="testjdk4.libraries" description="3rd party libs for jdk1.4 tests">
       	<fileset dir="${dir.dist}">
           	<include name="**/${jarjdk14.library}"/>
       	</fileset>
       	<fileset dir="${dir.libs}">
       		<include name="log4j-1.2.9.jar" />
       		<include name="commons-logging-1.0.4.jar" />
       	    <include name="bcprov-jdk14-130.jar"/>
        </fileset>
    </path>

    <path id="testjava5.libraries" description="3rd party libs for java5 tests">
        <fileset dir="${dir.dist}">
            <include name="**/${jarjava5.library}"/>
        </fileset>
        <fileset dir="${dir.libs}">
        	<include name="log4j-1.2.9.jar" />
        	<include name="commons-logging-1.0.4.jar" />
            <include name="bcprov-jdk15-131.jar"/>
        </fileset>
    </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 move 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>
    -->
	
	<!-- TODO update to reflect new structure -->
	<target name="compile-tests" depends="common-compile">
		<javac srcdir="${common-src}" destdir="${common-build.classes}" includes="**/test/*.java" debug="on">
			<classpath refid="test.libraries" />
		</javac>
	</target>

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

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