#
# Copyright (c) 2007, 2012, 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.
#

# 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

# 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}\
${line.separator}

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