################################################################################
##
##  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 = Apache Flex 4.9.0
release.version = 4.9.0

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

playerglobal.version = 11.1

locale = en_US

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

# 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 Flex SDK
manifest.Implementation-Version=${release.version}
manifest.Implementation-Vendor=The Apache Software Foundation
manifest.Implementation-Vendor-Id=org.apache
