# 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.
src.depend=true
src.debug=on
blazeds.dir=${basedir}
servlet.version=2.5
activemq.version=5.7.0
codec.version=1.6
collections.version=3.2.1
httpclient.version=3.0.1
logging.version=1.1.1
log4j.version=1.2.14
spring.version=3.0.7
xalan.version=2.6.0
catalina.version=6.0.26
catalina7.version=7.0.8
catalina4.version=4.0.6
local.sdk.lib.dir=./modules/sdk/lib
local.sdk.frameworks.dir=./frameworks
local.sdk.bundles.dir=./frameworks/locale
sdk.bin.dir=${blazeds1.dir}/bin
sdk.lib.dir=${blazeds1.dir}/lib
compc.dir=${blazeds1.dir}/bin
sdk.version=4
sdk.frameworks=${local.sdk.frameworks.dir}
sdk.zip.dir=${blazeds.dir}/resources/flex_sdk
sdk.zip.file=flex_sdk_${sdk.version}.zip
sdk.zip=${sdk.zip.dir}/${sdk.zip.file}
min.sdk.version=3.5
branch=blazeds/trunk
webapp.ce.lib=flex-messaging-common.jar,flex-messaging-core.jar,flex-messaging-proxy.jar,flex-messaging-remoting.jar,flex-messaging-opt.jar,commons-logging-1.1.1.jar,commons-codec-1.5.jar,commons-httpclient-3.1.jar,backport-util-concurrent.jar,concurrent.jar,cfgatewayadapter.jar,xalan.jar,flex-rds-server.jar
webapp.lib=flex-messaging-common.jar,flex-messaging-core.jar,flex-messaging-proxy.jar,flex-messaging-remoting.jar,flex-messaging-opt.jar,,commons-logging-1.1.1.jar,commons-codec-1.5.jar,commons-httpclient-3.1.jar,backport-util-concurrent.jar,concurrent.jar,jsafeJCE.jar,fxgutils.jar,flex-rds-server.jar
webapp.classes=commons-logging.properties
webtier.lib=flex-bootstrap.jar,flex-bootstrap-jsp.jar
webtier.jars=asc.jar,batik*.jar,commons-collections-3.1.jar,commons-discovery.jar,commons-logging-1.1.1.jar,flex-messaging-common.jar,flex-webtier-jsp.jar,flex-webtier.jar,license.jar,velocity-dep-1.4-flex.jar,mxmlc.jar,oscache.jar,swfutils.jar,xercesImpl.jar,xercesPatch.jar,xmlParserAPIs.jar,flex-fontkit.jar,fxgutils.jar,mm-velocity-1.4.jar
flex.libs=playerglobal.swc,automation.swc,datavisualization.swc,flex.swc,framework.swc,utilities.swc,fds.swc,rpc.swc
axis.jars=activation.jar, axis.jar, commons-discovery-0.2.jar, jaxrpc.jar, saaj.jar, wsdl4j-1.5.1.jar
qa-services.jars=qa-services.jar, qa-services-wm.jar, javax_mail.jar
jgroups.jars=jgroups-core-2.9.0GA.jar,log4j.jar
# Set this to true if you have an updated version of a non-fds swc in the frameworks/local-swcs directory
# that needs to be used by the build until the regular approval process picks up the external 
# change.
# This should always be false unless you are explicitly overriding a swc (or swcs).
# See the readme.txt file in the local-swcs directory for more information.
use.local.swcs=false
#player uninstaller file names
uninstaller.exe=uninstall_flash_player.exe
#player 11 file names
fp11.installer.exe=11.1/win/InstallAX.exe
fp11.installer.plugin.exe=11.1/win/InstallPlugin.exe
#player 10 file names
fp10.installer.exe=10.2/win/InstallAX.exe
fp10.installer.plugin.exe=10.2/win/InstallPlugin.exe
#player 9 file name
fp9.installer.exe=win/Install Flash Player 9 ActiveX.exe
fp9.installer.plugin.exe=win/Install Flash Player 9 Plugin.exe
# set the fb3 pro license in your environment if don't want watermarks
# using environment variable so that we're not checking in a 
# plain text license into source control
env.fb3_license=fake
env.fb4_license=fake
######################
# Manifest Entries
######################
manifest.sealed=false
manifest.Implementation-Title=BlazeDS
manifest.Implementation-Version=4.6.0
manifest.Implementation-Vendor=Adobe Systems Inc.
