################################################################################
##
##  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
#   ROYALE_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 Royale SDK.
#
#
# On Windows (32-bit), the setting might be
#   env.ASJS_HOME =C:\\dev\\apache-royale\\royale-asjs
#
# On Mac, the setting might be
#   env.ASJS_HOME =/Users/username/dev/apache-royale/royale-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