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

    <property name="FLEX_HOME" location="${basedir}/../../.."/>
    
    <property file="${FLEX_HOME}/env.properties"/>
    <property environment="env"/>
	<property file="${FLEX_HOME}/build.properties"/>

	<target name="main" depends="clean,compile" description="Clean build of automation_air.swc"/>
		
	<target name="compile" description="Compiles automation_air.swc">
		<echo message="Compiling frameworks/libs/automation/automation_air.swc"/>
		<!-- Load the <compc> task. We can't do this at the <project> level -->
		<!-- because targets that run before flexTasks.jar gets built would fail. -->
		<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/lib/flexTasks.jar"/>
		<!--
			Link in the classes (and their dependencies) for the MXML tags
			listed in this project's manifest.xml.
			Also link the additional classes (and their dependencies)
			listed in FrameworkClasses.as,
			because these aren't referenced by the manifest classes.
			Keep the standard metadata when compiling.
			Link in accessibility support.
			Include the appropriate CSS files and assets in the SWC.
			Don't include any resources in the SWC.
			Write a bundle list of referenced resource bundles
			into the file bundles.properties in this directory.
		-->
	
		<compc fork="true"
			   output="${FLEX_HOME}/frameworks/libs/automation/automation_air.swc">
			<jvmarg line="${compc.jvm.args}"/>
            <load-config filename="compile-config.xml" />
            <arg value="+playerglobal.version=${playerglobal.version}" />
            <arg value="+env.AIR_HOME=${env.AIR_HOME}" />
		</compc>
	</target>

	<target name="clean">
		<delete failonerror="false">
			<fileset dir="${basedir}" >
				<include name="bundles.properties"/>
			</fileset>
			<fileset dir="${FLEX_HOME}/frameworks/libs/automation">
				<include name="automation_air.swc"/>
				<include name="automation_air.swc.incr"/>
			</fileset>
			<fileset dir="${FLEX_HOME}/frameworks/libs">
				<include name="automation_air.swc"/>
				<include name="automation_air.swc.incr"/>
			</fileset>
		</delete>
	</target>

</project>
