#
# Copyright (c) 2007, 2015, 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.debug = true
javac.debuglevel = source,lines,vars
javac.extra.opts=-XDignore.symbol.file=true
javac.includes=
javac.lint.opts = -Xlint:all,-deprecation -Werror
javac.source = 8
javac.target = 8

#javac configuration for bootstrap build (these will be passed to the compiler from the given boot JDK):
boot.javac.extra.opts=-XDignore.symbol.file=true
boot.javac.includes = \
        javax/annotation/processing/ \
        javax/lang/model/ \
        javax/tools/ \
        jdk/ \
        com/sun/source/ \
        com/sun/tools/javac/ \
        com/sun/tools/doclint/
boot.javac.lint.opts=
boot.javac.source = 8
boot.javac.target = 8

#configuration of submodules (share by both the bootstrap and normal compilation):
langtools.modules=java.compiler:jdk.compiler:jdk.jdeps:jdk.javadoc:jdk.jshell:jdk.internal.le:jdk.jdi
java.compiler.dependencies=
jdk.compiler.dependencies=java.compiler
jdk.javadoc.dependencies=java.compiler:jdk.compiler
jdk.jdeps.dependencies=java.compiler:jdk.compiler
jdk.internal.le.dependencies=
jdk.jdi.dependencies=
jdk.jshell.dependencies=java.compiler:jdk.internal.le:jdk.compiler:jdk.jdi

tool.javac.main.class=com.sun.tools.javac.Main
tool.javadoc.main.class=com.sun.tools.javadoc.Main
tool.javap.main.class=com.sun.tools.javap.Main
tool.javah.main.class=com.sun.tools.javah.Main
tool.sjavac.main.class=com.sun.tools.sjavac.Main
tool.jshell.main.class=jdk.internal.jshell.tool.JShellTool

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

#test configuration:
jtreg.tests=
boot.javac.tests = tools/javac
crules.tests = ../make/test/crules

#javadoc configuration
javadoc.jls.cite=The Java&trade; Language Specification
javadoc.jls.option=-tag "jls:a:See &lt;cite&gt;${javadoc.jls.cite}&lt;/cite&gt;:" \
    -tag "implNote:a:Implementation Note:"

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