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

# Current versions
waveinabox.version=0.6.0

# Names
name=wave-in-a-box
release.binname=apache-wave-bin
release.srcname=apache-wave-src

#Release file paths
release.bin.path=${release.binname}-${waveinabox.version}
release.src.path=${release.srcname}-${waveinabox.version}

# Build file paths
build.classpath.path=${basedir}/build-classpath.xml
build.common.path=${basedir}/build-common.xml
build.macros.path=${basedir}/build-macros.xml
build.sysclasspath=ignore

# Source code dirs
src.dir=${basedir}/src
src.proto.dir=${basedir}/proto_src
test.dir=${basedir}/test

# Generated code (GXP and PST DTOs).
gen.dir=${basedir}/gen

# These libs are needed at runtime
lib.dir=${basedir}/third_party

# Libs meant for test and runtime respectively
lib.test=${lib.dir}/test
lib.runtime=${lib.dir}/runtime
lib.codegen=${lib.dir}/codegen
lib.release=${lib.dir}/release
lib.solr=${lib.dir}/solr

# Intermediary build directories (temporary)
build.dir=${basedir}/build
build.messages.dir=${build.dir}/messages
build.proto.dir=${build.dir}/proto
build.src.dir=${build.dir}/src
build.test.dir=${build.dir}/test
build.log.dir=${build.dir}/logs
coverage.dir=${build.dir}/coverage
staging.dir=${build.dir}/staging
# Incremental task markers
dep=${build.dir}/dep

# These are final output directories
dist.dir=${basedir}/dist
dist.libraries.dir=${basedir}/dist/libraries
test.out.dir=${basedir}/test_out
docs.dir=${basedir}/doc
api.jar.out=${dist.dir}/${name}-api-${waveinabox.version}.jar
server.jar.out=${dist.dir}/${name}-server-${waveinabox.version}.jar
consoleclient.jar.out=${dist.dir}/${name}-client-console-${waveinabox.version}.jar
robotclient.jar.out=${dist.dir}/${name}-wave-api-${waveinabox.version}.jar
export-import.jar.out=${dist.dir}/${name}-export-import-${waveinabox.version}.jar

missing.dependencies.test=You need to execute the get-third-party target to download dependencies required for tests compilation, i.e. ant get-third-party.

# Javac properties
build.properties:javac.source = 1.7
