#
#  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.   
#
# -------------------------------------------------------------------
# I N C L U D E   P R O P E R T I E S
# -------------------------------------------------------------------
# Specifies the location of jar files to include in the classpath


#
# the relative base directory
#

jsieve.dir = ..

#
#  third party binary directories
#

lib.dir = ${jsieve.dir}/stage
lib.jsieve.dir = ${lib.dir}/org.apache.jsieve/jars

# --------------------------------------------------
#                REQUIRED LIBRARIES
# --------------------------------------------------

# ----- From lib

# ----- Commons -----
commons-logging.jar=${lib.dir}/commons-logging/jars/commons-logging-1.1.1.jar

# ----- Log4J -----
log4j.jar=${lib.dir}/log4j/jars/log4j-1.2.14.jar

# ----- JUnit -----
junit.jar=${lib.dir}/junit/jars/junit-3.8.1.jar

# ----- JavaCC ----
javacc.jar=${lib.dir}/net.java/jars/javacc-4.1.jar

# ----- BND tool -----
bnd.jar.relative=${lib.dir}/biz.aQute/jars/bnd-0.0.249.jar

# ----- Mailet API ---

mailet.jar=${lib.dir}/org.apache.james/jars/apache-mailet-2.4.jar
mailet-base.jar=${lib.dir}/org.apache.james/jars/apache-mailet-base-1.0.jar
mime4j.jar=${lib.dir}/org.apache.james/jars/apache-mime4j-0.6.jar

# --------------------------------------------------
#                LIBRARIES REQUIRED FOR TESTING
# --------------------------------------------------
mail.jar=${lib.dir}/javax.mail/jars/mail-1.4.1.jar
activation.jar=${lib.dir}/javax.activation/jars/activation-1.1.1.jar

jmock.jar=${lib.dir}/jmock/jars/jmock-1.1.0.jar
