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

#
# This file is used by build.xml and testcases.xml
#

# Global defaults
name=       Velocity
project=    velocity
version=    1.6.1
final.name= ${project}-${version}

# compile switches
debug= on
optimize= on
deprecation= off

# Needs to be configured with system location of javacc for parser task
javacc.home= *unset*

velocity.build.dir= build

build.dir= ${velocity.dir}/bin

# The source tree runs through a filter copy task to
# allow substitution of version, date etc. and will
# end up in build.src
build.src=       ${build.dir}/src
build.lib=       ${build.dir}/lib
build.test.src=  ${build.dir}/test-src
build.test.lib=  ${build.dir}/test-lib
build.dest=      ${build.dir}/classes
build.deps=      ${build.dir}/deps
build.test.dest= ${build.dir}/test-classes
build.javadoc=   ${build.dir}/apidocs
build.test=      ${build.dir}/test
build.test.reports= ${build.dir}/test-reports
build.docs=      ${build.dir}/docs

# Various local pathes in the distribution
src.java.dir=  ${velocity.dir}/src/java
src.parser.dir = ${velocity.dir}/src/parser
test.java.dir= ${velocity.dir}/src/test
test.dir=      ${velocity.dir}/test
example.dir=   ${velocity.dir}/examples
xdocs.dir=     ${velocity.dir}/xdocs

# @TODO Move parser build out of the tree.
build.parser=    ${src.java.dir}/org/apache/velocity/runtime/parser

# Running the tests
test.haltonerror= true
test.haltonfailure= true

# Needs to be configured with system location of findbugs for findbugs task
findbugs.home=*unset*

# Needs to be configured with system location of PMD for pmd task
pmd.home=*unset*

# Building the distribution
dist.root= ${build.dir}/dist
dist.dir= ${dist.root}/${final.name}

# distribution properties
publish.server=people.apache.org
publish.dir=~/public_html/velocity/engine/${version}

# required Java version for building the distribution (with "ant release")
# should be major distribution (e.g. 1.4) will match property ${ant.java.version}
dist.required.java.version = 1.4

# Set to "project.xml" for distribution and "project-website.xml"
# when building docs for web site
docs.project= project.xml

# Set to Sun Javadocs
javadocs.ref.jsdk= http://java.sun.com/j2se/1.4.2/docs/api/

# #######################################################################
#
# Downloading jars from ibiblio repository
#
# #######################################################################

# The default behaviour is to download dependency jars only when
# they are not already present.
# Set skip.jar.loading to true to never download any dependency jar,
# or force.jar.loading to true to always download all dependency jars.
skip.jar.loading= false
force.jar.loading= false


#
# Settings for the proxy to use for download. Change this if you must
# use a proxy from your host. If the proxy.host property is unset, no
# proxy is used.
proxy.host=
proxy.port= 80

#
# We download directly from the ibiblio maven repository
repo.m1.url= http://www.ibiblio.org/maven
repo.m2.url=http://www.ibiblio.org/maven2
#
# Jars to be downloaded
jar.antlr.version= 2.7.5
jar.avalon-logkit.version= 2.1
jar.commons-collections.version= 3.2.1
jar.commons-lang.version= 2.4
jar.commons-logging.version= 1.1
jar.jdom.version= 1.0
jar.log4j.version= 1.2.12
jar.oro.version= 2.0.8
jar.servletapi.version= 2.3
jar.werken-xpath.version= 0.9.4

jar.hsqldb.version= 1.7.1
jar.junit.version= 3.8.1

jar.maven.ant.version=2.0.9

########################################################################
# Maven settings
maven.pom=${velocity.dir}/pom.xml
maven.build.dir= ${build.dir}/maven
wagon-ssh.version=1.0-beta-2
# POM distributionManagement is used if this is not set
#maven.remote.repository=

########################################################################
# Gump wants to override these names, so make
# it configurable...
#
jar.oro.name= oro
jar.commons-collections.name= commons-collections
jar.commons-lang.name = commons-lang

jar.oro.dir= ${build.lib}
jar.commons-collections.dir= ${build.lib}
jar.commons-lang.dir= ${build.lib}
#
########################################################################

javac.target=1.4
javac.source=1.4
