<!--

 Copyright 2002,2004 The Apache Software Foundation.
 
 Licensed 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.

 $Id: build.xml 54942 2004-10-16 22:39:25Z craigmcc $

-->


<project name="Shale Proposal Test Environment" default="library" basedir=".">


  <!-- ===================== Initialize Property Values ==================== -->


  <!-- Initialize property values -->
  <property file="build.properties"/>
  <property file="../build.properties"/>
  <property file="../../build.properties"/>
  <property file="${user.home}/build.properties"/>


  <!-- Dependency home directory defaults -->
  <property name="jsf.home"         value="/usr/local/jsf-1_1_01"/>
  <property name="jstl.home"        value="/usr/local/standard-1.0.3"/>
  <property name="junit.home"       value="/usr/local/junit-3.8.1"/>
  <property name="server.home"      value="/usr/local/jakarta-tomcat-5.0.25"/>
  <property name="shale.home"       value="${basedir}/../struts-shale/target"/>


  <!-- Dependency library defaults -->
  <property name="commons-beanutils.jar"
                                    value="${jsf.home}/lib/commons-beanutils.jar"/>
  <property name="commons-collections.jar"
                                    value="${jsf.home}/lib/commons-collections.jar"/>
  <property name="commons-digester.jar"
                                    value="${jsf.home}/lib/commons-digester.jar"/>
  <property name="commons-logging.jar"
                                    value="${jsf.home}/lib/commons-logging.jar"/>
  <property name="jsf-api.jar"      value="${jsf.home}/lib/jsf-api.jar"/>
  <property name="jsf-impl.jar"     value="${jsf.home}/lib/jsf-impl.jar"/>
  <property name="jsp-api.jar"      value="${server.home}/common/lib/jsp-api.jar"/>
  <property name="jstl.jar"         value="${jstl.home}/lib/jstl.jar"/>
  <property name="junit.jar"        value="${junit.home}/junit.jar"/>
  <property name="servlet-api.jar"  value="${server.home}/common/lib/servlet.jar"/>
  <property name="shale.jar"        value="${shale.home}/lib/shale.jar"/>
  <property name="standard.jar"     value="${jstl.home}/lib/standard.jar"/>


  <!-- Conditional Processing Flags -->
  <available                     property="jsfri.present"
                                classname="com.sun.faces.RIConstants"
                                classpath="${jsf-impl.jar}"/>
  <available                     property="myfaces.present"
                                classname="net.sourceforge.myfaces.config.MyfacesConfig"
                                classpath="${jsf-impl.jar}"/>

  <!-- Build Defaults -->
  <property name="build.home"      value="${basedir}/target"/>
  <property name="dist.home"       value="${basedir}/dist"/>
  <property name="project.name"    value="Shale Proposal Test Environment"/>
  <property name="project.package" value="org.apache.shale.test"/>
  <property name="project.version" value="1.0-dev"/>


  <!-- Compile Defaults -->
  <property name="compile.debug"           value="true"/>
  <property name="compile.deprecation"     value="false"/>
  <property name="compile.optimize"        value="true"/>


  <!-- Unit Test Defaults -->
  <property name="test.haltonerror"        value="true"/>
  <property name="test.haltonfailure"      value="true"/>
  <property name="test.runner"             value="junit.textui.TestRunner"/>


  <!-- Compile Classpath -->
  <path id="compile.classpath">
    <pathelement location="${commons-beanutils.jar}"/>
    <pathelement location="${commons-collections.jar}"/>
    <pathelement location="${commons-digester.jar}"/>
    <pathelement location="${commons-logging.jar}"/>
    <pathelement location="${jsf-api.jar}"/>
    <pathelement location="${jsp-api.jar}"/>
    <pathelement location="${junit.jar}"/>
    <pathelement location="${servlet-api.jar}"/>
    <pathelement location="${shale.jar}"/>
    <pathelement location="${build.home}/classes"/>
  </path>


  <!-- Test Classpath -->
  <path id="test.classpath">
    <pathelement location="${commons-beanutils.jar}"/>
    <pathelement location="${commons-collections.jar}"/>
    <pathelement location="${commons-digester.jar}"/>
    <pathelement location="${commons-logging.jar}"/>
    <pathelement location="${commons-validator.jar}"/>
    <pathelement location="${jsf-api.jar}"/>
    <pathelement location="${jsp-api.jar}"/>
    <pathelement location="${junit.jar}"/>
    <pathelement location="${servlet-api.jar}"/>
    <pathelement location="${shale.jar}"/>
    <pathelement location="${build.home}/classes"/>
    <pathelement location="${build.home}/test-classes"/>
  </path>


    <!-- ==================== Maintenance Targets ============================ -->


  <target     name="clean"
       description="Clean all build directories">
    <delete    dir="${build.home}"/>
    <delete    dir="${dist.home}"/>
  </target>


  <target     name="init">
    <echo  message="---------- ${project.name} ${project.version} -----------"/>
    <filter  token="name"     value="${project.name}"/>
    <filter  token="package"  value="${project.package}"/>
    <filter  token="state"    value="${systest.state.saving}"/>
    <filter  token="version"  value="${project.version}"/>
    <echo  message="jsf-api.jar =    ${jsf-api.jar}"/>
    <echo  message="jsf-impl.jar =   ${jsf-impl.jar}"/>
    <echo  message="shale-jar =      ${shale.jar}"/>
    <echo  message="jsfri.present =  ${jsfri.present}"/>
    <echo  message="myfaces.present= ${myfaces.present}"/>
  </target>


  <target     name="prepare" depends="init">
    <mkdir     dir="${build.home}"/>
    <mkdir     dir="${build.home}/classes"/>
    <mkdir     dir="${build.home}/classes/META-INF"/>
    <mkdir     dir="${build.home}/conf"/>
    <mkdir     dir="${build.home}/lib"/>
    <mkdir     dir="${dist.home}"/>
    <mkdir     dir="${dist.home}/docs"/>
    <mkdir     dir="${dist.home}/docs/api"/>
  </target>


  <target     name="static" depends="prepare">
    <tstamp/>
    <copy    todir="${build.home}/conf"
         filtering="on">
      <fileset dir="src/conf"
          includes="*.MF"/>
    </copy>
<!--
    <copy    todir="${build.home}/classes/META-INF">
      <fileset dir="src/conf"
          includes="*faces-config.xml"/>
    </copy>
-->
  </target>


  <!-- =================== Compile Library Components ====================== -->


  <target         name="compile" depends="static"
           description="Compile core test library">

    <!-- Compile Java Sources -->
    <javac      srcdir="src/java"
               destdir="${build.home}/classes"
                 debug="${compile.debug}"
           deprecation="${compile.deprecation}"
              optimize="${compile.optimize}">
      <classpath refid="compile.classpath" />
    </javac>

    <!-- Copy non-Java Sources -->
    <copy        todir="${build.home}/classes">
      <fileset     dir="src/java">
        <exclude  name="**/*.java"/>
      </fileset>
    </copy>

    <!-- Copy license and notice files -->
    <copy       tofile="${build.home}/classes/META-INF/LICENSE.txt"
                  file="LICENSE.txt"/>
    <copy       tofile="${build.home}/classes/META-INF/NOTICE.txt"
                  file="NOTICE.txt"/>

  </target>


  <target         name="library" depends="compile"
           description="Package test library">

    <jar       jarfile="${build.home}/lib/shale-test.jar"
               basedir="${build.home}/classes"
              manifest="${build.home}/conf/MANIFEST.MF"/>

  </target>


  <!-- ===================== Generate Documentation ======================== -->


  <target         name="docs" depends="library"
           description="Create generated documentation and JavaDocs">

    <javadoc
            sourcepath="src/java"
               destdir="${dist.home}/docs/api"
                author="true"
               private="true"
               version="true"
          packagenames="org.apache.shale.*"
           windowtitle="${project.name} (Version ${project.version})"
              doctitle="${project.name} (Version ${project.version})"
                bottom="Copyright &#169; 2003-2004 - The Apache Software Foundation">
      <classpath refid="compile.classpath"/>
    </javadoc>

  </target>


  <!-- ==================== Create Binary Distribution ==================== -->


  <target name="dist" depends="docs"
   description="Create binary distribution">

    <mkdir     dir="${dist.home}"/>
    <copy    todir="${dist.home}">
      <fileset dir="${basedir}" includes="*.txt build.*"
                                excludes="build.properties"/>
    </copy>

    <mkdir     dir="${dist.home}/lib"/>
    <copy    todir="${dist.home}/lib">
      <fileset dir="${build.home}/lib" includes="*.jar"/>
    </copy>

    <mkdir     dir="${dist.home}/src"/>
    <copy    todir="${dist.home}/src">
      <fileset dir="src" excludes="**/.svn/**"/>
    </copy>

  </target>


  <!-- ========================= Unit Tests ================================ -->


  <target         name="test:compile" depends="library"
           description="Compile library unit tests">

    <mkdir         dir="${build.home}/test-classes"/>

    <!-- Compile Java Sources -->
    <javac      srcdir="src/test"
               destdir="${build.home}/test-classes"
                 debug="${compile.debug}"
           deprecation="${compile.deprecation}"
              optimize="${compile.optimize}">
      <classpath refid="test.classpath" />
    </javac>

    <!-- Copy non-Java Sources -->
    <copy        todir="${build.home}/test-classes">
      <fileset     dir="src/test">
        <exclude  name="**/*.java"/>
      </fileset>
    </copy>

  </target>


  <target         name="test" depends="test:compile"
           description="Execute library unit tests">

    <junit        fork="yes"
           haltonerror="${test.haltonerror}"
         haltonfailure="${test.haltonfailure}"
          printSummary="no">

      <classpath refid="test.classpath"/>
      <formatter  type="plain"
               usefile="false"/>
      <batchtest  fork="yes">
        <fileset   dir="${build.home}/test-classes"
              includes="org/apache/shale/test/*/*TestCase.class"/>
      </batchtest>

    </junit>

  </target>


</project>
