#	 ***************************************************************
#	 * 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
#	 * 
#	 *   https://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.
#	 ***************************************************************
lib.dir=${basedir}/lib
src.dir=${basedir}/src/java
test.dir=${basedir}/test/java
example.dir=${basedir}/src/example
build.dir=${basedir}/build
classes.build.dir=${basedir}/build/classes
core.classes.build.dir=${classes.build.dir}/core
bootstrap.classes.build.dir=${classes.build.dir}/bootstrap
ant.classes.build.dir=${classes.build.dir}/ant
optional.classes.build.dir=${classes.build.dir}/optional
all.classes.build.dir=${classes.build.dir}/all
test.build.dir=${build.dir}/test
artifacts.build.dir=${build.dir}/artifact
distrib.dir=${build.dir}/distrib
doc.build.dir=${build.dir}/doc
reports.dir=${build.dir}/reports
test.xml.dir=${reports.dir}/test/xml
jacoco.log=${build.dir}/jacoco.data
test.report.dir=${reports.dir}/test/html
coverage.report.dir=${reports.dir}/coverage
javadoc.build.dir=${reports.dir}/api
test.javadoc.build.dir=${reports.dir}/test-api
ivy.report.dir=${reports.dir}/ivy
doc.src.dir=${basedir}/asciidoc
checkstyle.report.dir=${reports.dir}/checkstyle
checkstyle.src.dir=${basedir}/src/etc/checkstyle
rat.report.dir=${reports.dir}/rat

ivy.minimum.javaversion=1.8
debug.mode=on
ivy.install.version=1.4.1
ivy.api.reference=2.5.0

#status=integration

# Comment out to fail builds if Checkstyle fails
#ignore.checkstyle=

test.class.pattern = *Test

source.. = src/java/
output.. = bin/
bin.includes = META-INF/,\
               .
