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