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

lib.dir=lib

src.dir=src
src.java.dir=${src.dir}/java
src.test.dir=${src.dir}/test
src.resources.dir=${src.dir}/resources
src.doc.dir=${src.dir}/doc
src.antdoc.dir=${src.dir}/antdoc
src.check.dir=${src.dir}/check

build.dir=target
build.java.dir=${build.dir}/classes
build.test.dir=${build.dir}/test
build.antdoc.dir=${build.dir}/antdoc
build.javadoc.dir=${build.dir}/javadoc
build.schemadoc.dir=${build.dir}/schemadoc
build.doc.dir=${build.dir}/doc
build.check.dir=${build.dir}/check

dist.dir=dist
doc.dir=doc

dist.name=DdlUtils
dist.vendor=Apache Software Foundation
dist.version=1.0-RC2
dist.filename.prefix=${dist.name}-${dist.version}
dist.doc.filename.prefix=${dist.name}-${dist.version}-doc
dist.doc.includes=doc/**
dist.src.filename.prefix=${dist.name}-${dist.version}-src
dist.src.includes=.classpath,.project,build*.*,dump-metadata.xml,*.txt,pom.xml,src/**,lib/*,lib/build-only/ant-*.jar,lib/build-only/junit*.jar,doc/**
dist.src.excludes=lib/drivers/**,lib/driver-alternatives/**
dist.bin.filename.prefix=${dist.name}-${dist.version}-bin
dist.bin.includes=dump-metadata.xml,*.txt,pom.xml,dist/${dist.filename.prefix}.jar,lib/*,doc/**
dist.bin.excludes=lib/build-only/**,lib/drivers/**,lib/driver-alternatives/**

checkstyle.version.pattern=\\$Revision.*\\$
checkstyle.author.pattern=\\S
checkstyle.license.file=${src.check.dir}/license-check.txt

test.profile.dir=${src.dir}/test-profiles
test.summary.dir=${src.dir}/test-summary

#
# Documentation properties
#

javadoc.title=${dist.name} ${dist.version} API Documentation
javadoc.footer=Copyright &copy; 2005-2007 Apache Software Foundation. All Rights Reserved.

antdoc.title=${dist.name} ${dist.version} Ant Tasks
antdoc.templates.dir=${src.antdoc.dir}/templates

forrest.antdoc.destdir=${build.doc.dir}/src/documentation/content/ant
forrest.javadoc.destdir=${build.doc.dir}/src/documentation/content/api
forrest.schemadoc.destdir=${build.doc.dir}/src/documentation/content/schema
forrest.output.dir=${build.doc.dir}/build/site
