<?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.

-->
<project name="modules/core/build.xml" default="main" basedir="../..">

    <!-- properties -->
    <property file="${basedir}/build.properties"/>
    <property name="lib.dir" value="${basedir}/lib"/>

    <property name="module.dir" value="${basedir}/modules/core"/>
    <property name="module.lib.dir" location="${module.dir}/lib"/>
    <property name="tomcat.lib.dir" location="${basedir}/servers/apache-tomcat-6.0.29/lib" />
    <property name="module.src" value="${module.dir}/src"/>
    <property name="module.classes" value="${module.dir}/classes"/>
    <property name="module.jar" value="${lib.dir}/flex-messaging-core.jar"/>
    <property name="module.dist.dir" value="${basedir}/dist/source"/>

    <property name="common.src" value="${basedir}/modules/common/src"/>
    <property name="remoting.src" value="${basedir}/modules/remoting/src"/>
    <property name="proxy.src" value="${basedir}/modules/proxy/src"/>
    <property name="opt.src" value="${basedir}/modules/opt/src"/>    

    <property name="build.number" value=""/>

    <!-- j2ee apis required to compile -->
    <path id="classpath">
        <fileset dir="${lib.dir}" erroronmissingdir="false" includes="**/*.jar"/>
        <fileset dir="${module.lib.dir}" erroronmissingdir="false" includes="**/*.jar"/>
        <fileset dir="${tomcat.lib.dir}" erroronmissingdir="false" includes="**/*.jar"/>
    </path>

    <target name="main" depends="clean,prepare,run-depend,jar" description="cleans and runs the full build"/>
    <target name="dev" depends="prepare,run-depend,jar" description="runs src.depend build for development"/>

    <target name="prepare">
        <mkdir dir="${lib.dir}"/>
        <mkdir dir="${module.classes}"/>
    </target>

    <target name="run-depend" if="src.depend">
        <echo message="Removing class files that changed and dependent class files."/>
        <depend cache="${module.classes}" srcdir="${module.src}" destdir="${module.classes}"/>
    </target>

    <target name="compile" depends="prepare" description="compile">
        <javac debug="${src.debug}" destdir="${module.classes}" 
        	srcdir="${module.src}" classpathref="classpath" >
            <include name="**/*.java" />
           	<exclude name="flex/messaging/cluster/JGroupsCluster.java" />
           	<exclude name="flex/messaging/cluster/ClusterNode.java" />
           	<exclude name="flex/messaging/cluster/ClusterMembershipListener.java" />
        </javac>
        <echo file="${module.classes}/flex/messaging/version.properties" append="false">build=${build.number}</echo>
        <copy todir="${module.classes}/flex/messaging" overwrite="true">
            <fileset dir="${module.src}/flex/messaging" includes="*.properties"/>
        </copy>
        <copy toDir="${module.classes}" file="${module.dir}/AdobeInfo.xml" />
    </target>

	<!-- only compile jgroups code if jgroups present -->
	<condition property="jgroups.available">
	  <available classname="org.jgroups.Channel" classpathref="classpath"/>
	</condition>

	<target name="compile-jgroups" depends="prepare" if="jgroups.available">
		<echo >-== Found JGroups, compiling JGroups cluster implementation ==-</echo>
        <javac debug="${src.debug}" destdir="${module.classes}" srcdir="${module.src}"
			classpathref="classpath" >
           	<include name= "flex/messaging/cluster/JGroupsCluster.java" />
           	<include name= "flex/messaging/cluster/ClusterNode.java" />
           	<include name= "flex/messaging/cluster/ClusterMembershipListener.java" />
		</javac>
	</target>

    <!-- jar containing messaging core infrastructure -->
    <target name="jar" depends="compile,compile-jgroups">
        <jar destfile="${module.jar}" basedir="${module.classes}">
            <include name="AdobeInfo.xml"/>
            <include name="flex/management/**"/>
            <include name="flex/messaging/**"/>
            <include name="flex/core/**"/>
            <exclude name=".dependency-info/**"/>
            <manifest>
        		<attribute name="Sealed" value="${manifest.sealed}"/>
        		<attribute name="Implementation-Title" value="${manifest.Implementation-Title} - Community Edition"/>
			    <attribute name="Implementation-Version" value="${manifest.Implementation-Version}.${build.number}"/> 
			    <attribute name="Implementation-Vendor" value="${manifest.Implementation-Vendor}"/>
            </manifest>
        </jar>
        <delete failonerror="false">
            <fileset dir="${module.classes}/flex/messaging" includes="*.properties"/>
        </delete>
    </target>

    <target name="clean" description="clean">
        <delete file="${module.jar}" failonerror="false"/>
        <delete failonerror="false" includeEmptyDirs="true">
            <fileset dir="${module.classes}">
                <include name="**/*"/>
                <exclude name="dependencies.txt"/>
                <exclude name=".dependency-info/**"/>
            </fileset>
        </delete>
        <delete dir="${module.classes}" failonerror="false" includeEmptyDirs="true"/>
        <echo>modules/core clean</echo>
    </target>

   <target name="javadoc">
        <path id="javadoc.classpath">
            <path refid="classpath"/>
            <fileset dir="${basedir}/modules/opt/lib" includes="*.jar" excludes="catalina-708.jar"/>
        </path>
        <mkdir dir="${basedir}/docs"/>
        <mkdir dir="${basedir}/docs/api"/>
        <javadoc
             access="public" 
             destdir="${basedir}/docs/api"
             doclet="ExcludeDoclet"
             docletpathref="javadoc.classpath"
             author="false"
             version="true"
             use="true"
             sourcePath="${common.src};${module.src};${remoting.src};${proxy.src};${opt.src}/jrun;${opt.src}/oracle;${opt.src}/tomcat;${opt.src}/weblogic;${opt.src}/websphere"
             classpathref="javadoc.classpath"
             packageNames="flex.*"
             failonerror="true"
             windowtitle="${manifest.Implementation-Title} - Public APIs">
 
             <doctitle><![CDATA[<h1>${manifest.Implementation-Title} - Public APIs</h1><h2>Build: ${manifest.Implementation-Version}.${build.number}</h2>]]></doctitle>
             <bottom><![CDATA[<i>Copyright &#169; 2008 Adobe Systems Inc. All Rights Reserved.</i>]]></bottom>
             <group title="Messaging APIs" packages="flex.messaging:flex.messaging.services"/>
             <group title="AMF Serialization APIs" packages="flex.messaging.io.amf"/>
             <group title="Logging and Debugging APIs" packages="flex.messaging.log"/>
             <group title="Configuration APIs" packages="flex.messaging.config:flex.messaging.security"/>
             <group title="Management APIs" packages="flex.management, flex.management.jmx, flex.management.runtime.*"/>
             <link offline="false" href="http://java.sun.com/j2se/1.5.0/docs/api/" packagelistLoc="C:\tmp"/>
        </javadoc>
        <zip destfile="${basedir}/docs/javadoc.zip" basedir="${basedir}/docs/api" />
    </target>

</project>

