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

# ----- Version Control Flags -----
version.major=1
version.minor=1
version.build=35
version.patch=0
version.suffix=-dev

# ----- Default Base Path for Dependent Packages -----
# Please note this path must be absolute, not relative,
# as it is referenced with different working directory
# contexts by the various build scripts.
base.path=/usr/share/java
#base.path=C:/path/to/the/repository
#base.path=/usr/local

compile.source=1.7
compile.target=1.7
compile.debug=off
compile.deprecation=on
compile.optimize=on

base-tomcat.loc=http://archive.apache.org/dist/tomcat
base-sf.loc=http://downloads.sourceforge.net

# ----- JUnit Unit Test Suite, version 3.8 or later -----
# The JUnit version we will use
junit.version=3.8.2
# The directory containing your binary distribution of JUnit
# It will be automatically downloaded if it doesn't exist
junit.home=${base.path}/junit${junit.version}
#junit.home = /usr/local/java/junit3.8.1
# The pathname of the "junit.jar" JAR file
junit.jar=${junit.home}/junit.jar
# The URL used to download JUnit if needed
junit.loc=${base-sf.loc}/junit/junit${junit.version}.zip
