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

#javac configuration for "normal build" (these will be passed to the bootstrap compiler):
javac.opts = -XDignore.symbol.file=true -Xlint:all,-deprecation,-exports -Werror -g:source,lines,vars

#version used to compile build tools
javac.build.opts = -XDignore.symbol.file=true -Xlint:all,-deprecation,-options -Werror -g:source,lines,vars
javac.build.source = 8
javac.build.target = 8

module.names = java.compiler \
               jdk.compiler \
               jdk.javadoc \
               jdk.jdeps \
               jdk.jshell

langtools.resource.includes = \
        com/sun/tools/javac/resources/compiler.properties \
        com/sun/tools/javac/resources/launcher.properties

# Version info -- override as needed
jdk.version = 9
build.number = b00
milestone = internal

# FIXME -- these need to match the standard values
# If we include date in full.version (ie for developer build)
# we will need to make sure the build is idempotent (i.e.
# repeated builds don't rebuild the tools, because of new
# timestamps
# FIXME -- need to include openjdk as needed
release = ${jdk.version}-${milestone}
full.version = ${release}+${build.number}

#tools configuration:
tool.javac.main.class=com.sun.tools.javac.Main
tool.javadoc.main.class=jdk.javadoc.internal.tool.Main
tool.javap.main.class=com.sun.tools.javap.Main
tool.jshell.main.class=jdk.internal.jshell.tool.JShellToolProvider

#test configuration:
jtreg.tests=
