#
# Copyright 2002-2005 The Apache Software Foundation.
# 
# Licensed 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.
#

# $Id$

# The pathname of the "junit.jar" JAR file
junit.jar = ${junit.home}/junit-3.8.1.jar

# Whether or not to fork tests
junit.fork = true

# The name of this component
component.name = commons-lang

# The primary package name of this component
component.package = org.apache.commons.lang

# The title of this component
component.title = Core Language Utilities

# The current version number of this component
component.version = 2.2-dev

# The current year used for the end date in copyrights.
copyright.end = 2005

# The name that is used to create the jar file
final.name = ${component.name}-${component.version}

# The base directory for compilation targets
build.home = target

# The base directory for component configuration files
conf.home = src/conf

# The base directory for distribution targets
dist.home = dist

# The base directory for component sources
source.home = src/java

# The base directory for unit test sources
test.home = src/test

# Should Java compilations set the 'debug' compiler option?
compile.debug = true

# Should Java compilations set the 'deprecation' compiler option?
compile.deprecation = true

# Should Java compilations set the 'optimize' compiler option?
compile.optimize = true

# Generate class files for specific VM version (e.g., 1.1 or 1.2). 
# Note that the default value depends on the JVM that is running Ant. 
# In particular, if you use JDK 1.4+ the generated classes will not be usable
# for a 1.1 Java VM unless you explicitly set this attribute to the value 1.1 
# (which is the default value for JDK 1.1 to 1.3).
compile.target = 1.1

# Specifies the source version for the Java compiler.
# Corresponds to the source attribute for the ant javac task. 
# Valid values are 1.3, 1.4, 1.5. 
compile.source = 1.3

# Files to be excluded from the compile
#compile.excludes=org/apache/commons/lang/text/**/*.java

# Packages to be excluded from javadocs
#javadoc.excludepackagenames=org.apache.commons.lang.text

# Should all tests fail if one does?
test.failonerror = true

# The test runner to execute
test.runner = junit.textui.TestRunner
