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

# flex-sdk-description values
release.name = Apache Royale
# this is the version that appears in the flex-sdk-description <description> tag
# and on the package name.  This is the publicly known version of Royale
release.version = 0.9.0

# fb.release.version must start with 4 in order for FB to accept it.
# intellij seems to want it to be at least 4.6 in order to not use certain
# older plugins that have incompatible Java APIs.
# this property should only go in flex-sdk-description.xml <version> tag
fb.release.version = 4.14.1

# override on command line with -Dbuild.number=999 or in local.properties
build.number = 0

# Flash player version for which player global swc to use
playerglobal.version = 11.1

# AIR version number
air.version = 14.0

# Default locale for the SDK
locale = en_US

qa.dir = ${basedir}/../qa
asc = ${basedir}/bin/asc

# TextLayputFormat branch. Location of the textLayout directory in the TLF repo.
#tlf.branch = 

# For Java 7 on Mac OS X, you need an Intel-based Mac running Mac OS X version 10.7.3 
# (Lion) and above.  Only the 64-bit data model is available so leave this blank.
# Since ant properties are immutable, if this property is set in the build file before
# this file is included, setting it to nothing here is a no-op.
local.d32 =

src.depend = true
src.debug = on

# JVM options for <compc> and <mxmlc> tasks
jvm.args = ${local.d32} -Xms64m -Xmx384m -ea -Dapple.awt.UIElement=true
    # -d32/-d64 for 32-bit/64-bit code model (or don't specify for the default)
	# -Xms64m: start out with a 64 MB heap
	# -Xmx384m: allow the heap to grow to 384 MB
	# -ea: enable Java assertions
compc.jvm.args = ${jvm.args}
mxmlc.jvm.args = ${jvm.args}

# JAR Manifest Entries
manifest.sealed=false
manifest.Implementation-Title=Apache Royale SDK
manifest.Implementation-Version=${release.version}
manifest.Implementation-Vendor=The Apache Software Foundation
manifest.Implementation-Vendor-Id=org.apache

generated.by.match=\ * Generated by Apache Royale Compiler
generated.by.comment=\ * Generated by Apache Royale Compiler

asfheader=\ * Licensed under the Apache License, Version 2.0 (the 'License');\n\
\ * you may not use this file except in compliance with the License.\n\
\ * You may obtain a copy of the License at\n\
\ *\n\
\ *     http://www.apache.org/licenses/LICENSE-2.0\n\
\ *\n\
\ * Unless required by applicable law or agreed to in writing, software\n\
\ * distributed under the License is distributed on an 'AS IS' BASIS,\n\
\ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\
\ * See the License for the specific language governing permissions and\n\
\ * limitations under the License.\n\
\ *\n


