################################################################################
##
##  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.7
# these two are used by CI server
releaseversion = 0.9.7
developbranchname=develop

# 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


