<!--+
    | Apache Agora build file
    +-->

<project name="Apache Agora" default="jar" basedir=".">

    <property file="${user.home}/build.properties"/>
    <property file="${user.home}/.ant.properties"/>
    <property file="./default.properties"/>

    <path id="project.class.path">
        <pathelement location="${build}/classes"/>
        <pathelement path="${java.class.path}"/>
    </path>

    <!--+
        | Initializes the build
        +-->
    <target name="init">
        <filter token="name" value="${name}"/>
        <filter token="year" value="${year}"/>
        <filter token="version" value="${version}"/>
        <filter token="dataURL" value="${site.dataURL}"/>
    </target>
    
    <!--+
        | Compiles the source code 
        +-->
    <target name="compile" depends="init" description="Compiles the source code">

        <mkdir dir="${build}/classes"/>
        <mkdir dir="${build}/src"/>

        <copy todir="${build}/src" filtering="on">
          <fileset dir="${src}/java">
            <include name="**/*.java"/>
          </fileset>
        </copy>
        
        <javac srcdir="${build}/src"
            destdir="${build}/classes"
            debug="${build.debug}"
            optimize="${build.optimize}"
            deprecation="${build.deprecation}"
            target="1.2">
            <classpath refid="project.class.path" />
            <include name="**/*.java"/>
        </javac>

        <copy todir="${build}/classes" filtering="off">
            <fileset dir="${src}/java">
                <exclude name="**/*.java"/>
                <exclude name="**/package.html"/>
            </fileset>
        </copy>
    </target>

    <!--+
        | Copies and filters the manifest and license.
        +-->
    <target name="prepare-conf" depends="init">
        <mkdir dir="${build}/conf"/>
        <copy todir="${build}/conf" flatten="true" filtering="on">
            <fileset dir="." includes="LICENSE.txt"/>
            <fileset dir="${src}/java" includes="MANIFEST.MF"/>
        </copy>
    </target>
    
    <!--+
        | Creates the jar archive
        +-->
    <target name="jar" depends="prepare-conf, compile" description="Generates the jar">
        <jar jarfile="${build}/${jar.name}"
             basedir="${build}/classes"
             compress="${build.compress}"
             manifest="${build}/conf/MANIFEST.MF"
        />
    </target>

    <!--+
        | Generates the javadocs
        +-->
    <target name="javadoc" depends="compile" description="Generates the javadocs">

        <mkdir dir="${build}/javadocs"/>
        <javadoc packagenames="org.apache.*"
            sourcepath="${src}/java"
            destdir="${build}/javadocs">
            <classpath refid="project.class.path" />
            <doclet name="com.sun.tools.doclets.standard.Standard">
                <param name="-author"/>
                <param name="-version"/>
                <param name="-doctitle" value="${Name}"/>
                <param name="-windowtitle" value="${Name} API"/>
                <param name="-link" value="http://java.sun.com/j2se/1.4.2/docs/api/"/>
                <param name="-bottom" value="&quot;Copyright &#169; ${year} Apache Software Foundation. All Rights Reserved.&quot;"/>
            </doclet>
        </javadoc>
    </target>

    <!--+
        | Prepares the distribution files
        +-->
    <target name="prepare-dist" depends="jar,javadoc" description="Prepares the distribution">

        <copy todir="${dist}" filtering="on">
            <fileset dir=".">
                <include name="*.txt"/>
                <include name="*.xml"/>
                <include name="*.properties"/>
            </fileset>
        </copy>
        
        <copy file="${build}/${jar.name}" toFile="${dist}/${jar.name}" filtering="off"/>

        <copy todir="${dist}" filtering="on">
            <fileset dir="${src}/python">
                <exclude name="**/*.pyc"/>
            </fileset>
        </copy>
    
        <copy todir="${dist}/src/java" filtering="on">
            <fileset dir="${src}/java">
                <exclude name="**/*.jpg"/>
                <exclude name="**/*.gif"/>
                <exclude name="**/*.png"/>
            </fileset>
        </copy>
    
        <copy todir="${dist}/src/java" filtering="off">
            <fileset dir="${src}/java">
                <include name="**/*.jpg"/>
                <include name="**/*.gif"/>
                <include name="**/*.png"/>
            </fileset>
        </copy>
        
        <copy todir="${dist}/docs" filtering="on">
            <fileset dir="${src}/site">
                <exclude name="**/*.jpg"/>
                <exclude name="**/*.gif"/>
                <exclude name="**/*.png"/>
                <exclude name="index.html"/>
            </fileset>
        </copy>

        <copy file="${src}/site/guide.html" tofile="${dist}/docs/index.html"/>

        <copy todir="${dist}/docs" filtering="off">
            <fileset dir="${src}/site">
                <include name="**/*.jpg"/>
                <include name="**/*.gif"/>
                <include name="**/*.png"/>
            </fileset>
        </copy>

        <copy todir="${dist}/docs/api" filtering="on">
            <fileset dir="${build}/javadocs"/>
        </copy>        

    </target>

    <!--+
        | Creates the distribution archive
        +-->
    <target name="dist" depends="prepare-dist" description="Creates the distribution">
        <zip zipfile="${name}-${version}.zip" basedir="${dist}"/>
    </target>

    <!--+
        | Prepares the site
        +-->
    <target name="site" depends="dist" description="Prepares the web site">

        
        <copy todir="${site}" filtering="on">
            <fileset dir="${src}/site">
                <exclude name="**/*.jpg"/>
                <exclude name="**/*.gif"/>
                <exclude name="**/*.png"/>
            </fileset>
        </copy>

        <copy file="${build}/${jar.name}" toFile="${site}/lib/${jar.name}" filtering="off"/>

        <copy todir="${site}" filtering="off">
            <fileset dir="${src}/site">
                <include name="**/*.jpg"/>
                <include name="**/*.gif"/>
                <include name="**/*.png"/>
            </fileset>
        </copy>

        <copy todir="${site}/api" filtering="on">
            <fileset dir="${build}/javadocs"/>
        </copy>        
    
        <copy file="${name}-${version}.zip" tofile="${site}/dist/${name}-${version}.zip"/>

    </target>
    
    <!--+
        | Cleans up
        +-->
    <target name="clean" description="Cleans up the project">
        <delete dir="${site}"/>
        <delete dir="${dist}"/>
        <delete dir="${build}"/>
        <delete>
    		<fileset dir="." includes="*.zip"/>
  		</delete> 
    </target>

</project>

