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