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

commons-beanutils-core=lib/required/commons-beanutils-core-1.8.3.jar
commons-cli=lib/required/commons-cli-1.2.jar
commons-codec=lib/required/commons-codec-1.6.jar
commons-collections=lib/required/commons-collections-3.2.1.jar
commons-configuration=lib/required/commons-configuration-1.8.jar
commons-digester=lib/required/commons-digester-1.8.1.jar
commons-lang=lib/required/commons-lang-2.6.jar
commons-logging=lib/required/commons-logging-1.1.1.jar

derby-db=lib/required/derby-10.8.2.2.jar

geronimo-jms=lib/required/geronimo-jms_1.1_spec-1.0.jar
geronimo-j2ee=lib/required/geronimo-j2ee-connector_1.5_spec-2.0.0.jar
geronimo-jta=lib/required/geronimo-jta_1.1_spec-1.1.1.jar
geronimo-kernel=lib/required/geronimo-kernel-2.2.1.jar
geronimo-openejb=lib/required/geronimo-ejb_3.0_spec-1.0.1.jar
geronimo-servlet=lib/required/geronimo-servlet_2.5_spec-1.2.jar

junit=lib/required/junit-3.8.1.jar
mockito-all=lib/required/mockito-all-1.9.0.jar

gson-all=lib/required/gson-2.0.jar

log4j=lib/required/log4j-1.2.16.jar

slf4j-api=lib/required/slf4j-api-1.6.4.jar
slf4j-log4j=lib/required/slf4j-log4j12-1.6.4.jar

xalan=lib/required/xalan-2.7.0.jar

jetty=lib/required/jetty-server-7.6.10.v20130312.jar
jetty-continuation=lib/required/jetty-continuation-7.6.10.v20130312.jar
jetty-security=lib/required/jetty-security-7.6.10.v20130312.jar
jetty-util=lib/required/jetty-util-7.6.10.v20130312.jar
jetty-io=lib/required/jetty-io-7.6.10.v20130312.jar
jetty-http=lib/required/jetty-http-7.6.10.v20130312.jar
jetty-servlet=lib/required/jetty-servlet-7.6.10.v20130312.jar
jetty-websocket=lib/required/jetty-websocket-7.6.10.v20130312.jar
servlet-api=${geronimo-servlet}

dojo=lib/required/dojo-war-1.8.3.war

jackson-core=lib/required/jackson-core-asl-1.9.0.jar
jackson-mapper=lib/required/jackson-mapper-asl-1.9.0.jar

commons-configuration.libs = ${commons-beanutils-core} ${commons-digester} \
  ${commons-codec} ${commons-lang} ${commons-collections} ${commons-configuration}

common.libs=${slf4j-api}
client.libs=${geronimo-jms}
amqp-1-0-common.libs=
amqp-1-0-client.libs=
amqp-1-0-client-example.libs=${commons-cli}
amqp-1-0-client-jms.libs=${geronimo-jms}
tools.libs=${commons-configuration.libs} ${log4j}
broker.libs=${commons-cli} ${commons-logging} ${log4j} ${slf4j-log4j} \
    ${xalan} ${derby-db} ${commons-configuration.libs} \
    ${jackson-core} ${jackson-mapper} ${jetty} ${jetty-continuation} ${jetty-security} ${jetty-http} ${jetty-io} ${jetty-servlet} ${jetty-util} ${servlet-api} ${jetty-websocket}

broker-plugins-management-http.libs=${jetty} ${jetty-continuation} ${jetty-security} ${jetty-http} ${jetty-io} ${jetty-servlet} ${jetty-util} ${servlet-api}  ${jackson-core} ${jackson-mapper}
broker-plugins.libs=${log4j} ${commons-configuration.libs}

test.libs=${slf4j-log4j} ${log4j} ${junit} ${slf4j-api} ${mockito-all}

perftests.libs=${geronimo-jms} ${slf4j-api} ${log4j} ${slf4j-log4j} ${commons-logging} ${commons-collections} ${commons-beanutils-core} ${commons-lang} ${gson-all} ${derby-db}

management-common.libs=

common.test.libs=${test.libs}
broker.test.libs=${test.libs}
client.test.libs=${test.libs}
client-example.test.libs=${test.libs}
tools.test.libs=
systests.libs=${test.libs}
perftests.test.libs=${test.libs}

broker-plugins-access-control.test.libs=${test.libs}
broker-plugins-management-http.test.libs=${test.libs}
broker-plugins-management-jmx.test.libs=${test.libs}
broker-plugins-jdbc-store.test.libs=${test.libs}
broker-plugins-derby-store.test.libs=${test.libs}
broker-plugins-memory-store.test.libs=${test.libs}
broker-plugins-amqp-0-8-protocol.test.libs=${test.libs}
broker-plugins-amqp-0-10-protocol.test.libs=${test.libs}
broker-plugins-amqp-1-0-protocol.test.libs=${test.libs}

management-common.test.libs=${test.libs}

# JCA Resource adapter
jca.libs=${geronimo-j2ee} ${geronimo-jta} ${geronimo-jms} ${geronimo-openejb} ${geronimo-servlet} ${geronimo-kernel}
jca.test.libs=${test.libs}

# optional bdbstore module deps
bdb-je=lib/bdbstore/je-5.0.73.jar
bdbstore.libs=${bdb-je}
bdbstore.test.libs=${test.libs}

bdbstore-jmx.libs=${bdb-je}
bdbstore-jmx.test.libs=${test.libs}

# optional perftests-visualisation-jfc module deps
jfreechart.jar=lib/jfree/jfreechart-1.0.13.jar
jcommon.jar=lib/jfree/jcommon-1.0.16.jar
csvjdbc.jar=lib/csvjdbc/csvjdbc-1.0.8.jar
perftests-visualisation-jfc.libs=${jfreechart.jar} ${jcommon.jar} ${csvjdbc.jar} ${derby-db}
perftests-visualisation-jfc.test.libs=${test.libs}

# optional libs for the boneCP jdbc connection pool
bonecp=lib/bonecp/bonecp-0.7.1.RELEASE.jar
guava=lib/bonecp/guava-14.0.1.jar
broker-plugins-jdbc-provider-bone.libs=${bonecp} ${guava}

# Libraries used only within the build
bnd=lib/required/bnd-0.0.384.jar
jython=lib/required/jython-standalone-2.5.2.jar
maven-ant-tasks=lib/required/maven-ant-tasks-2.1.1.jar
velocity.jar=lib/required/velocity-1.4.jar
velocity-dep.jar=lib/required/velocity-dep-1.4.jar
