<?xml version="1.0"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<!-- JSecurity root build file.  If you want to understand how the JSecurity build environment
     works (useful if you want to build from scratch or join the project as a developer),
     Read this article:

     An Ant Modular Build Environment for Enterprise Applications:
     http://www.onjava.com/pub/a/onjava/2005/06/22/modularant.html

     Reading this will instantly make you familiar with our build.
-->
<project name="jsecurity" default="all" xmlns:ivy="antlib:org.apache.ivy.ant">

    <!-- Static property definitions.  These will remain the same for any module or submodule. -->
    <property name="project.name" value="jsecurity"/>

    <property name="root.base.dir" value="${basedir}"/>

    <!-- Allow override of default build properties from properties file. -->
    <property file="build.properties"/>
    <property file="${user.home}/.jsecurity/build.properties"/>

    <!-- Environment variables (e.g. to pickup CATALINA_HOME for test deployment) -->
    <property environment="env"/>

    <property name="ivy.install.version" value="2.0.0-beta2"/>
    <condition property="ivy.home" value="${env.IVY_HOME}">
        <isset property="env.IVY_HOME"/>
    </condition>
    <property name="ivy.home" value="${user.home}/.ant"/>
    <property name="ivy.jar.dir" value="${ivy.home}/lib"/>
    <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/>

    <!-- version of the product, see http://apr.apache.org/versioning.html for
         details on this convention -->
    <property name="major.version" value="0"/>
    <property name="minor.version" value="9"/>
    <property name="patch.version" value="0-RC2"/>
    <property name="version" value="${major.version}.${minor.version}.${patch.version}"/>
    <property name="release.name" value="${project.name}-${version}"/>

    <!-- application-wide config files: (all other config files should be in a
         respective module or submodule) -->
    <property name="root.etc.dir" value="${root.base.dir}/etc"/>
    <property name="root.dist.dir" value="${root.base.dir}/build/${project.name}-${version}"/>

    <!-- All 3rd party libraries are in here: -->
    <property name="lib.dir" value="${root.base.dir}/lib"/>

    <!-- *RELATIVE* definitions.  These properties will reflect a directory
         structure relative to where the build is being executed -->
    <property name="base.dir" value="."/>
    <property name="etc.dir" value="${base.dir}/etc"/>
    <property name="src.dir" value="${base.dir}/src"/>
    <property name="test.dir" value="${base.dir}/test"/>
    <property name="build.dir" value="${base.dir}/build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="test.classes.dir" value="${build.dir}/test-classes"/>
    <!-- <property name="dist.dir" value="${build.dir}/dist"/> -->


    <property name="docs.dir" value="${root.dist.dir}/docs"/>
    <property name="src.ref.dir" value="${root.base.dir}/docs/reference"/>
    <property name="dist.ref.dir" value="${docs.dir}/reference"/>
    <property name="double.sided" value="0"/>
    <!-- default to single-sided style -->
    <property name="api.dir" value="${docs.dir}/api"/>
    <property name="test.docs.dir" value="${docs.dir}/test-reports"/>

    <!-- compile flags, can be overridden on the command line using the -D flag -->
    <property name="compile.debug" value="true"/>
    <property name="compile.deprecation" value="false"/>
    <property name="compile.optimize" value="false"/>

    <property name="dist.jarName" value="${project.name}.jar"/>
    <property name="dist.jar" value="${root.dist.dir}/${dist.jarName}"/>

    <path id="all.libs">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar"/>
        </fileset>
    </path>

    <!-- To disable this task (maybe behind a firewall?), use the -Doffline=true command-line switch -->
    <target name="download-ivy" unless="offline" description="Ensures Ivy exists for automatic dependency mgt">
        <mkdir dir="${ivy.jar.dir}"/>
        <!-- download Ivy from web site so that it can be used even without any special installation -->
        <echo message="Installing Ivy for automated dependecy management..."/>
        <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
             dest="${ivy.jar.file}" usetimestamp="true"/>
    </target>

    <!-- =================================
         target: load-ivy
         This target is not necessary if you put ivy.jar in your ant lib directory.
         If you already have ivy in your ant lib, you can simply remove this target.
         ================================= -->
    <target name="load-ivy" depends="download-ivy" description="Ensures Ivy ant tasks are loaded">
        <!-- try to load ivy here from local ivy dir, in case the user has not already dropped
             it into ant's lib dir (note that the latter copy will always take precedence).
             We will not fail as long as local lib dir exists (it may be empty) and
             ivy is in at least one of ant's lib dir or the local lib dir. -->
        <path id="ivy.lib.path">
            <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
        </path>
        <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
    </target>

    <target name="retrieve-dependencies" depends="load-ivy"
            description="Ensures all build dependencies have been downloaded">
        <mkdir dir="${lib.dir}"/>
        <ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]" sync="true"/>
    </target>

    <!-- ===================================================================
 -  Clean all local and children build files
 -  =================================================================== -->
    <target name="clean" description="Cleans the entire project">
        <delete dir="${build.dir}"/>
        <ant dir="samples/quickstart" target="clean"/>
        <ant dir="samples/spring" target="clean"/>
    </target>

    <target name="compile.core" depends="retrieve-dependencies" description="Compiles JSecurity core API only">
        <mkdir dir="${classes.dir}"/>
        <mkdir dir="${classes.dir}/META-INF"/>

        <javac destdir="${classes.dir}"
               debug="${compile.debug}"
               deprecation="${compile.deprecation}"
               optimize="${compile.optimize}"
               target="1.5"
               failonerror="true"
               classpathref="all.libs"
               sourcepath=""
               srcdir="${src.dir}">
            <exclude name="org/jsecurity/web/**"/>
        </javac>

        <copy todir="${classes.dir}" preservelastmodified="true">
            <fileset dir="${src.dir}">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/*.dtd"/>
                <include name="**/*.xsd"/>
            </fileset>
        </copy>

        <copy todir="${classes.dir}/META-INF" preservelastmodified="true">
            <fileset dir="${src.dir}">
                <include name="**/*.tld"/>
            </fileset>
        </copy>
    </target>

    <target name="compile.web" depends="compile.core" description="Compiles JSecurity web API only">
        <mkdir dir="${classes.dir}"/>
        <mkdir dir="${classes.dir}/META-INF"/>

        <javac destdir="${classes.dir}"
               debug="${compile.debug}"
               deprecation="${compile.deprecation}"
               optimize="${compile.optimize}"
               target="1.5"
               failonerror="true"
               classpathref="all.libs"
               sourcepath=""
               srcdir="${src.dir}">
            <include name="org/jsecurity/web/**"/>
        </javac>

        <copy todir="${classes.dir}" preservelastmodified="true">
            <fileset dir="${src.dir}/org/jsecurity/web">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/*.dtd"/>
                <include name="**/*.xsd"/>
            </fileset>
        </copy>

        <copy todir="${classes.dir}/META-INF" preservelastmodified="true">
            <fileset dir="${src.dir}">
                <include name="**/*.tld"/>
            </fileset>
        </copy>
    </target>


    <target name="compile.spring" depends="compile.core" description="Compiles Spring Framework support">
        <javac destdir="${classes.dir}"
               debug="${compile.debug}"
               deprecation="${compile.deprecation}"
               optimize="${compile.optimize}"
               target="1.5"
               failonerror="true">
            <classpath refid="all.libs"/>
            <classpath location="${classes.dir}"/>
            <src path="${root.base.dir}/support/spring/src"/>
        </javac>

        <copy todir="${classes.dir}" preservelastmodified="true">
            <fileset dir="${root.base.dir}/support/spring/src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/*.dtd"/>
                <include name="**/*.xsd"/>
            </fileset>
        </copy>

        <copy todir="${classes.dir}/META-INF" preservelastmodified="true">
            <fileset dir="${root.base.dir}/support/spring/src">
                <include name="**/*.tld"/>
            </fileset>
        </copy>
    </target>

    <target name="compile" depends="compile.core, compile.web, compile.spring" description="Compiles all classes"/>

    <target name="jar" depends="compile" description="Create full JAR file with all JSecurity classes">

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

        <jar jarfile="${dist.jar}">
            <fileset dir="${classes.dir}">
                <include name="org/jsecurity/**"/>
            </fileset>
            <metainf dir="${classes.dir}/META-INF">
                <include name="**"/>
            </metainf>
            <manifest>
                <attribute name="Implementation-Title" value="${project.name}"/>
                <attribute name="Implementation-Version" value="${version}"/>
                <attribute name="${project.name}-Version" value="${version}"/>
                <!-- Allow use of this JAR as a Java agent -->
                <!-- <attribute name="Premain-Class" value="org.jsecurity.instrument.InstrumentationSavingAgent" /> -->
            </manifest>
        </jar>

        <path id="retroweaver.path">
            <fileset dir="${lib.dir}" includes="**/*"/>
        </path>

        <taskdef name="retroweaver" classname="net.sourceforge.retroweaver.ant.RetroWeaverTask"
                 classpathref="retroweaver.path"/>
        <retroweaver target="1.3" inputjar="${dist.jar}" outputjar="${root.dist.dir}/${project.name}-jdk13.jar"/>
        <retroweaver target="1.4" inputjar="${dist.jar}" outputjar="${root.dist.dir}/${project.name}-jdk14.jar"/>

    </target>

    <target name="jar.deploy" depends="jar,src.zip"
            description="Copies the jar and src.zip files to a local directory specified by build properties.  Requires creation of .jsecurity/build.properties file to specify the deploy dir.">
        <fail unless="jar.deploy.dir"
              message="jar.deploy.dir property is not set. Please create ${user.home}/.jsecurity/build.properties and specify this property before running this task."/>
        <copy todir="${jar.deploy.dir}" preservelastmodified="true">
            <fileset file="${dist.jar}"/>
            <fileset file="${root.dist.dir}/${project.name}.src.zip"/>
        </copy>
    </target>

    <target name="samples.quickstart" depends="jar" description="Creates the quickstart .jar">
        <ant dir="samples/quickstart"/>
    </target>

    <target name="samples.quickstart.run" depends="samples.quickstart" description="Runs the sample quickstart class">
        <ant dir="samples/quickstart" target="run"/>
    </target>

    <target name="samples.web" depends="jar" description="Creates the JSecurity sample webapp .war">
        <ant dir="samples/web"/>
    </target>

    <target name="samples.spring" depends="jar" description="Creates the sample JSecurity/Spring .war">
        <ant dir="samples/spring"/>
    </target>

    <target name="samples.spring-hibernate" depends="jar"
            description="Creates the sample JSecurity Spring/Hibernate .war">
        <ant dir="samples/spring-hibernate"/>
    </target>

    <target name="samples" depends="samples.quickstart,samples.web,samples.spring,samples.spring-hibernate"
            description="Creates all sample applications"/>

    <target name="samples.web.deploy" depends="samples.web"
            description="Deploys the JSecurity quickstart .war">
        <ant dir="samples/web" target="deploy"/>
    </target>

    <target name="samples.spring.deploy" depends="samples.spring"
            description="Deploys the sample JSecurity/Spring .war">
        <ant dir="samples/spring" target="deploy"/>
    </target>

    <target name="samples.spring-hibernate.deploy" depends="samples.spring-hibernate"
            description="Deploys the sample JSecurity Spring/Hibernate .war">
        <ant dir="samples/spring-hibernate" target="deploy"/>
    </target>

    <!-- =================================================================== -->
    <!-- Javadoc all main sources                                            -->
    <!-- =================================================================== -->
    <target name="javadoc" description="Generate Javadocs">

        <path id="javadocSrcPath">
            <pathelement location="${src.dir}"/>
            <pathelement location="${root.base.dir}/support/spring/src"/>
        </path>

        <echo message="Generating JavaDoc API..."/>
        <delete dir="${api.dir}" failonerror="false"/>
        <mkdir dir="${api.dir}"/>

        <javadoc destdir="${api.dir}" windowtitle="JSecurity API ${version}"
                 source="1.5" access="package" author="true" version="true" use="true"
                 defaultexcludes="true"
                 header='&lt;a href=\"http://www.jsecurity.org/\" target=\"_top\"&gt;JSecurity&lt;/a&gt;'>
            <sourcepath refid="javadocSrcPath"/>
            <arg value="-breakiterator"/>
            <arg value="-J-Xmx128m"/>
            <arg value="-J-XX:MaxPermSize=128m"/>
            <!-- <arg value="-J-Dhttp.proxyHost=${javadoc.proxyhost}"/>
          <arg value="-J-Dhttp.proxyPort=${javadoc.proxyport}"/> -->
            <doctitle><![CDATA[<h1>JSecurity API ${version}</h1>]]></doctitle>
            <!-- The following <bottom> block is to enable UA tracking via Google Analytics, but it fails the
                 JavaDoc task on a Windows Sun JDK.  It works fine on Mac OS X JavaDoc.  Since we want this UA
                 tracking, we use a Mac to build the release that end-users will download, so we leave this block
                 enabled.  If you want to run JavaDoc in a Windows environment, remove this block, and it will
                 run successfully. -->
            <bottom>
                <![CDATA[
                <i>Copyright &copy; 2004-2008 <a href="http://www.jsecurity.org/" target="_top">JSecurity</a>.</i>
                <script type="text/javascript">
                    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
                    document.write(unescape("%3Cscript src=%22" + gaJsHost + "google-analytics.com/ga.js%22 type=%22text/javascript%22%3E%3C/script%3E"));
                </script>
                <script type="text/javascript">
                    var pageTracker = _gat._getTracker("UA-3614410-1");
                    pageTracker._initData();
                    pageTracker._trackPageview();
                </script>
                ]]>
            </bottom>
            <classpath refid="all.libs"/>
            <packageset dir="${src.dir}">
                <include name="org/jsecurity/**"/>
            </packageset>
            <packageset dir="${root.base.dir}/support/spring/src">
                <include name="org/jsecurity/**"/>
            </packageset>
            <link href="http://java.sun.com/j2se/1.5/docs/api"/>
            <link href="http://java.sun.com/j2ee/1.4/docs/api"/>
            <!-- Jakarta Commons -->
            <link href="http://jakarta.apache.org/commons/collections/apidocs/"/>
            <link href="http://commons.apache.org/beanutils/commons-beanutils-1.7.0/docs/api/"/>
            <link href="http://jakarta.apache.org/commons/logging/apidocs/"/>
            <link href="http://jakarta.apache.org/commons/codec/apidocs/"/>
            <link href="http://quartz.sourceforge.net/javadoc/"/>
            <link href="http://static.springframework.org/spring/docs/2.0.x/api/"/>
            <link href="http://ehcache.sourceforge.net/javadoc/"/>
        </javadoc>

    </target>

    <!-- ===================================================================
 -  Reference documentation
 -  =================================================================== -->
    <target name="doc.prepare" depends="retrieve-dependencies" description="Extra preparation for the documentation">

        <!-- unzip the docbook-libs.zip file containing the necessary jars: -->
        <unzip src="${lib.dir}/docbook/docbook-libs.zip" dest="${lib.dir}/docbook"/>

        <!-- <antcall target="tld.to.docbook"/> -->

    </target>


    <target name="doc.pdf" depends="doc.prepare" description="Compile reference documentation to pdf">

        <mkdir dir="${dist.ref.dir}/pdf/images"/>

        <copy todir="${dist.ref.dir}/pdf/images">
            <fileset dir="${src.ref.dir}/images">
                <include name="**/*"/>
            </fileset>
        </copy>

        <java classname="com.icl.saxon.StyleSheet" fork="true" dir="${dist.ref.dir}">
            <classpath>
                <fileset dir="${lib.dir}/docbook">
                    <include name="**/*.jar"/>
                </fileset>
            </classpath>
            <jvmarg value="-Xmx256M"/>
            <jvmarg value="-XX:MaxPermSize=128m"/>
            <arg value="-o"/>
            <arg value="${dist.ref.dir}/pdf/docbook_fop.tmp"/>
            <arg value="${src.ref.dir}/src/index.xml"/>
            <arg value="${src.ref.dir}/styles/fopdf.xsl"/>
            <!-- controls the double sided pagination style -->
            <arg value="double.sided=${double.sided}"/>
        </java>

        <java classname="org.apache.fop.apps.Fop" fork="true" maxmemory="256m" dir="${dist.ref.dir}">
            <classpath>
                <fileset dir="${lib.dir}/docbook">
                    <include name="**/*.jar"/>
                </fileset>
            </classpath>
            <arg value="${dist.ref.dir}/pdf/docbook_fop.tmp"/>
            <arg value="${dist.ref.dir}/pdf/jsecurity-reference.pdf"/>
        </java>

        <delete file="${dist.ref.dir}/pdf/docbook_fop.tmp"/>

    </target>


    <!-- Start of TLD => DocBook targets -->
    <!-- <target name="tld.to.docbook" depends="original.tld.to.docbook,forms.tld.to.docbook"/>


<target name="original.tld.to.docbook">

<antcall target="hack.DOCTYPE">
<param name="doctype.input.file" value="src/org/springframework/web/servlet/tags/spring.tld"/>
<param name="doctype.scrubbed.file" value="${doc.ref.dir}/src/spring.tld"/>
</antcall>

<antcall target="private.tld.to.docbook">
<param name="input.tld" value="spring.tld"/>
<param name="input.tld.file" value="${doc.ref.dir}/src/spring.tld"/>
</antcall>

</target>


<target name="forms.tld.to.docbook">

<antcall target="hack.DOCTYPE">
<param name="doctype.input.file" value="src/org/springframework/web/servlet/tags/form/spring-form.tld"/>
<param name="doctype.scrubbed.file" value="${doc.ref.dir}/src/spring-form.tld"/>
</antcall>

<antcall target="private.tld.to.docbook">
<param name="input.tld" value="spring-form.tld"/>
<param name="input.tld.file" value="${doc.ref.dir}/src/spring-form.tld"/>
</antcall>

</target>


<target name="private.tld.to.docbook" if="input.tld">

<property name="out.file" value="${doc.ref.dir}/src/${input.tld}.xml"/>

<xslt processor="trax" in="${input.tld.file}" out="${out.file}"
    style="${doc.ref.dir}/styles/tld.to.docbook.xsl">
<param name="title" expression="${input.tld}"/>
</xslt>

<antcall target="hack.CDATA">
<param name="target.file" value="${out.file}"/>
</antcall>

<delete file="${input.tld.file}"/>

</target>


<target name="hack.CDATA" if="target.file">

<replace file="${target.file}">
<replacetoken><![CDATA[&lt;]]></replacetoken>
<replacevalue><![CDATA[<]]></replacevalue>
</replace>

<replace file="${target.file}">
<replacetoken><![CDATA[&gt;]]></replacetoken>
<replacevalue><![CDATA[>]]></replacevalue>
</replace>

</target>


<target name="hack.DOCTYPE" if="doctype.input.file">

<!- -
Removes the TLD DTD decl. from the TLD files as this messes
up the transform (feel free to fix this more elegantly)
- ->
<copy file="${doctype.input.file}" tofile="${doctype.scrubbed.file}" overwrite="true"/>

<replace file="${doctype.scrubbed.file}" value="">
<replacetoken><![CDATA[<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">]]></replacetoken>
</replace>

</target>
<!- - End of TLD => DocBook targets -->


    <target name="doc.html" depends="doc.prepare"
            description="Compile reference documentation to chunked html">

        <mkdir dir="${dist.ref.dir}/html/images"/>

        <copy todir="${dist.ref.dir}/html/images">
            <fileset dir="${src.ref.dir}/images">
                <include name="**/*"/>
            </fileset>
        </copy>

        <copy todir="${dist.ref.dir}/html/" failonerror="false">
            <fileset dir="${src.ref.dir}/styles/">
                <include name="*.css"/>
                <include name="*.js"/>
            </fileset>
        </copy>

        <java classname="com.icl.saxon.StyleSheet" fork="true" dir="${dist.ref.dir}/html/">
            <classpath>
                <fileset dir="${lib.dir}/docbook">
                    <include name="**/*.jar"/>
                </fileset>
            </classpath>
            <jvmarg value="-Xmx256M"/>
            <jvmarg value="-XX:MaxPermSize=128m"/>
            <arg value="${src.ref.dir}/src/index.xml"/>
            <arg value="${src.ref.dir}/styles/html_chunk.xsl"/>
        </java>

    </target>


    <target name="doc.htmlsingle" depends="doc.prepare" description="Compile reference documentation to single html">

        <mkdir dir="${dist.ref.dir}/html_single/images"/>

        <copy todir="${dist.ref.dir}/html_single/images">
            <fileset dir="${src.ref.dir}/images">
                <include name="**/*"/>
            </fileset>
        </copy>
        <copy todir="${dist.ref.dir}/html_single/" file="${src.ref.dir}/styles/html.css" failonerror="false"/>

        <java classname="com.icl.saxon.StyleSheet" fork="true" dir="${dist.ref.dir}">
            <classpath>
                <fileset dir="${lib.dir}/docbook">
                    <include name="**/*.jar"/>
                </fileset>
            </classpath>
            <jvmarg value="-Xmx256M"/>
            <jvmarg value="-XX:MaxPermSize=128m"/>
            <arg value="-o"/>
            <arg value="${dist.ref.dir}/html_single/index.html"/>
            <arg value="${src.ref.dir}/src/index.xml"/>
            <arg value="${src.ref.dir}/styles/html.xsl"/>
        </java>

    </target>


    <target name="doc.all" depends="doc.html,doc.htmlsingle,doc.pdf" description="Generate reference documentation"/>

    <!-- <name name="junit.check.warning" if="tests.failed">
       <echo>
       ***********************************************************
       * One or more unit tests failed!
       * Check the reports located in ${test.docs.dir}
       * for details...
       ***********************************************************
       </echo>
   </name>

   <!- - ===================================================================
     -  quick-test-report - quickly generates test report documentation based
     -  on the xml test reports previously created during a junit task
     -  execution. (this does not run the task).
     -  =================================================================== - ->
   <name name="test.report">
       <echo message="Generating test reports..."/>

       <junitreport todir="${test.docs.dir}">
           <fileset dir=".">
               <include name="**/TEST-*"/>
           </fileset>
           <report todir="${test.docs.dir}"/>
       </junitreport>
   </name>

   <name name="unit.tests" depends="compile">
       <echo message="Executing unit tests..."/>

       <!- - Any properties files needed by test cases and/or Spring test case
            configuration must be under the base root dir hierarchy so relative
            file references may work properly.  - ->
       <copy toDir="${classes.dir}" preservelastmodified="true" file="${root.base.dir}/etc/log4j.properties"/>
       <copy toDir="${classes.dir}" preservelastmodified="true" file="${root.base.dir}/db/build/gen/jdbc.properties"/>

       <junit printsummary="withOutAndErr"
              showoutput="true"
              haltonfailure="no"
              failureproperty="tests.failed"
              errorproperty="tests.failed"
              timeout="60000"
              fork="yes">
           <classpath refid="test.path"/>

           <formatter type="brief" usefile="false"/>
           <formatter type="xml"/>
           <!- - allows us to generate web reports - ->

           <batchtest fork="true" todir="${gen.dir}">
               <fileset dir="${test.classes.dir}">

                   <include name="**/*Test.class"/>

                   <exclude name="**/*IntegrationTest.class"/>
                   <exclude name="**/*SystemTest.class"/>
                   <exclude name="**/*StressTest.class"/>

               </fileset>
           </batchtest>

       </junit>

   </name>

   <name name="test" depends="dist">
       <antcall name="template">
           <param name="name" value="test"/>
       </antcall>
   </name> -->


    <target name="src.zip" description="Create source ZIP (containing Java sources)">
        <mkdir dir="${root.dist.dir}"/>
        <delete file="${root.dist.dir}/${project.name}.src.zip"/>
        <zip destfile="${root.dist.dir}/${project.name}.src.zip">
            <fileset dir="${src.dir}">
                <include name="org/jsecurity/**"/>
            </fileset>
            <fileset dir="${root.base.dir}/support/spring/src">
                <include name="org/jsecurity/**"/>
            </fileset>
        </zip>
    </target>

    <target name="makepom" depends="load-ivy" description="Use Ivy to generate a Maven 2 pom.xml file">
        <ivy:makepom ivyfile="${root.base.dir}/ivy.xml" pomfile="${build.dir}/${project.name}.pom">
            <mapping conf="runtime" scope="compile"/>
            <mapping conf="runtime-web" scope="compile"/>
            <mapping conf="test" scope="test"/>
        </ivy:makepom>
    </target>

    <target name="release" depends="jar,samples,src.zip,makepom,javadoc,doc.all"
            description="Create all artifacts for a JSecurity release">
        <property name="release.dir.name" value="${project.name}-${version}"/>
        <property name="release.zip.name" value="${release.dir.name}.zip"/>
        <property name="release.depzip.name" value="${release.dir.name}-with-dependencies.zip"/>
        <copy todir="${root.dist.dir}">
            <fileset dir="${root.base.dir}">
                <type type="file"/>
                <exclude name="**/build/**"/>
                <exclude name="**/.svn/**"/>
                <exclude name="**/lib/**"/>
                <exclude name="${release.dir.name}"/>
            </fileset>
        </copy>
        <zip destfile="${build.dir}/${release.zip.name}"
             basedir="${build.dir}"
             includes="${release.dir.name}/**"
             excludes="**/${release.zip.name},**/lib/**"/>

        <!-- Our ivy config puts copies of jars under lib directory according to the multiple build
configuration targets.  We don't want multiple copies in the dependency lib, because it would
make the download size larger.  Instead, just include one copy of each: -->
        <mkdir dir="${root.dist.dir}/lib"/>
        <copy todir="${root.dist.dir}/lib" overwrite="true" flatten="true">
            <fileset dir="${lib.dir}">
                <include name="**/*.jar"/>
                <exclude name="**/docbook/*.jar"/>
            </fileset>
        </copy>
        <zip destfile="${build.dir}/${release.depzip.name}"
             basedir="${build.dir}"
             includes="${release.dir.name}/**"
             excludes="**/${release.zip.name}, **/lib/docbook/docbook-dtd/**, **/lib/docbook/docbook-xsl/**, **/lib/docbook/*.jar"/>
        <delete dir="${root.dist.dir}/lib"/>

    </target>

    <!-- ===================================================================
 -  all - everything
 -  =================================================================== -->
    <target name="all" depends="release" description="Do everything"/>

</project>

