<?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.

-->

<!-- Note:
    If you modify this file you may have to make the same change in build_framework.xml.
    build_framework.xml is renamed to build.xml when it is packaged.
    It is used to build the frameworks directory from the zip file. 
-->
<project name="ModuleExample" default="main" basedir=".">

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

    <!-- Required for OSX 10.6 / Snow Leopard Performance. -->
    <!-- Java 7 on Mac requires OSX 10.7.3 or higher and is 64-bit only -->
    <!-- local.d32 is set/used in build.properties so this needs to be done first. -->
    <condition property="local.d32" value="-d32">
        <and>
            <os family="mac"/>
            <matches pattern="1.6.*" string="${java.version}"/>
            <equals arg1="${sun.arch.data.model}" arg2="64"/>
            <equals arg1="${os.arch}" arg2="x86_64"/>
        </and>
    </condition>

    <!-- Property for the platform.  -->
    <condition property="isMac">
        <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>  
 
    <target name="main" depends="check-compile-env,clean,prepare,compile" 
        description="Clean build of all examples"/>

    <target name="check-compile-env" description="Check for the required environment variables">
    </target>

    
    <target name="prepare" depends="thirdparty-downloads"/>
            
    <target name="thirdparty-downloads" unless="no.thirdparty-downloads" description="Downloads all the required thirdparty code.">
        <!--<ant antfile="${basedir}/downloads.xml" dir="${basedir}"/>-->
    </target>
    
    <target name="compile" description="Compile Examples" >
        <ant dir="${basedir}/MainApp/" inheritall="false"/>
        <ant dir="${basedir}/Module" inheritall="false"/>
    </target>
    
    <!--
		Cleanup
	-->

    <target name="super-clean" depends="thirdparty-clean,clean" description="Cleans everything including thirdparty downloads."/>
	
    <target name="thirdparty-clean" unless="no.thirdparty-clean" description="Removes all thirdparty downloads.">
        <!--<ant antfile="${basedir}/downloads.xml" target="clean" dir="${basedir}"/>-->
    </target>
    
    <target name="clean" description="Cleans all SWCs and their resource bundles">
        <ant dir="${basedir}/MainApp" target="clean"/>
        <ant dir="${basedir}/Module" target="clean"/>
    </target>

    <target name="examine" description="Cleans all SWCs and their resource bundles">
        <ant dir="${basedir}/MainApp" target="examine"/>
    </target>

</project>
