<?xml version="1.0"?>

<project name="Web Services Security (WSS4J)" default="usage" basedir=".">
    <!-- ================================================================== -->
    <description>
   Build file for WSS4J

   This file is intended for ANT, a Java based build tool.
   ANT is available from http://jakarta.apache.org/ant/index.html

Prerequisites:
    See the README file

Build Instructions:
   To build, run

     ant "target"

   on the directory where this file is located with the target you want.

    </description>

    <target name="init">
        <property name='product.Name' value='Apache-WS-Security-J'/>
        <property name='product.name' value='wss4j'/>
        <property name='product.shortname' value='wss4j'/>

        <property name='product.version.major' value='1'/>
        <property name='product.version.minor' value='6'/>
        <property name='product.version.level' value='14'/>
        <property name='product.version.qualifier' value=''/>
        <property name='product.version' value='${product.version.major}.${product.version.minor}.${product.version.level}${product.version.qualifier}'/>
        <property name="year" value="2014"/>
        <property name="copyright" value="Copyright &#169; ${year} Apache WSS4J Project. All Rights Reserved."/>

        <!-- Give user a chance to override without editing this file
             (and without typing -D each time it compiles it) -->
        <property file="./build.properties"/>
        <property file="${user.home}/build.properties"/>

        <property name="dir.doc" value="./doc"/>
        <property name="dir.dist" value="./dist"/>
        <property name="dir.libs" value="./lib"/>
        <property name="dir.endorsed.libs" value="./endorsed"/>
        <property name="dir.src.java" value="./src/main/java"/>
        <property name="dir.src.resources" value="./src/main/resources"/>
        <property name="dir.test.java" value="./src/test/java"/>
        <property name="dir.test.resources" value="./src/test/resources"/>

        <property name="build.dir" value="./build"/>
        <property name="build.classes" value="${build.dir}/classes"/>

        <property name="jar.library" value="${product.shortname}-${product.version}.jar"/>

        <property name="build.doc" value="${build.dir}/doc"/>
        <property name="build.doc.xml" value="${build.doc}/xml"/>
        <property name="build.doc.html" value="${build.doc}/html"/>
        <property name="build.javadoc" value="${build.doc.html}/api"/>
        <property name="build.junit.xml" value="${build.doc.xml}/junit"/>
        <property name="build.junit.html" value="${build.doc.html}/junit"/>

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

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

        <condition property="merlin.ok">
            <or>
                <equals arg1="${ant.java.version}" arg2="1.5"/>
                <equals arg1="${ant.java.version}" arg2="1.6"/>
            </or>
        </condition>

        <!-- 
         for the time being following path id uses the libs in the wss4j
         lib directory only This is done to test if we really don't need
         any axis libs. After this is done we can include the
         java.class.path and leave the wss4j/lib empty. This requires that
         the CLASSPATH includes all required packages (see above
         -->
        
        <path id="classpath.libraries" description="3rd party libs">
            <fileset dir="${dir.libs}">
                <include name="**/*.jar"/>
                <!-- <pathelement path="${java.class.path}"/> -->
            </fileset>
            <fileset dir="${dir.endorsed.libs}">
                <include name="**/*.jar"/>
                <!-- <pathelement path="${java.class.path}"/> -->
            </fileset>
        </path>

        <path id="classpath.wss4j" description="wss4j classes; first try pure class files, then jars">
            <pathelement path="${build.classes}"/>
            <pathelement path="${build.dir}/${jar.library}"/>
        </path>

        <path id="classpath.library">
            <path refid="classpath.wss4j"/>
            <path refid="classpath.libraries"/>
        </path>

        <!-- this shall include Axis jars because the tests use the
         Axis implementation of javax.xml.soap, etc. Therefore the
         CLASSPATH is included.
         -->
        <path id="classpath.test">
            <!-- classpath for test is librarypath plus junit -->
            <path refid="classpath.library"/>
            <pathelement path="${build.classes}/resources"/>
            <pathelement path="${build.classes}/resources/keys"/>
        </path>

        <path id="classpath.test.jar">
            <!-- classpath for test is librarypath plus junit -->
            <path refid="classpath.library"/>
            <pathelement path="${build.dir}/${jar.library}"/>
            <pathelement path="${build.dir}/${jar.tests}"/>
        </path>

        <property name="javadoc.packages"
            value="
org.apache.ws.security,
org.apache.ws.security.components,
org.apache.ws.security.components.crypto,
org.apache.ws.security.message,
org.apache.ws.security.message.token,
org.apache.ws.security.util
"/>

      <echo level="debug">
        -------------------------------------------------------------------
        ${product.Name} v${product.version} [${year}] 
        -------------------------------------------------------------------
        Building with ${ant.version}
        using build file ${ant.file}
        Java ${java.version} located at ${java.home} 
        -------------------------------------------------------------------
        --- Property values ---
        sun.boot.class.path=${sun.boot.class.path}
      </echo>
      <pathconvert targetos="windows" property="classpath.test.as.string" 
          refid="classpath.test"/>
      <echo level="debug">
        classpath.test: ${classpath.test.as.string}
      </echo>
    </target>

    <target name="usage" depends="init">
      <echo>
         Build instructions                                                
        -------------------------------------------------------------------
                                                                           
         available targets are:                                            
                                                                           
           compile         --> compiles everything                         
           compile.library --> compiles the source code                    
           compile.tests   --> compiles the tests source code              
                                                                           
           javadoc         --> generates the API documentation             
                               (needs Java > 1.2)                          
                                                                           
           test            --> runs the defined JUnit tests                
           report          --> generates html report of test results       
                                                                           
           clean           --> cleans up all generated files and           
                               directories                                 
           jar             --> creates the JAR file                        
           gump            --> includes javadoc, compile jar and test      
                                                                           
           usage           --> provides help on using the build tool       
                               (default)                                   
                                                                           
           changelog       --> generates changelog.html                    
                                                                           
         See comments inside the build.xml file for more details.          
        -------------------------------------------------------------------
      </echo>
    </target>

    <target name="clean" depends="init"
        description="Clean up all temporary build files">
        <delete dir="${build.dir}"/>
        <delete dir="${dir.dist}"/>
    </target>

    <target name="prepare" depends="init"
        description="This target generates a first build directory and checks for some libraries">
        <tstamp/>
        <mkdir dir="${build.dir}"/>
        <!--<delete dir="${build.dir}/test-reports"/> -->
        <mkdir dir="${build.dir}/test-reports"/>

        <available property="junit.present" 
                classname="org.junit.Assert">
            <!-- check whether JUnit is available -->
            <classpath refid="classpath.test"/>
        </available>

        <available property="bc.present" classname="org.bouncycastle.jce.provider.BouncyCastleProvider">
            <!-- check whether BouncyCastle is available -->
            <classpath refid="classpath.test"/>
        </available>

        <echo level="debug">
        --- Flags (Note: If the {property name} is displayed,
                   then the component is not present)
        jdk15.present=${jdk15.present}
        jdk16.present=${jdk16.present}
        bc.present=${bc.present}
        </echo>

    </target>

    <!-- ################################################################## -->
    <!-- ################################################################## -->
    <!-- ################################################################## -->
    <!-- ################################################################## -->
    <!-- ################################################################## -->

    <target name="prepare-src" depends="prepare" 
        description="This target copies the Java sources and brands the version information">
        <!-- create directories -->
        <mkdir dir="${build.classes}"/>
        <copy todir="${build.classes}">
            <fileset dir="${dir.src.java}">
                <include name="META-INF/*"/>
            </fileset>
        </copy>
    </target>

    <target name="javadoc"
        depends="prepare-src"
        description="Generates javadoc from all .java files; this is done on the 'branded' files">
        <mkdir dir="${build.doc}"/>
        <mkdir dir="${build.doc.html}"/>
        <mkdir dir="${build.javadoc}"/>

        <javadoc destdir="${build.javadoc}"
            packagenames="${javadoc.packages}"
            classpathref="classpath.test">
            <!-- additionalparam="-breakiterator"-->
            <sourcepath>
                <pathelement location="${dir.src.java}"/>
                <pathelement location="${dir.test.java}"/>
            </sourcepath>
        </javadoc>
    </target>

    <!-- ################################################################## -->

    <!-- Aliases -->
    <target name="javadocs" depends="javadoc"/>
    <target name="jars" depends="jar"/>

    <!-- Collections -->
    <target name="gump" 
            depends="clean,javadoc,compile,test" 
            description="Target for the gump run"/>

    <target name="compile" 
       depends="compile.library, compile.tests"
            description="compile everything"/>

    <target name="test"
            depends="unitTests"
            description="tests everything"/>        

    <!-- ################################################################## -->

    <target name="compile.library" depends="prepare-src">
        <!-- Compile the java code from ${dir.src} into ${build.classes} -->
        <javac srcdir="${dir.src.java}" destdir="${build.classes}" debug="on" source="1.5" target="1.5" includeAntRuntime="false">
            <classpath refid="classpath.library"/>
            <!--<compilerarg value="-Xlint"/>-->
            <exclude name="**/Merlin.java" unless="merlin.ok"/>
        </javac>
        <!-- Copy Property files -->
        <copy todir="${build.classes}">
            <fileset dir="${dir.src.resources}">
                <include name="**/*.properties"/>
            	<include name="**/*.xml"/>
            </fileset>
        </copy>
    </target>

    <target name="compile.tests" if="junit.present">

        <javac srcdir="${dir.test.java}" destdir="${build.classes}" debug="on" source="1.5" target="1.5" includeAntRuntime="false">
            <classpath refid="classpath.test"/>
        </javac>

        <!-- Copy Property files -->
        <copy todir="${build.classes}">
            <fileset dir="${dir.test.resources}" includes="**/*"/>
        </copy>
    </target>

    <target name="unitTests" unless="skip.tests" depends="compile">
        <junit printsummary="yes"
            haltonfailure="yes"
            fork="yes"
            dir="${basedir}">
            <!-- See if this helps with Gump test failures -->
            <sysproperty key="build.clonevm" value="true"/>

            <jvmarg value="-Djava.endorsed.dirs=${basedir}/endorsed"/>
            <classpath refid="classpath.test"/>
            <formatter type="xml"/>
            <batchtest todir="${build.dir}/test-reports">
                <fileset dir="${build.classes}">
                    <include name="**/*Test.class"/>
                </fileset>
            </batchtest>
        </junit>
    </target>

    <!-- generate a report from all the tests. 
           requires Xalan or other XSLT engine in ant\lib-->

   <target name="report" depends="init">
        <junitreport todir="${build.dir}/test-reports">
            <fileset dir="${build.dir}/test-reports">
                <include name="TEST-*.xml"/>
            </fileset>
            <report format="frames" todir="${build.dir}/test-reports/html"/>
        </junitreport>
        <echo message=
            "point your browser to ${build.dir}/test-reports/html/index.html"/>
    </target>

    <target name="jar"
        depends="compile, test"
        description="Creates the ${jar.library}">

        <jar jarfile="${build.dir}/${jar.library}"
            basedir="${build.classes}"
            includes="**/*, *.txt"
            excludes="components/**, *.properties, wssec/**" 
            />
    </target>

    <target name="dist" depends="bindist, srcdist"/>

    <!-- Note that this requires the jars to have been built by maven first -->
    <target name="bindist" depends="init" 
             description="Build binary zip for distro">
         <mkdir dir="${dir.dist}"/>
         <zip destfile=
           "${dir.dist}/${product.shortname}-bin-${product.version}.zip">
            <zipfileset prefix="wss4j-${product.version}" dir="."
                includes="legal/** lib/** LICENSE.txt README.txt NOTICE "/>
            <zipfileset prefix="wss4j-${product.version}/lib" dir="target/"
                includes="wss4j-${product.version}.jar" />
            <zipfileset prefix="wss4j-${product.version}/doc" dir="target/"
                includes="wss4j-${product.version}-*.jar" />
            <zipfileset prefix="wss4j-${product.version}/lib" dir="endorsed/"
                includes="*.jar" />
         </zip>
     </target>  
    
    <target name="srcdist" depends="init" description=
               "Build source zip file for distro">
        <mkdir dir="${dir.dist}"/>
        <zip destfile=
                 "${dir.dist}/${product.shortname}-src-${product.version}.zip">
            <zipfileset prefix="wss4j-${product.version}" dir="."
                includes="src/** ChangeLog.txt LICENSE.txt README.txt NOTICE build.xml pom.xml"/>
        </zip>
    </target>

</project>
