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

# local build.properties
#
# $Id$
#

# compile switches
compile.debug= true
compile.optimize= false
compile.deprecation= true
compile.encoding= utf-8
compile.source=1.4
compile.target=1.4

# project identification
project.name=VelocityTools
project.version=1.4
project.libname=velocity-tools
project.id=${project.libname}-${project.version}

struts.name=VelocityTools
struts.libname=${project.libname}
struts.description=a set of utilities for use with the Velocity template engine and Struts web framework
struts.id=${struts.libname}-${project.version}

view.name=VelocityView
view.libname=${project.libname}-view
view.description=a set of utilities for use with the Velocity template engine
view.id=${view.libname}-${project.version}

generic.name=Velocity GenericTools
generic.libname=${project.libname}-generic
generic.description=a set of non-J2EE utilities for use with the Velocity template engine
generic.id=${generic.libname}-${project.version}

# source directories
source.home=${basedir}/src
examples.home=${basedir}/examples
conf.home=${source.home}/conf
classes.src=${source.home}/java
macros.src=${source.home}/velocity
docs.src=${basedir}/xdocs

# build directories
build.dir=${basedir}/build
classes.dir=${build.dir}/classes
lib.dir=${basedir}/lib
dist.dir=${basedir}/dist
docs.dir=${basedir}/docs
release.dir=${dist.dir}/release/${project.id}

# distribution properties
publish.server=people.apache.org
publish.dir=/www/www.apache.org/dist/velocity/tools/${project.version}
publish.docs.dir=/www/velocity.apache.org/tools/

# javadoc properties
javadoc.dir=${docs.dir}/javadoc
javadoc.title=${project.name} ${project.version} Documentation
javadoc.year=2003-2007
javadocs.ref.jsdk= http://java.sun.com/j2se/1.4.2/docs/api/

# test directories
test.dir=${basedir}/test
test.conf.dir=${test.dir}/conf
test.lib.dir=${test.dir}/lib
test.src.dir=${source.home}/test
test.build.dir=${build.dir}/test
test.build.src.dir=${test.build.dir}/src
test.classes.dir=${test.build.dir}/classes
test.rst.dir=${test.build.dir}/rst
test.log.dir=${test.build.dir}/log

#test switches
test.haltonerror=true
test.haltonfailure=true
test.compile.source=1.5
test.compile.target=1.5

#test webcontainer parameters
test.webcontainer.port=8081
test.webcontainer.control.port=8082


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

# 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.url= http://www.ibiblio.org/maven
repo.url= http://mirrors.ibiblio.org/pub/mirrors/maven2

# Skip or force downloading of dependencies
skip.jar.loading= false
force.jar.loading= false

# Jars to be downloaded for compilation
#
jar.antlr.version= 2.7.2
jar.commons-beanutils.version= 1.7.0
jar.commons-chain.version= 1.1
jar.commons-collections.version= 3.2
jar.commons-digester.version= 1.8
jar.commons-lang.version= 2.2
jar.commons-logging.version= 1.1
jar.commons-validator.version= 1.3.1
jar.oro.version= 2.0.8
jar.servletapi.version= 2.3
jar.sslext.version = 1.2-0
jar.struts-core.version = 1.3.8
jar.struts-taglib.version = 1.3.8
jar.struts-tiles.version = 1.3.8
jar.velocity.version= 1.5

# Jars to be downloaded for building documentation
#
jar.dom4j.version= 1.1
jar.velocity-dvsl.version= 1.0

# Jars needed for testing
#
jar.httpunit.version=1.6.1
jar.jetty.version=6.0.1
jar.js.version = 1.6R5
jar.nekohtml.version=0.9.5
jar.xercesimpl.version=2.8.1
jar.xmlparserapis.version=2.6.2
jar.junit.version=4.1

# Full paths to the jars for building the examples
antlr.jar=${lib.dir}/antlr-${jar.antlr.version}.jar
commons-beanutils.jar=${lib.dir}/commons-beanutils-${jar.commons-beanutils.version}.jar
commons-chain.jar=${lib.dir}/commons-chain-${jar.commons-chain.version}.jar
commons-collections.jar=${lib.dir}/commons-collections-${jar.commons-collections.version}.jar
commons-digester.jar=${lib.dir}/commons-digester-${jar.commons-digester.version}.jar
commons-lang.jar=${lib.dir}/commons-lang-${jar.commons-lang.version}.jar
commons-logging.jar=${lib.dir}/commons-logging-${jar.commons-logging.version}.jar
commons-validator.jar=${lib.dir}/commons-validator-${jar.commons-validator.version}.jar
servlet.jar=${lib.dir}/servletapi-${jar.servletapi.version}.jar
struts-core.jar=${lib.dir}/struts-core-${jar.struts-core.version}.jar
struts-taglib.jar=${lib.dir}/struts-taglib-${jar.struts-taglib.version}.jar
struts-tiles.jar=${lib.dir}/struts-tiles-${jar.struts-tiles.version}.jar
sslext.jar=${lib.dir}/sslext-${jar.sslext.version}.jar
oro.jar=${lib.dir}/oro-${jar.oro.version}.jar
velocity.jar=${lib.dir}/velocity-${jar.velocity.version}.jar
