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

hcatalog.version=1.0-gates
jar.name=${ant.project.name}-${hcatalog.version}.jar
hcatalog.jar=${ant.project.name}-${hcatalog.version}.jar
hcatalog.core.jar=${ant.project.name}-core-${hcatalog.version}.jar
final.name=${ant.project.name}-${hcatalog.version}
package.release=1

build.dir=${basedir}/build
build.classes=${build.dir}/classes
src.dir=${basedir}/src/java
package.dir=${basedir}/src/packages
docs.src=${basedir}/src/docs
build.docs=${build.dir}/docs
build.javadoc=${build.docs}/api
dist.dir=${build.dir}/${final.name}

test.dir=${build.dir}/test
test.classes=${test.dir}/classes
test.logs=${test.dir}/logs
test.timeout=2700000
test.warehouse.dir=${test.dir}/hcat_junit_warehouse
mvnrepo=http://repo2.maven.org/maven2
test.src.dir=${basedir}/src/test
test.junit.output.format=plain
test.output=no
test.excludes=e2e/**
clover.jar=${clover.home}/lib/clover.jar
clover.db.dir=${build.dir}/test/clover/db
clover.report.dir=${build.dir}/test/clover/reports
clover.pdf.report.dir=${build.dir}/test/clover/pdf/reports

apache-rat.version=0.8

findbugs.out.dir=${test.dir}/findbugs
findbugs.exclude.file=${basedir}/src/test/findbugsExcludeFile.xml
findbugs.report.htmlfile=${findbugs.out.dir}/hcat-findbugs-report.html
findbugs.report.xmlfile=${findbugs.out.dir}/hcat-findbugs-report.xml

build.encoding=UTF8
excludes=
javac.debug=on
javac.optimize=on
javac.deprecation=off
javac.version=1.6
javac.args=
javac.args.warnings=

# hive properties
#shims.name=20
shims.20S.hive.shims.include=0.20,0.20S
shims.20S.hadoop.version=${hive.hadoop-0.20S.version}
shims.23.hive.shims.include=0.23
shims.23.hadoop.version=${hive.hadoop-0.23.version}

###############################################################################
# deploy properties
#
# "Maven Ant Tasks" are used to publish artifacts to maven repositories. This
# means your ~/.m2/settings.xml file must contain the appropriate credentials
# matching the mvn.deploy.repo.id you choose to publish to.
#
# <settings>
#   <servers>
#     <server>
#       <id>apache.snapshots.https</id>
#       <username>travis</username>
#       <password>mypassword</password>
#     </server>
#   </servers>
# </settings>

mvn.deploy.repo.id=apache.snapshots.https
mvn.deploy.repo.url=https://repository.apache.org/content/repositories/snapshots
maven-ant-tasks.version=2.1.3
mvn.local.repo=${user.home}/.m2/repository
mvn.hadoop.profile=hadoop20

