#
#  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.
#   
# -------------------------------------------------------------------
# B U I L D  P R O P E R T I E S
# -------------------------------------------------------------------
# Specifies default property values
# Overridden by ../default.properties and all ant.properties
# Not user-editable; use ant.properties files instead
# See also: include.properties

name=apache-jsieve
Name=jSieve Mail Filter
version.spec=0.3
version=${version.spec}-SNAPSHOT
year=2009
extension.name=org.apache.jsieve
vendor=The Apache Software Foundation
vendor.id=org.apache
creator=James Project Of The Apache Software Foundation
title.spec=Apache James JSieve
title.impl=Apache James JSieve

#
# compiler options
# (There should be no need to override default compiler but need to change
# javac task to run without this}

build.compiler = modern
jdk.source = 1.5
jdk.target = 1.5

#
# compiler switches
# (these are here only for those who use jikes compiler)
#

build.compiler.emacs = on
build.compiler.pedantic = true
build.compiler.depend = true
build.compiler.fulldepend = true

#
# standard compiler switches
#

debug = on
optimize = on
deprecation = on

#
#  location of intermediate products
#

build.dir = ${basedir}/target
build.lib = ${build.dir}
build.src = ${build.dir}/src
build.classes = ${build.dir}/classes
build.classes.test = ${build.dir}/test-classes
build.javadocs = ${build.docs}/javadocs
build.docs = ${build.dir}/docs
build.conf = ${build.dir}/conf
build.javacc = ${build.dir}/javacc

#
# source properties
#

src.dir=${basedir}/src
java.dir=${src.dir}/main/java
test.dir=${src.dir}/test/java
javacc.dir=${src.dir}/main/jjtree
conf.dir=${src.dir}/main/resources
testconf.dir=${src.dir}/test/resources

#
#  distribution directories
#

dist.base = ${build.dir}/dist
dist.name = ${name}-${version}
dist.dir = ${dist.base}/${dist.name}
