# 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}
qa.dir=${basedir}/qa
appserver.dir=${basedir}/servers/apache-tomcat-6.0.29

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

servlet.jar=${blazeds.dir}/servers/apache-tomcat-6.0.29/lib/servlet-api.jar
jms.jar=${blazeds.dir}/lib/jms.jar
jta.jar=${blazeds.dir}/lib/jta.jar
jmxri.jar=${blazeds.dir}/lib/jmxri.jar
hsqldb.jar=${blazeds.dir}/lib/hsqldb/hsqldb.jar
junit.jar=${ant.home}/lib/junit.jar

#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.
