<?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="proxy/build.xml" default="main" basedir="..">

    <!-- properties -->
    <property file="${basedir}/build.properties"/>
    <property name="lib.dir" value="${basedir}/lib"/>

    <property name="module.dir" value="${basedir}/proxy"/>
    <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-proxy.jar"/>

    <property name="build.number" value=""/>

    <path id="classpath">
        <fileset dir="${lib.dir}" erroronmissingdir="false" includes="flex-messaging-common.jar"/>
        <fileset dir="${lib.dir}" erroronmissingdir="false" includes="flex-messaging-core.jar"/>
        <fileset dir="${servlet.dir}" erroronmissingdir="false" includes="servlet-api-${servlet.version}.jar"/>
        <fileset dir="${httpclient.dir}" erroronmissingdir="false"
                 includes="commons-httpclient-${httpclient.version}.jar"/>
    </path>

    <target name="main" depends="clean,prepare,run-depend,jar" description="cleans and runs the full build"/>

    <target name="prepare">
        <echo>${ant.file}</echo>
        <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="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 quiet="true" dir="${module.classes}"/>
        <echo>modules/proxy clean</echo>
    </target>

    <target name="compile" depends="prepare" description="compile">
        <javac debug="${src.debug}" destdir="${module.classes}" srcdir="${module.src}"
               includes="**/*.java" classpathref="classpath"/>
        <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>
    </target>

    <!-- jar containing proxy infrastructure -->
    <target name="jar" depends="compile">
        <jar destfile="${module.jar}" basedir="${module.classes}">
            <include name="flex/management/**"/>
            <include name="flex/messaging/**"/>
            <exclude name=".dependency-info/**"/>
            <manifest>
                <attribute name="Sealed" value="${manifest.sealed}"/>
                <attribute name="Implementation-Title"
                           value="${manifest.Implementation-Title} - Community Edition - Proxy Module"/>
                <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>

</project>
