<?xml version="1.0"?>
<!-- 
   Copyright 2004, 2005 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.
-->

<project name="Tapestry Framework" default="jar">
  
  <property name="module.name" value="tapestry"/>
  <property name="javadoc.package" value="org.apache.tapestry.*"/>

  <property name="module.javac.deprecation" value="off"/>
  <property name="module.junit.jvmarg" value="-Duser.language=en -Duser.country=US"/>
  <property name="module.javac-test.source" value="1.5"/>
  <property name="module.javac-test.target" value="1.5"/>
    
  <property name="root.dir" value=".."/>
  <property file="${root.dir}/config/build.properties"/>
  <property file="${root.dir}/config/common.properties"/>
  
  <import file="${hivebuild.dir}/jar-module.xml"/>
  <import file="${hivebuild.dir}/javadoc-report.xml"/>
  <import file="${hivebuild.dir}/clover-report.xml"/>  
  <import file="${hivebuild.dir}/hivedoc-report.xml"/>  
  <import file="${hivebuild.dir}/junit-report.xml"/>  
  	
  <target name="compile-dependencies">
    <ibiblio-dependency artifact="commons-codec"      version="${codec.version}"    group="commons-codec"/>
    <ibiblio-dependency artifact="commons-fileupload" version="${fileupload.version}" group="commons-fileupload"/>    
    <ibiblio-dependency artifact="commons-logging"    version="${logging.version}"  group="commons-logging"/>
    <ibiblio-dependency artifact="hivemind"           version="${hivemind.version}" group="hivemind"/>
    <ibiblio-dependency artifact="hivemind-lib"       version="${hivemind.version}" group="hivemind"/>
    <ibiblio-dependency artifact="oro"                version="${oro.version}"      group="oro"/>
    <ibiblio-dependency artifact="javassist"          version="${javassist.version}" group="javassist"/>
    <ibiblio-dependency artifact="servletapi"         version="${servlet.version}"  group="servletapi"/>
    <ibiblio-dependency artifact="ognl"               version="${ognl.version}"     group="ognl"/>
    <ibiblio-dependency artifact="commons-io"         version="${io.version}"  group="commons-io"/>
    
    <ibiblio-dependency artifact="log4j"              version="${log4j.version}"    group="log4j"    use="test"/>
    <ibiblio-dependency artifact="easymock"           version="1.1"                 group="easymock" use="test"/>
    <ibiblio-dependency artifact="easymockclassextension" version="1.1"             group="easymock" use="test"/>
    <ibiblio-dependency artifact="cglib-full"         version="2.0.2"               group="cglib"    use="test"/>
    <ibiblio-dependency artifact="jdom"               version="1.0"                 group="jdom"     use="test"/>
  	
  	<!-- We don't actually use this code EXCEPT for some unit tests, which build class loaders for it,
  		 and use reflection to instantiate, serialize, and de-serialize classes from it. -->
    <ibiblio-dependency artifact="spring"        version="1.1"                 group="springframework"     use="test-subject"/>
  </target>
 
  <property name="version-file.dir" value="${java.classes.dir}/org/apache/tapestry"/>
  <property name="version-file" value="${version-file.dir}/version.properties"/>
	
  <available property="version-file-exists" file="${version-file}"/>
	
  <target name="create-version-file" unless="version-file-exists">
  	<mkdir dir="${version-file.dir}"/>
    <echo file="${java.classes.dir}/org/apache/tapestry/version.properties">
project.version=${project.version}
</echo>
  </target>
	
 <target name="compile" depends="compile-dependencies,create-version-file">
    <default-compile/>
  </target>	
  
  <target name="run-reports">
    <hivedoc-report/>    	
    <javadoc-report/>
  	<junit-report/>
	<clover-report/>  
  </target>
  
  <target name="marshall-documentation">
    <antcall target="forrestdoc.marshall-documentation"/>
    
    <property name="dtd-dir" value="${project.docs.target.dir}/dtd"/>
    <mkdir dir="${dtd-dir}"/>
    
    <announce message="Copying DTDs to ${dtd-dir} ..."/>
    
    <copy todir="${dtd-dir}" flatten="true">
      <fileset dir="${src.dir}" includes="**/*.dtd"/>
    </copy>
  </target>
  
  
</project>
