# 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.


#extra jars that are used when compiling qa src but are not defined 
#in the top level build.properties file
xalan.jar=${blazeds.dir}/lib/xalan.jar

#this is required for running regressions and code coverage runs off of the branch
appserver.dir=${blazeds.dir}/servers/apache-tomcat-6.0.29

#names of qa swcs to copy to the WEB-INF/flex/libs directory of the various webapps
qa.libs=mxunit.swc,flexunit.swc

#names of qa jars needed to use the apache commons http client library
httpclient.jars=commons-httpclient-3.1.jar,commons-logging.jar,commons-codec-1.3.jar