<?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" default="main" basedir=".">

	<property name="FLEX_HOME" location=".."/>

	<!-- properties -->
	<property file="${FLEX_HOME}/build.properties"/>

	<property name="FLEX_LIB" value="${FLEX_HOME}/lib"/>
	<property name="javac.src" value="1.5"/>
	
	<!-- Property for the platform.  -->
    <condition property="isMac" value="true">
        <os family="mac"/>
    </condition>
    <condition property="isWindows">
        <os family="windows" />
    </condition>	
    <condition property="isLinux">
        <and>
          <os family="unix"/>    
          <not>
            <os family="mac"/>    
          </not>
        </and>
    </condition>

	<!--
		Notes: If you're running the main target, then there is no need to call clean first.
		Each of the main targets for the modules will call clean themselves before proceeding.
	-->

	<target name="main" depends="thirdparty-downloads,modules" description="Full build" />

	<target name="dev" depends="modules-dev" description="Runs src.depend build for development"/>

    <target name="super-clean" depends="thirdparty-clean,clean" description="Cleans everything including thirdparty downloads."/>
    
    <!-- 
       To clean these you must call thirdparty-clean or super-clean to clean everything.  
       clean does not remove these since they don't change often and the downloads take time.
    -->
    <target name="thirdparty-downloads" unless="downloads.jar.done" 
        description="Downloads all the required thirdparty JARs.">
        <ant antfile="${basedir}/downloads.xml" target="main" dir="${basedir}"/>
        <echo message="Use thirdparty-clean or super-clean to remove these."/> 
        <property name="downloads.jar.done" value="true"/>
    </target>
    
    <!--
		Cleanup
	-->
	
    <target name="thirdparty-clean" description="Removes all thirdparty JAR downloads.">
        <ant antfile="${basedir}/downloads.xml" target="clean" dir="${basedir}"/>
    </target>

    <target name="clean" depends="batik-clean,velocity-clean">
		<ant dir="${basedir}/asc/build/java" target="clean"/>
		<ant dir="${basedir}/swfutils" target="clean"/>
		<ant dir="${basedir}/fxgutils" target="clean"/>
		<ant dir="${basedir}/debugger" target="clean"/>
		<ant dir="${basedir}/compiler" target="clean"/>
		<ant dir="${basedir}/antTasks" target="clean"/>
        <ant dir="${basedir}/asc/build/java" target="clean"/>
        <ant dir="${basedir}/thirdparty/xerces-patch" target="clean"/>
        <delete includeemptydirs="true" failonerror="false">
            <fileset dir="${FLEX_LIB}">
                <include name="*" />
                <exclude name="adt.jar"/>
            </fileset>
        </delete>
	</target>

	<!--
		Build Java module JARs.
	-->

	<target name="modules" depends="thirdparty,asc,swfutils,fxgutils,compiler,debugger,antTasks" description="Full build of all JARs"/>

	<!--
	   dev does not do a clean first and the batik and velocity libraries are not rebuilt.
	-->
	<target name="modules-dev" depends="asc-dev,swfutils-dev,fxgutils-dev,compiler-dev,debugger-dev,antTasks-dev" description="Build src.depend JARs"/>

	<target name="asc" description="Full build of asc.jar">
		<ant dir="${basedir}/asc/build/java"/>
		<copy file="${basedir}/asc/lib/asc.jar" tofile="${FLEX_LIB}/asc.jar"/>
	</target>

	<target name="asc-dev" description="Build src.depend asc">
		<ant dir="${basedir}/asc/build/java" target="dev"/>
	</target>

	<target name="swfutils" description="Full build of swfutils.jar">
		<ant dir="${basedir}/swfutils"/>
	</target>

	<target name="swfutils-dev" description="Build src.depend swfutils">
		<ant dir="${basedir}/swfutils" target="dev"/>
	</target>

	<target name="fxgutils" description="Full build of fxgutils.jar">
		<ant dir="${basedir}/fxgutils"/>
	</target>

	<target name="fxgutils-dev" description="Build src.depend fxgutils">
		<ant dir="${basedir}/fxgutils" target="dev"/>
	</target>

	<target name="debugger" description="Full build of fdb.jar">
		<ant dir="${basedir}/debugger"/>
	</target>

	<target name="debugger-dev" description="Build src.depend debugger">
		<ant dir="${basedir}/debugger" target="dev"/>
	</target>

	<target name="compiler" depends="thirdparty" description="Full build of compiler JARs">
		<ant dir="${basedir}/compiler"/>
	</target>

	<target name="compiler-dev" depends="thirdparty" description="Build src.depend compiler JARs">
		<ant dir="${basedir}/compiler" target="dev"/>
	</target>

	<target name="antTasks" description="Full build of antTasks" unless="antTasks.compiled" >
		<ant dir="${basedir}/antTasks"/>
		<property name="antTasks.compiled" value="true"/>
	</target>

	<target name="antTasks-dev" description="Build src.depend antTasks" >
		<ant dir="${basedir}/antTasks" target="dev"/>
	</target>

    <target name="thirdparty" depends="xerces-patch,batik,velocity" />
    
	<target name="xerces-patch" description="Build xercesPatch.jar based on xerces 2.9.1" >
        <ant dir="${basedir}/thirdparty/xerces-patch"/>
    </target>
	
	<target name="batik" description="Build batik-all-flex.jar">
        <ant antfile="${basedir}/downloads.xml" target="batik-jars" dir="${basedir}"/>
		<ant dir="${basedir}/thirdparty/batik" target="batik-all-flex-jar">
	        <property name="deprecation" value="off"/>
	        <property name="sun-codecs.disabled" value="true"/>
	    </ant>
	</target>

	<target name="batik-clean">
		<ant dir="${basedir}/thirdparty/batik" target="batik-all-flex-clean"/>
	</target>
	
    <target name="velocity" description="Build velocity-dep-1.4-flex.jar">
		
		<echo message="This target should be run with Java 1.4.2_14. It doesn't work with Java 1.5."/>
		<echo message="Note that velocity builds with several 'enum' is a keyword warnings."/>

        <ant antfile="${basedir}/downloads.xml" target="velocity-jars" dir="${basedir}"/>
		<ant dir="${basedir}/thirdparty/velocity/build" target="jar-dep-flex"/>
	</target>

    <target name="velocity-clean">
	    <mkdir dir="${basedir}/thirdparty/velocity/build/lib"/>
		<ant dir="${basedir}/thirdparty/velocity/build" target="jar-dep-flex-clean"/>
	    <delete dir="${basedir}/thirdparty/velocity/build/lib"/>
    </target>

</project>
