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

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

	<property name="THEME_NAME" value="arcade" />

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

    <!-- If you change this, update <target-player/> in the <compc/> tasks. -->
    <property name="local.playerglobal.version" value="11.1"/>

	<target name="main" depends="clean,compile" description="Clean build of ${THEME_NAME}.swc"/>

	<target name="clean">
		<delete failonerror="false">
			<fileset dir="${basedir}">
				<include name="${THEME_NAME}.swc"/>
				<include name="${THEME_NAME}.swc.incr"/>
			</fileset>
			<fileset dir="${basedir}/src/assets">
				<include name="flex_skins.swf"/>
			</fileset>
		</delete>
	</target>

	<target name="compile" description="Compiles ${THEME_NAME}.swc">
		<echo message="Compiling samples/themes/${THEME_NAME}/${THEME_NAME}.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. Classpath is set up to work in dev and released environments -->
		<taskdef resource="flexTasks.tasks">
			<classpath>
				<pathelement path="${FLEX_HOME}/ant/lib/flexTasks.jar"/>
				<pathelement path="${FLEX_HOME}/lib/flexTasks.jar"/>
			</classpath>
		</taskdef>
		<!-- Compile flex_skins.swf from fxg files -->		
		<mxmlc fork="true"
               file="${basedir}/src/assets/flex_skins.as"
			   output="${basedir}/src/assets/flex_skins.swf">
            <!-- If you change this, update ${local.playerglobal.version} above. -->
            <target-player>10</target-player>
			<jvmarg line="${compc.jvm.args}"/>
			<source-path path-element="${basedir}/src/assets"/>
			<library-path/>
            <external-library-path dir="${env.PLAYERGLOBAL_HOME}">
                <include name="${playerglobal.version}/playerglobal.swc"/>
            </external-library-path>
			<locale/>
		</mxmlc>
		<!--
			This project builds a theme SWC containing skin classes.
			It has no MXML tags and therefore no manifest.
			Link in all classes.
			Compile against all of the SDK libs externally.
			Link in accessibility support.
			Include various CSS and asset files in the SWC.
			Don't put any resources into the SWC. (The classes don't require any.)
		-->		
		<compc fork="true"
			   output="${basedir}/${THEME_NAME}.swc">
            <!-- If you change this, update ${local.playerglobal.version} above. -->
            <target-player>10</target-player>
			<jvmarg line="${compc.jvm.args}"/>
			<include-classes>ArcadeClasses</include-classes>
			<source-path path-element="${basedir}/src"/>
			<library-path />
            <external-library-path dir="${FLEX_HOME}/frameworks/libs">
				<include name="framework.swc"/>
				<include name="spark.swc"/>
                <include name="textLayout.swc"/>
                <include name="osmf.swc"/>
				<include name="mx/mx.swc"/>
			</external-library-path>
            <external-library-path dir="${env.PLAYERGLOBAL_HOME}">
                <include name="${playerglobal.version}/playerglobal.swc"/>
            </external-library-path>
			<include-file name="defaults.css" path="${basedir}/src/defaults.css"/>
			<include-file name="assets/flex_skins.swf" path="${basedir}/src/assets/flex_skins.swf"/>
			<include-file name="preview.jpg" path="${basedir}/src/preview.jpg"/>
			<include-file name="metadata.xml" path="${basedir}/src/metadata.xml"/>
			<locale/>
			<accessible>true</accessible>
		</compc>
	</target>
	
</project>
