<?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_spark" 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_spark.swc and en_US">
		<!--<bundle locale="${locale}"/>-->
	</target>
	
	<target name="compile" description="Compiles automation_spark.swc">
		<echo message="Compiling frameworks/libs/automation/automation_spark.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_spark.swc">
			<jvmarg line="${compc.jvm.args}"/>
            <load-config filename="compile-config.xml" />
            <arg value="+playerglobal.version=${playerglobal.version}" />
            <arg value="+env.PLAYERGLOBAL_HOME=${env.PLAYERGLOBAL_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_spark.swc"/>
				<include name="automation_spark.swc.incr"/>
			</fileset>
			<fileset dir="${FLEX_HOME}/frameworks/libs">
				<include name="automation_spark.swc"/>
				<include name="automation_spark.swc.incr"/>
			</fileset>
		</delete>
	</target>
</project>