#
# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

# Base locations where bundles are located
slashjava=/java
drops.dir=${slashjava}/devtools/share/jdk7-drops

# This is the JDK used to build and run the bootstrap version of javac.
# The bootstrap javac is used to compile both boostrap versions of the
# other tools, and product versions of all the tools.
# Override this path as needed, either on the command line or in 
# one of the standard user build.properties files (see build.xml)
javac.jar=${bootstrap.dir}/lib/javac.jar

# The tools.jar is needed in the classpath to compile these sources
jdk.home=${java.home}/..
tools.jar=${jdk.home}/lib/tools.jar

# options for the <javac> tasks used to compile the tools
javac.source = 7
javac.target = 7
javac.debug = true
javac.no.jdk.warnings = -XDignore.symbol.file=true
# set the following to -version to verify the versions of javac being used
javac.version.opt = 
# in time, there should be no exceptions to -Xlint:all
#javac.lint.opts = -Xlint:all,-unchecked,-deprecation,-fallthrough,-cast,-serial
javac.lint.opts=

# JVM memory size
javac.memoryInitialSize = 256m
javac.memoryMaximumSize = 512m

#------------------------------------------------------------

# Root of output directories
output.dir=.

# Built files
build.dir=${output.dir}/build
build.classes.dir=${build.dir}/classes

# Distributed results
dist.dir=${output.dir}/dist
dist.lib.dir=${dist.dir}/lib
dist.classes.jar=${dist.lib.dir}/classes.jar
dist.src.zip=${dist.lib.dir}/src.zip

# Where all drop sources get placed when downloaded and unzipped
drop.expanded.dir=${output.dir}/drop

# Location if the sources were included already
drop.included.dir=./drop_included

# Where patches to drop bundle sources live
patches.dir=patches

# Sanity information
sanity.info= Sanity Settings:${line.separator}\
  ant.home=${ant.home}${line.separator}\
  ant.version=${ant.version}${line.separator}\
  ant.java.version=${ant.java.version}${line.separator}\
  java.home=${java.home}${line.separator}\
  java.version=${java.version}${line.separator}\
  os.name=${os.name}${line.separator}\
  os.arch=${os.arch}${line.separator}\
  os.version=${os.version}${line.separator}\
  bootstrap.dir=${bootstrap.dir}${line.separator}\
  javac.jar=${javac.jar}${line.separator}\
  javac.memoryInitialSize=${javac.memoryInitialSize}${line.separator}\
  javac.memoryMaximumSize=${javac.memoryMaximumSize}${line.separator}\
  javac.source=${javac.source}${line.separator}\
  javac.debug=${javac.debug}${line.separator}\
  javac.target=${javac.target}${line.separator}\
  javac.version.opt=${javac.version.opt}${line.separator}\
  javac.lint.opts=${javac.lint.opts}${line.separator}\
  javac.no.jdk.warnings=${javac.no.jdk.warnings}${line.separator}\
  output.dir=${output.dir}${line.separator}\
  build.dir=${build.dir}${line.separator}\
  dist.dir=${dist.dir}${line.separator}\
  drop.dir=${drop.dir}${line.separator}\
  drops.dir=${drops.dir}${line.separator}\
${line.separator}

# Failure messages when source cannot be found on the file system
failed.nourl.src.message=\
ERROR: Cannot find source for project ${ant.project.name}.\
${line.separator}${line.separator}\
HINT: Try setting drops.dir to indicate where the bundles can be found, \
or try setting the ant property allow.downloads=true to download the bundle from the URL.\
${line.separator}\
e.g. ant -Dallow.downloads=true -OR- ant -Ddrops.dir=some_directory \
${line.separator}

# Failure message when source cannot be downloaded
failed.url.src.message=\
ERROR: Cannot find source for project ${ant.project.name}.\
${line.separator}${line.separator}\
HINT: Try setting drops.dir to indicate where the bundles can be found, \
or try checking the URL with your browser.\
${line.separator}\
e.g. ant -Ddrops.dir=some_directory \
${line.separator}

#------------------------------------------------------------
