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

QPID_LIBS=$(build-classpath backport-util-concurrent \
                            commons-beanutils \
                            commons-beanutils-core \
                            commons-cli \
                            commons-codec \
                            commons-collections \
                            commons-configuration \
                            commons-digester \
                            commons-lang \
                            commons-logging \
                            commons-logging-api \
                            dom4j \
                            geronimo-jms-1.1-api \
                            isorelax \
                            jaxen \
                            log4j \
                            mina/core \
                            mina/filter-ssl \
                            mina/java5 \
                            msv-msv \
                            qpid-broker \
                            qpid-client \
                            qpid-common \
                            relaxngDatatype \
                            slf4j)

export JAVA=java \
       JAVA_VM=-server \
       JAVA_MEM=-Xmx1024m \
       CLASSPATH=$QPID_LIBS
