################################################################################
##
##  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.
##
################################################################################

# If you choose to use this file, rename it to env.properties and uncomment the
# properties you wish to set.

# For each of
#
#   AIR_HOME
#   FLASHPLAYER_DEBUGGER
#   PLAYERGLOBAL_HOME
#   FLEX_HOME
#   TLF_HOME
#
# you need to set an environment variable with that name or set the property here
# prefixed with "env.".  If a property is set in this file, and the corresponding 
# environment variable is also set, the property set here takes precedence over the 
# corresponding environment variable.
#
# Use absolute file paths. 
# 
# This is a Java property file.  On Windows if you use the '\' file 
# separator you must use "\\", but not escape spaces, for example,
#
#       env.FLASHPLAYER_DEBUGGER=z:\\tools\\player\\flashplayer_11_sa_debug_32bit.exe
#
# See the README file for more information about the different variables.

#
# Set this to the directory that contains the unzipped Adobe AIR SDK for your
# platform.
#
#env.AIR_HOME=

#
# Set this to absolute path that contains the Adobe Flash Player content debugger
# for your platform.  
#
#env.FLASHPLAYER_DEBUGGER=

#
# PLAYERGLOBAL_HOME is a directory which contains one or more subdirectories.
# The name of each subdirectory corresponds to a supported target player version and
# in each of the subdirectories is the playerglobal.swc that corresponds to that target 
# player.  The default 
# 
# For this sample directory structure, set PLAYERGLOBAL_HOME to the full path of the
# player directory.
#
#       - player (dir)
#           - 11.1 (dir)
#               playerglobal.swc (file)
#
#env.PLAYERGLOBAL_HOME=

#
# Set this to the directory that contains a Flex SDK.
#
# On Windows (32-bit), the setting might be
#   env.FLEX_HOME=C:\\dev\\apache-flex\\flex-sdk
#
# On Mac, the setting might be
#   env.FLEX_HOME=/Users/username/dev/apache-flex/flex-sdk
#
#env.FLEX_HOME=

#
# Set this to the directory that contains the Text Layout Framework.
#
#
# On Windows (32-bit), the setting might be
#   env.TLF_HOME =C:\\dev\\apache-flex\\flex-tlf
#
# On Mac, the setting might be
#   env.TLF_HOME =/Users/username/dev/apache-flex/flex-tlf
#
#env.TLF_HOME=

#
# Set this to the directory that contains a FlexJS SDK.
#
#
# On Windows (32-bit), the setting might be
#   env.ASJS_HOME =C:\\dev\\apache-flex\\flex-asjs
#
# On Mac, the setting might be
#   env.ASJS_HOME =/Users/username/dev/apache-flex/flex-asjs
#
#env.ASJS_HOME=

#
# Set this to the directory that contains Google Closure Library
#
#env.GOOG_HOME=

#
# If you use a player global that is different that the default of 11.0,
# you need to set it here.
#env.PLAYERGLOBAL_VERSION=21.0