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

    <property file="${basedir}/env.properties"/>
    <property environment="env"/>
    <property file="${basedir}/local.properties"/>
    <property file="${basedir}/build.properties"/>
    <condition property="FLEX_HOME" value="${env.FLEX_HOME}">
        <isset property="env.FLEX_HOME" />
    </condition>
    <condition property="AIR_HOME" value="${env.AIR_HOME}">
        <isset property="env.AIR_HOME" />
    </condition>

    <!-- SDK properties -->
    <property name="FLEX_HOME" value="C:/air3_beta2"/>
    <property name="AIR_HOME" value="C:/air3_beta2"/>
	<property name="ADL" value="${AIR_HOME}/bin/adl.exe"/>
    <property name="ADT.JAR" value="${AIR_HOME}/lib/adt.jar"/>
	
     <target name="init" depends="clean">
    </target>
	
    <!-- additional tasks - mxmlc tag -->
    <path id="flexTasks.path">
        <fileset dir="${FLEX_HOME}">
            <include name="lib/flexTasks.jar" />
            <include name="ant/lib/flexTasks.jar" />
        </fileset>
    </path>
    <taskdef resource="flexTasks.tasks" classpathref="flexTasks.path"/>
    
	<target name="compile" depends="init">
		<mxmlc file="${basedir}/src/TourDeFlex.mxml"
            output="${basedir}/src/TourDeFlex.swf" fork="true" failonerror="true">
			<load-config filename="${FLEX_HOME}/frameworks/air-config.xml"/>
            <source-path path-element="${basedir}/src"/>
		</mxmlc>
	</target>
	
    <target name="test" depends="compile">
    </target>
   
    <target name="clean" description="clean up">
    	<delete file="${basedir}/src/TourDeFlex.swf"/>
    </target>
</project>