<?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="sdk_ide_install" default="install" basedir=".">

	<property name="FLEX_HOME" location="${basedir}"/>
	
	<!-- this script supports the usingDownloadCache property and
	 downloadCacheFolder property to cache downloads in the
	 folder specified by downloadCacheFolder.  This can make
	 a huge difference in future runs although there is some
	 risk around caching bad downloads and/or needing to
	 clean up the cache -->
	
	<!-- 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="windows"/>
			<equals arg1="${sun.arch.data.model}" arg2="64"/>
			<equals arg1="${os.arch}" arg2="x86_64"/>
			<equals arg1="${ant.java.version}" arg2="1.6"/>
		</and>
	</condition>

	<property file="${FLEX_HOME}/env.properties"/>
	<property environment="env"/>
	<property file="${FLEX_HOME}/local.properties"/>
	<property file="${FLEX_HOME}/build.properties"/>
	<property name="bundle" value="en_US" />
	
	<property file="${basedir}/${bundle}.properties"/>
	
	<property file="${FLEX_HOME}/installer.properties/${bundle}.properties"/>
	<property file="${FLEX_HOME}/installer.properties/en_US.properties"/>
	<property name="download.dir" value="${FLEX_HOME}/in"/>

	<property name="air.dmg.mount" value="/Volumes/AIR SDK/"/>

	<condition property="platform" value="mac">
		<os family="mac" />
	</condition>
	<condition property="platform" value="windows">
		<os family="windows" />
	</condition>
	<condition property="platform" value="linux">
		<os family="unix" />
	</condition>
	<condition property="isMac" value="mac">
		<os family="mac" />
	</condition>
	<condition property="isWindows" value="windows">
		<os family="windows" />
	</condition>
	<condition property="isLinux" value="linux">
		<os family="unix" />
	</condition>
	
	<condition property="AIRDownloadEcho" value="${INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS}">
		<os family="windows" />
	</condition>
	<property name="AIRDownloadEcho" value="${INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC}" />
	
	<condition property="air.donot.ask" value="true">
		<isset property="installer" />
	</condition>
	<condition property="flash.donot.ask" value="true">
		<isset property="installer" />
	</condition>
	<condition property="fontswf.donot.ask" value="true">
		<isset property="installer" />
	</condition>
	
	<condition property="java.home" value="${env.JAVA_HOME}">
		<and>
			<available file="${env.JAVA_HOME}" type="dir" />
			<not>
				<equals arg1="" arg2="${env.JAVA_HOME}" />
			</not>
		</and>
	</condition>

	<target name="get-md5-data" depends="get-air-md5-data,get-flash-md5-data">
	</target>
	<target name="get-air-md5-data" if="air-has-md5">
		<property name="air.sdk.url.md5" refid="${air.sdk.url.md5.ref}" />
	</target>
	<target name="get-flash-md5-data" if="flash-has-md5">
		<property name="flash.sdk.url.md5" refid="${flash.sdk.url.md5.ref}" />
	</target>

	<target name="get-data">
		<tstamp />
		<property name="ts" value="${DSTAMP}${TSTAMP}" />
		<property name="xml.properties" value="https://feathersui.com/sdk/feathers-sdk-manager/sdk-manager-config-1.0.xml?ts=${ts}" />
		<mkdir dir="${download.dir}"/>
		<get src="${xml.properties}" dest="${download.dir}/sdk-manager-config-1.0.xml" />
		<xmlproperty file="${download.dir}/sdk-manager-config-1.0.xml" semanticAttributes="true" collapseAttributes="true"/>
		<xmlproperty file="${basedir}/flex-sdk-description.xml" semanticAttributes="true" collapseAttributes="true"/>
		<condition property="air.sdk.version" value="${config.airsdk.linux.versions.default}">
			<equals arg1="${platform}" arg2="linux" />
		</condition>
		<condition property="air.sdk.version" value="${config.airsdk.windows.versions.default}">
			<equals arg1="${platform}" arg2="windows" />
		</condition>
		<condition property="air.sdk.version" value="${config.airsdk.mac.versions.default}">
			<equals arg1="${platform}" arg2="mac" />
		</condition>
		<property name="flash.sdk.version" value="${config.flashsdk.versions.default}"/>
		<condition property="flash.version.changed" value="true">
			<not>
				<equals arg1="${playerglobal.version}" arg2="${flash.sdk.version}" />
			</not>
		</condition>
		<condition property="air.version.changed" value="true">
			<not>
				<equals arg1="${air.version}" arg2="${air.sdk.version}" />
			</not>
		</condition>
		<condition property="air.sdk.version.ref" value="${air.sdk.versionID}" >
			<isset property="air.sdk.versionID" />
		</condition>
		<property name="air.sdk.version.ref" value="${air.sdk.version}" />
		<condition property="flash.sdk.version.ref" value="${flash.sdk.versionID}" >
			<isset property="flash.sdk.versionID" />
		</condition>
		<property name="flash.sdk.version.ref" value="${flash.sdk.version}" />
		
		<property name="air.sdk.url.server.ref" value="air.sdk.server.${platform}.${air.sdk.version.ref}" />
		<property name="air.sdk.url.server" refid="${air.sdk.url.server.ref}" />
		<property name="air.sdk.url.folder.ref" value="air.sdk.folder.${platform}.${air.sdk.version.ref}" />
		<property name="air.sdk.url.folder" refid="${air.sdk.url.folder.ref}" />
		<property name="air.sdk.url.file.ref" value="air.sdk.file.${platform}.${air.sdk.version.ref}" />
		<property name="air.sdk.url.file" refid="${air.sdk.url.file.ref}" />
		<property name="air.sdk.url.md5.ref" value="air.sdk.md5.${platform}.${air.sdk.version.ref}" />
		<condition property="air-has-md5">
			<isreference refid="${air.sdk.url.md5.ref}" />
		</condition>
		<property name="flash.sdk.url.server.ref" value="flash.sdk.server.${flash.sdk.version.ref}" />
		<property name="flash.sdk.url.server" refid="${flash.sdk.url.server.ref}" />
		<property name="flash.sdk.url.folder.ref" value="flash.sdk.folder.${flash.sdk.version.ref}" />
		<property name="flash.sdk.url.folder" refid="${flash.sdk.url.folder.ref}" />
		<property name="flash.sdk.url.file.ref" value="flash.sdk.file.${flash.sdk.version.ref}" />
		<property name="flash.sdk.url.file" refid="${flash.sdk.url.file.ref}" />
		<property name="flash.sdk.url.md5.ref" value="flash.sdk.md5.${flash.sdk.version.ref}" />
		<condition property="flash-has-md5">
			<isreference refid="${flash.sdk.url.md5.ref}" />
		</condition>
		<property name="flash.sdk.swfversion.ref" value="flash.sdk.swfversion.${flash.sdk.version.ref}" />
		<property name="flash.sdk.swfversion" refid="${flash.sdk.swfversion.ref}" />
		<property name="flash.sdk.default.swfversion.ref" value="flash.sdk.swfversion.${playerglobal.version}" />
		<property name="flash.sdk.default.swfversion" refid="${flash.sdk.default.swfversion.ref}" />
		<condition property="flash.swfversion.changed" value="true">
			<not>
				<equals arg1="${flash.sdk.swfversion}" arg2="${flash.sdk.default.swfversion}" />
			</not>
		</condition>

		<property name="afe.url.server" refid="afe.url.server" />
		<property name="afe.url.folder" refid="afe.url.folder" />
		<property name="afe.url.file" refid="afe.url.file" />
		<property name="afe.url.cachefile" refid="afe.url.cachefile" />

		<property name="agl.url.server" refid="agl.url.server" />
		<property name="agl.url.folder" refid="agl.url.folder" />
		<property name="agl.url.file" refid="agl.url.file" />
		<property name="agl.url.cachefile" refid="agl.url.cachefile" />

		<property name="fontkit.url.server" refid="fontkit.url.server" />
		<property name="fontkit.url.folder" refid="fontkit.url.folder" />
		<property name="fontkit.url.file" refid="fontkit.url.file" />
		<property name="fontkit.url.cachefile" refid="fontkit.url.cachefile" />
		
		<property name="rideau.url.server" refid="rideau.url.server" />
		<property name="rideau.url.folder" refid="rideau.url.folder" />
		<property name="rideau.url.file" refid="rideau.url.file" />
		<property name="rideau.url.cachefile" refid="rideau.url.cachefile" />
	</target>
	
	<target name="install" depends="get-data,get-md5-data,check-binary,ask-licenses,get-third-party-files,fixup-config-files" description="Converts binary package to IDE compatible folder">
		<delete dir="${download.dir}" />
		<echo>${install.complete.echo}</echo>
	</target>
	
	<target name="check-binary" description="Make sure this is a binary package">
		<fail message="${basedir} is not an Flex binary package">
			<condition>
				<not>
					<available file="${basedir}/frameworks/libs/framework.swc" />
				</not>
			</condition>
		</fail>
		<fail message="${basedir} is not an Flex binary package and is probably a git repo">
			<condition>
				<available file="$[basedir}/.gitignore" />
			</condition>
		</fail>
	</target>
	
	<target name="ask-licenses" depends="ask-air,ask-flash,ask-adobe-fontswf" description="Ask about the various licenses">
	</target>
	
	<target name="ask-air" unless="air.donot.ask"
		description="Prompt the user before downloading AIR">
		
		<input
		message="${air.prompt.text}"
		validargs="${yes.no.prompts}"
		defaultvalue="${no}"
		addproperty="input.air.download"/>
		<condition property="do.air.install">
			<equals arg1="${yes}" arg2="${input.air.download}"/>
		</condition>
		<fail message="${ERROR_REQUIRED_LICENSE}" unless="do.air.install" />
		<!-- Only ask once per ant run.  -->
		<property name="air.donot.ask" value="set"/>
	</target>

	<target name="ask-flash" unless="flash.donot.ask"
		description="Prompt the user before downloading playerglobal.swc">
		
		<input
		message="${flash.prompt.text}"
		validargs="${yes.no.prompts}"
		defaultvalue="${no}"
		addproperty="input.flash.download"/>
		<condition property="do.flash.install">
			<equals arg1="${yes}" arg2="${input.flash.download}"/>
		</condition>
		<fail message="${ERROR_REQUIRED_LICENSE}" unless="do.flash.install" />
		<!-- Only ask once per ant run.  -->
		<property name="flash.donot.ask" value="set"/>
	</target>

	<target name="ask-adobe-fontswf" unless="fontswf.donot.ask"
		description="Prompt the user before downloading FontSWF">
		
		<input
		message="${fontswf.prompt.text}"
		validargs="${yes.no.prompts}"
		defaultvalue="${no}"
		addproperty="input.fontswf.download"/>
		<condition property="do.fontswf.install">
			<equals arg1="${yes}" arg2="${input.fontswf.download}"/>
		</condition>
		<!-- Only ask once per ant run.  -->
		<property name="fontswf.donot.ask" value="set"/>
	</target>

	<target name="get-third-party-files" depends="air-download,flash-download,fontswf-download" />
	
	<target name="air-check" description="Checks if AIR SDK has been downloaded.">
		<available file="${FLEX_HOME}/lib/adt.jar" property="skip.air.install"/>
		<condition property="skip.air.install" value="true">
			<not>
				<isset property="do.air.install" />
			</not>
		</condition>
	</target>
	
	<target name="air-download" depends="air-check" unless="skip.air.install"
		description="Downloads AIR SDK and copies to correct locations">
		
		<antcall target="air-get" />

		<antcall target="air-setup-win" />
		<antcall target="air-setup-mac" />

		<!-- Starling requires renderMode direct in AIR descriptors -->
		<replace file="${FLEX_HOME}/samples/descriptor-sample.xml">
			<replacetoken><![CDATA[</initialWindow>]]></replacetoken>
			<replacevalue><![CDATA[	<renderMode>direct</renderMode>
	</initialWindow>]]></replacevalue>
		</replace>
		<replace file="${FLEX_HOME}/templates/air/descriptor-template.xml">
			<replacetoken><![CDATA[<!-- <renderMode></renderMode> -->]]></replacetoken>
			<replacevalue><![CDATA[<renderMode>direct</renderMode>]]></replacevalue>
		</replace>
	</target>

	<target name="air-get-check">
		<available file="${download.dir}/${air.sdk.url.file}" property="air.downloaded" />
	</target>
		
	<target name="air-get" depends="air-get-check" unless="air.downloaded">
		<echo>${AIRDownloadEcho} ${air.sdk.url.server}/${air.sdk.url.folder}/${air.sdk.url.file}</echo>
		<antcall target="download_air" >
			<param name="srcDomain" value="${air.sdk.url.server}" />
			<param name="srcFolder" value="${air.sdk.url.folder}" />
			<param name="srcFile" value="${air.sdk.url.file}" />
			<param name="dest" value="${download.dir}/${air.sdk.url.file}" />
			<param name="failmessage" value="AIR SDK download failed" />
		</antcall>
		<antcall target="download_air_with_md5" >
			<param name="srcDomain" value="${air.sdk.url.server}" />
			<param name="srcFolder" value="${air.sdk.url.folder}" />
			<param name="srcFile" value="${air.sdk.url.file}" />
			<param name="dest" value="${download.dir}/${air.sdk.url.file}" />
			<param name="failmessage" value="AIR SDK download failed" />
			<param name="md5" value="${air.sdk.url.md5}" />
		</antcall>
	</target>
	
	<target name="air-setup-win" if="isWindows">
		<unzip src="${download.dir}/${air.sdk.url.file}" dest="${download.dir}/airsdk" />
		<echo>${INFO_FINISHED_UNZIPPING} ${download.dir}/${air.sdk.url.file}</echo>
		<copy todir="${FLEX_HOME}" overwrite="true">
			<fileset dir="${download.dir}/airsdk">
				<include name="AIR SDK license.pdf" />
				<include name="AIR SDK Readme.txt" />
				<include name="airsdk.xml" />
				<include name="bin/adl.exe" />
				<include name="bin/adt.bat" />
				<include name="frameworks/libs/air/**" />
				<include name="frameworks/projects/air/**" />
				<include name="include/**" />
				<include name="install/android/**" />
				<include name="lib/adt.jar" />
				<include name="lib/android/**" />
				<include name="lib/aot/**" />
				<include name="lib/nai/**" />
				<include name="lib/win/**" />
				<include name="runtimes/**" />
				<include name="samples/badge/**" />
				<include name="samples/descriptor-sample.xml" />
				<include name="samples/icons/**" />
				<include name="templates/air/**" />
				<include name="templates/extensions/**" />
				<include name="templates/sdk/**" />
			</fileset>
		</copy>
	</target>
	
	<target name="air-setup-mac" depends="air-decompress-mac,mac-dmg,mac-tbz2" unless="isWindows">
		<antcall target="mac-copy-file">
			<param name="srcdir" value="." />
			<param name="filename" value="AIR SDK license.pdf"/>
			<param name="destdir" value="${FLEX_HOME}" />
		</antcall>
		<antcall target="mac-copy-file">
			<param name="srcdir" value="." />
			<param name="filename" value="AIR SDK Readme.txt"/>
			<param name="destdir" value="${FLEX_HOME}" />
		</antcall>
		<antcall target="mac-copy-file">
			<param name="srcdir" value="." />
			<param name="filename" value="airsdk.xml"/>
			<param name="destdir" value="${FLEX_HOME}" />
		</antcall>
		<antcall target="mac-copy-file">
			<param name="srcdir" value="bin" />
			<param name="filename" value="adl"/>
			<param name="destdir" value="${FLEX_HOME}/bin" />
		</antcall>
		<antcall target="mac-copy-file">
			<param name="srcdir" value="bin" />
			<param name="filename" value="adt"/>
			<param name="destdir" value="${FLEX_HOME}/bin" />
		</antcall>
		<antcall target="mac-copy-file">
			<param name="srcdir" value="lib" />
			<param name="filename" value="adt.jar"/>
			<param name="destdir" value="${FLEX_HOME}/lib" />
		</antcall>
		<antcall target="mac-copy-file">
			<param name="srcdir" value="samples" />
			<param name="filename" value="descriptor-sample.xml"/>
			<param name="destdir" value="${FLEX_HOME}/samples" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="frameworks/libs/air" />
			<param name="destdir" value="${FLEX_HOME}/frameworks/libs" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="frameworks/projects/air" />
			<param name="destdir" value="${FLEX_HOME}/frameworks/projects" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="include" />
			<param name="destdir" value="${FLEX_HOME}" />
		</antcall>
		<antcall target="mac-copy-dir-if-exists">
			<param name="srcdir" value="install/android" />
			<param name="destdir" value="${FLEX_HOME}/install" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="lib/android" />
			<param name="destdir" value="${FLEX_HOME}/lib" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="lib/aot" />
			<param name="destdir" value="${FLEX_HOME}/lib" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="lib/nai" />
			<param name="destdir" value="${FLEX_HOME}/lib" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="runtimes" />
			<param name="destdir" value="${FLEX_HOME}" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="samples/badge" />
			<param name="destdir" value="${FLEX_HOME}/samples" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="samples/icons" />
			<param name="destdir" value="${FLEX_HOME}/samples" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="templates/air" />
			<param name="destdir" value="${FLEX_HOME}/templates" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="templates/extensions" />
			<param name="destdir" value="${FLEX_HOME}/templates" />
		</antcall>
		<antcall target="mac-copy-dir">
			<param name="srcdir" value="templates/sdk" />
			<param name="destdir" value="${FLEX_HOME}/templates" />
		</antcall>
	</target>
	
	<target name="mac-dmg" if="isDMG">
		<mkdir dir="${download.dir}/airsdk" />
		<move file="${download.dir}/${air.sdk.url.file}" todir="${download.dir}/airsdk" />
		<echo message="Mounting AIR SDK DMG: ${air.sdk.url.file}"/>
		<exec executable="/usr/bin/hdiutil" os="Mac OS X" failonerror="true">
			<arg value="attach"/>
			<arg value="-nobrowse"/>
			<arg value="${download.dir}/airsdk/${air.sdk.url.file}"/>
		</exec>
		<echo message="Copying AIR SDK from mounted volume"/>
		<exec executable="rsync" dir="${FLEX_HOME}">
            <arg value="--archive" />
            <arg value="--ignore-existing" />
            <arg value="--force" />
            <arg value="${air.dmg.mount}"/>
            <arg value="${download.dir}/airsdk" />
        </exec>
		<echo message="Unmounting AIR SDK DMG"/>
		<exec executable="/usr/bin/hdiutil" os="Mac OS X" failonerror="false">
			<arg value="unmount"/>
			<arg value="${air.dmg.mount}"/>
		</exec>
	</target>
	
	<target name="mac-tbz2" if="isTBZ2">
		<mkdir dir="${download.dir}/airsdk" />
		<move file="${download.dir}/${air.sdk.url.file}" todir="${download.dir}/airsdk" />
		<exec executable="bunzip2" dir="${download.dir}/airsdk" failonerror="true">
			<arg value="${air.sdk.url.file}" />
		</exec>
		<echo file="${basedir}/airtar.properties">air.tar.name=${air.sdk.url.file}</echo>
		<replace file="${basedir}/airtar.properties" token="tbz2" value="tar" />
		<property file="${basedir}/airtar.properties" />
		<exec executable="tar" dir="${download.dir}/airsdk" failonerror="true">
			<arg value="-xvf" />
			<arg value="${air.tar.name}" />
		</exec>
		<echo>${INFO_FINISHED_UNTARING} ${download.dir}/airsdk/${air.tar.name}</echo>
		<delete file="${basedir}/airtar.properties" />
	</target>
	
	<target name="air-decompress-mac" unless="isWindows">
		<condition property="isDMG" value="dmg">
			<matches pattern="dmg" string="${air.sdk.url.file}"/>
		</condition>
		<condition property="isTBZ2" value="tbz2">
			<not>
				<isset property="isDMG" />
			</not>
		</condition>
	</target>
	
	<target name="mac-copy-file" description="copies a file">
		<mkdir dir="${destdir}" />
		<exec executable="cp" dir="${FLEX_HOME}">
			<arg value="-p" />
			<arg value="${download.dir}/airsdk/${srcdir}/${filename}"/>
			<arg value="${destdir}" />
		</exec>
	</target>
	
	<target name="mac-copy-dir" description="copies a directory using exec and rsync so that symbolic links are preserved">
		<echo file="${basedir}/maccopy.properties">mac.copy.echo=${mac.copy.echo.pattern}</echo>
		<property file="${basedir}/maccopy.properties" />
		<delete file="${basedir}/maccopy.properties" />
		<echo>${mac.copy.echo}</echo>
		<exec executable="rsync" dir="${FLEX_HOME}">
			<arg value="--archive" />
			<arg value="--ignore-existing" />
			<arg value="--force" />
			<arg value="${download.dir}/airsdk/${srcdir}"/>
			<arg value="${destdir}" />
		</exec>
	</target>

	<target name="mac-copy-dir-if-exists" depends="mac-check-exists" if="${srcdir}.exists" description="copies a directory using exec and rsync so that symbolic links are preserved">
		<echo file="${basedir}/maccopy.properties">mac.copy.echo=${mac.copy.echo.pattern}</echo>
		<property file="${basedir}/maccopy.properties" />
		<echo>${mac.copy.echo}</echo>
		<exec executable="rsync" dir="${FLEX_HOME}">
			<arg value="--archive" />
			<arg value="--ignore-existing" />
			<arg value="--force" />
			<arg value="${download.dir}/airsdk/${srcdir}"/>
			<arg value="${destdir}" />
		</exec>
	</target>
	
	<target name="mac-check-exists">
		<available file="${download.dir}/airsdk/${srcdir}" type="dir" property="${srcdir}.exists" />
	</target>

	<!-- Because this requires a network connection it downloads Flash SDK only if it doesn't already exist. -->
	<target name="flash-check" description="Checks if Flash SDK has been downloaded.">
		<available file="${FLEX_HOME}/frameworks/libs/player/${flash.sdk.version}/playerglobal.swc" property="skip.flash.install"/>
		<condition property="skip.flash.install" value="true">
			<not>
				<isset property="do.flash.install" />
			</not>
		</condition>
	</target>
	
	<target name="flash-download" depends="flash-check" unless="skip.flash.install"
		description="Downloads playerglobal.swc and copies to correct locations">
		
		<mkdir dir="${download.dir}"/>
		<mkdir dir="${FLEX_HOME}/frameworks/libs/player/${flash.sdk.version}"/>
		<echo>${INFO_INSTALLING_PLAYERGLOBAL_SWC} ${flash.sdk.url.server}/${flash.sdk.url.folder}/${flash.sdk.url.file}</echo>
		<antcall target="download_flash" >
			<param name="srcDomain" value="${flash.sdk.url.server}" />
			<param name="srcFolder" value="${flash.sdk.url.folder}" />
			<param name="srcFile" value="${flash.sdk.url.file}" />
			<param name="dest" value="${FLEX_HOME}/frameworks/libs/player/${flash.sdk.version}/playerglobal.swc" />
			<param name="message" value="${INFO_INSTALLING_PLAYERGLOBAL_SWC} ${flash.sdk.url.server}/${flash.sdk.url.folder}/${flash.sdk.url.file}" />
			<param name="failmessage" value="Flash SDK download failed" />
		</antcall>
		<antcall target="download_flash_with_md5" >
			<param name="srcDomain" value="${flash.sdk.url.server}" />
			<param name="srcFolder" value="${flash.sdk.url.folder}" />
			<param name="srcFile" value="${flash.sdk.url.file}" />
			<param name="dest" value="${FLEX_HOME}/frameworks/libs/player/${flash.sdk.version}/playerglobal.swc" />
			<param name="message" value="${INFO_INSTALLING_PLAYERGLOBAL_SWC} ${flash.sdk.url.server}/${flash.sdk.url.folder}/${flash.sdk.url.file}" />
			<param name="failmessage" value="Flash SDK download failed" />
			<param name="md5" value="${flash.sdk.url.md5}" />
		</antcall>
	</target>

	<!-- fontswf -->
	<!-- Because this requires a network connection it downloads only if it doesn't already exist. -->
	<target name="fontswf-check" description="Checks if fontswf has been downloaded.">
		<condition property="skip.fontswf.install">
			<and>
				<available file="${basedir}/lib/external/optional/afe.jar" />
				<available file="${basedir}/lib/external/optional/aglj40.jar" />
				<available file="${basedir}/lib/external/optional/flex-fontkit.jar" />
				<available file="${basedir}/lib/external/optional/rideau.jar" />
			</and>
		</condition>
		<condition property="skip.fontswf.install" value="true">
			<not>
				<isset property="do.fontswf.install" />
			</not>
		</condition>
	</target>

	<target name="fontswf-download" depends="fontswf-check" unless="skip.fontswf.install"
		description="Copies fontswf from Open@Adobe">
		
		<echo file="${basedir}/afe.properties">afe.echo=${INFO_DOWNLOADING_FILE_FROM}</echo>
		<replace file="${basedir}/afe.properties" token="{0}" value="${afe.url.file}" />
		<replace file="${basedir}/afe.properties" token="{1}" value="${afe.url.server}/${afe.url.folder}" />
		<property file="${basedir}/afe.properties" />
		<delete file="${basedir}/afe.properties" />
		<echo>${afe.echo}</echo>

		<mkdir dir="${basedir}/lib/external/optional"/>
		<antcall target="download_using_get" >
			<param name="srcDomain" value="${afe.url.server}" />
			<param name="srcFolder" value="${afe.url.folder}" />
			<param name="srcFile" value="${afe.url.file}" />
			<param name="cacheFile" value="${afe.url.cachefile}" />
			<param name="dest" value="${basedir}/lib/external/optional/afe.jar" />
			<param name="failmessage" value="afe.jar download failed" />
		</antcall>

		<echo file="${basedir}/agl.properties">agl.echo=${INFO_DOWNLOADING_FILE_FROM}</echo>
		<replace file="${basedir}/agl.properties" token="{0}" value="${agl.url.file}" />
		<replace file="${basedir}/agl.properties" token="{1}" value="${agl.url.server}/${agl.url.folder}" />
		<property file="${basedir}/agl.properties" />
		<delete file="${basedir}/agl.properties" />
		<echo>${agl.echo}</echo>
		
		<antcall target="download_using_get" >
			<param name="srcDomain" value="${agl.url.server}" />
			<param name="srcFolder" value="${agl.url.folder}" />
			<param name="srcFile" value="${agl.url.file}" />
			<param name="cacheFile" value="${agl.url.cachefile}" />
			<param name="dest" value="${basedir}/lib/external/optional/aglj40.jar" />
			<param name="failmessage" value="aglj40.jar download failed" />
		</antcall>

		<echo file="${basedir}/fontkit.properties">fontkit.echo=${INFO_DOWNLOADING_FILE_FROM}</echo>
		<replace file="${basedir}/fontkit.properties" token="{0}" value="${fontkit.url.file}" />
		<replace file="${basedir}/fontkit.properties" token="{1}" value="${fontkit.url.server}/${fontkit.url.folder}" />
		<property file="${basedir}/fontkit.properties" />
		<delete file="${basedir}/fontkit.properties" />
		<echo>${fontkit.echo}</echo>
		
		<antcall target="download_using_get" >
			<param name="srcDomain" value="${fontkit.url.server}" />
			<param name="srcFolder" value="${fontkit.url.folder}" />
			<param name="srcFile" value="${fontkit.url.file}" />
			<param name="cacheFile" value="${fontkit.url.cachefile}" />
			<param name="dest" value="${basedir}/lib/external/optional/flex-fontkit.jar" />
			<param name="failmessage" value="flex-fontkit.jar download failed" />
		</antcall>

		<echo file="${basedir}/rideau.properties">rideau.echo=${INFO_DOWNLOADING_FILE_FROM}</echo>
		<replace file="${basedir}/rideau.properties" token="{0}" value="${rideau.url.file}" />
		<replace file="${basedir}/rideau.properties" token="{1}" value="${rideau.url.server}/${rideau.url.folder}" />
		<property file="${basedir}/rideau.properties" />
		<delete file="${basedir}/rideau.properties" />
		<echo>${rideau.echo}</echo>
		
		<antcall target="download_using_get" >
			<param name="srcDomain" value="${rideau.url.server}" />
			<param name="srcFolder" value="${rideau.url.folder}" />
			<param name="srcFile" value="${rideau.url.file}" />
			<param name="cacheFile" value="${rideau.url.cachefile}" />
			<param name="dest" value="${basedir}/lib/external/optional/rideau.jar" />
			<param name="failmessage" value="rideau.jar download failed" />
		</antcall>
		
		<!-- fontkit expects swfutils in the same folder -->
		<copy file="${basedir}/lib/swfutils.jar" tofile="${basedir}/lib/external/optional/swfutils.jar" />
	</target>

	<target name="fixup-config-files" depends="flex-sdk-description-flash,flex-sdk-description-air">
		<echo>${INFO_INSTALLING_CONFIG_FILES}</echo>
		<antcall target="fixup-config-files-version" />
		<antcall target="fixup-config-files-swfversion" />
		<tstamp />
		<property name="build.number.date" value="${DSTAMP}" />
		<replace file="${FLEX_HOME}/frameworks/flex-config.xml">
			<replacefilter token="{playerglobalHome}"
				value="libs/player"/>
			<replacefilter token="$${build.number}"
				value="${release.version}.${build.number.date}"/>
		</replace>
		<replace file="${FLEX_HOME}/frameworks/air-config.xml">
			<replacefilter token="{airHome}/frameworks/libs"
			value="libs"/>
			<replacefilter token="$${build.number}"
				value="${release.version}.${build.number.date}"/>
		</replace>
		<replace file="${FLEX_HOME}/frameworks/airmobile-config.xml">
			<replacefilter token="{airHome}/frameworks/libs"
			value="libs"/>
		</replace>
		<copy file="${FLEX_HOME}/frameworks/flex-config.xml" tofile="${FLEX_HOME}/ide/flashbuilder/config/flex-config.xml" overwrite="true" />
		<copy file="${FLEX_HOME}/frameworks/air-config.xml" tofile="${FLEX_HOME}/ide/flashbuilder/config/air-config.xml" overwrite="true" />
		<copy file="${FLEX_HOME}/frameworks/airmobile-config.xml" tofile="${FLEX_HOME}/ide/flashbuilder/config/airmobile-config.xml" overwrite="true" />
	</target>
	
	<target name="fixup-config-files-version" if="flash.version.changed">
		<replace file="${FLEX_HOME}/frameworks/flex-config.xml">
			<replacefilter token="&lt;target-player&gt;${playerglobal.version}&lt;/target-player&gt;"
							value="&lt;target-player&gt;${flash.sdk.version}&lt;/target-player&gt;"/>
		</replace>
		<replace file="${FLEX_HOME}/frameworks/air-config.xml">
			<replacefilter token="&lt;target-player&gt;${playerglobal.version}&lt;/target-player&gt;"
			value="&lt;target-player&gt;${flash.sdk.version}&lt;/target-player&gt;"/>
		</replace>
		<replace file="${FLEX_HOME}/frameworks/airmobile-config.xml">
			<replacefilter token="&lt;target-player&gt;${playerglobal.version}&lt;/target-player&gt;"
			value="&lt;target-player&gt;${flash.sdk.version}&lt;/target-player&gt;"/>
		</replace>
	</target>
	
	<target name="fixup-config-files-swfversion" if="flash.swfversion.changed">
		<replace file="${FLEX_HOME}/frameworks/flex-config.xml">
			<replacefilter token="&lt;swf-version&gt;${flash.sdk.default.swfversion}&lt;/swf-version&gt;"
							value="&lt;swf-version&gt;${flash.sdk.swfversion}&lt;/swf-version&gt;"/>
		</replace>
		<replace file="${FLEX_HOME}/frameworks/air-config.xml">
			<replacefilter token="&lt;swf-version&gt;${flash.sdk.default.swfversion}&lt;/swf-version&gt;"
			value="&lt;swf-version&gt;${flash.sdk.swfversion}&lt;/swf-version&gt;"/>
		</replace>
		<replace file="${FLEX_HOME}/frameworks/airmobile-config.xml">
			<replacefilter token="&lt;swf-version&gt;${flash.sdk.default.swfversion}&lt;/swf-version&gt;"
			value="&lt;swf-version&gt;${flash.sdk.swfversion}&lt;/swf-version&gt;"/>
		</replace>
	</target>
	
	<target name="flex-sdk-description-flash" if="flash.version.changed">
		<replace file="${FLEX_HOME}/flex-sdk-description.xml">
			<replacefilter token="FP${playerglobal.version}"
				value="FP${flash.sdk.version}"/>
		</replace>
	</target>
	<target name="flex-sdk-description-air" if="air.version.changed">
		<replace file="${FLEX_HOME}/flex-sdk-description.xml">
			<replacefilter token="AIR${air.version}"
				value="AIR${air.sdk.version}"/>
		</replace>
	</target>
		
	<target name="download_air" unless="air-has-md5">
		<antcall target="download_using_get" />
	</target>
	<target name="download_air_with_md5" if="air-has-md5">
		<antcall target="download_using_get" />
	</target>
	<target name="download_flash" unless="flash-has-md5">
		<antcall target="download_using_get" />
	</target>
	<target name="download_flash_with_md5" if="flash-has-md5">
		<antcall target="download_using_get" />
	</target>

	<!--
	 Download a file and optionally verify the checksum.
	 If the checksum fails, this script fails.  This
	 target uses the cache, if desired.
	 
	 Params are:
	 srcDomain
	 srcFolder
	 srcFile
	 dest
	 [md5]
	 [srcMD5Domain]
	 -->
	<target name="download_using_get" depends="check-cache"
		description="Downloads file, and optionally verifies checksum.">
		
		<antcall target="get-if-not-cached">
		</antcall>
		<antcall target="copy-if-cached">
		</antcall>
	</target>
	
	<target name="get-if-not-cached" unless="found-in-cache">
		<antcall target="get-with-no-params" />
		<antcall target="get-with-params" />
		<antcall target="get-local" />
		<antcall target="check-sum" />
		<condition property="skipCache">
			<not>
				<isset property="usingDownloadCache" />
			</not>
		</condition>
		<antcall target="put-in-cache" />
	</target>
	
	<target name="check-params" >
		<condition property="has-params">
			<and>
				<contains string="${srcDomain}/${srcFolder}/${srcFile}" substring="?" />
				<not>
					<contains string="${srcDomain}/${srcFolder}/${srcFile}" substring="file://" />
				</not>
			</and>
		</condition>
		<condition property="is-local">
			<contains string="${srcDomain}/${srcFolder}/${srcFile}" substring="file://" />
		</condition>
		<condition property="not-local-no-params">
			<and>
				<not>
					<contains string="${srcDomain}/${srcFolder}/${srcFile}" substring="file://" />
				</not>
				<not>
					<contains string="${srcDomain}/${srcFolder}/${srcFile}" substring="?" />
				</not>
			</and>
		</condition>
	</target>
	
	<target name="get-local" depends="check-params" if="is-local" >
		<get src="${srcDomain}/${srcFolder}/${srcFile}" dest="${dest}"/>
	</target>
	<target name="get-with-no-params" depends="check-params" if="not-local-no-params" >
		<get src="${srcDomain}/${srcFolder}/${srcFile}?ts=${ts}" dest="${dest}"/>
	</target>
	<target name="get-with-params" depends="check-params" if="has-params" >
		<get src="${srcDomain}/${srcFolder}/${srcFile}&amp;ts=${ts}" dest="${dest}"/>
	</target>
	
	<target name="copy-if-cached" if="found-in-cache">
		<condition property="cacheFile" value="${srcFile}" >
			<not>
				<isset property="cacheFile" />
			</not>
		</condition>
		<echo>${INFO_USING_CACHED_FILE} ${downloadCacheFolder}/${srcFolder}/${cacheFile}</echo>
		<copy file="${downloadCacheFolder}/${srcFolder}/${cacheFile}" tofile="${dest}" overwrite="true" />
	</target>
	
	<target name="check-cache" if="usingDownloadCache">
		<condition property="cacheFile" value="${srcFile}" >
			<not>
				<isset property="cacheFile" />
			</not>
		</condition>
		<available file="${downloadCacheFolder}/${srcFolder}/${cacheFile}" property="found-in-cache" />
	</target>
	
	<target name="put-in-cache" unless="skipCache">
		<condition property="cacheFile" value="${srcFile}" >
			<not>
				<isset property="cacheFile" />
			</not>
		</condition>
		<copy tofile="${downloadCacheFolder}/${srcFolder}/${cacheFile}" file="${dest}" />
	</target>
	
	<target name="check-sum" if="md5"
		description="Verifies MD5 checksum, and fails if checksum doesn't match">
		
		<echo>${INFO_VALIDATING_FILE} ${dest}</echo>
		<checksum file="${dest}" algorithm="MD5" verifyproperty="we.failed" property="${md5}" />
		<fail message="${failmessage}">
			<condition>
				<equals arg1="${we.failed}" arg2="false" />
			</condition>
		</fail>
	</target>
</project>
