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

# boot.java.home = /opt/jdk/1.7.0
boot.java = ${boot.java.home}/bin/java
boot.javac = ${boot.java.home}/bin/javac
boot.javac.source = 7
boot.javac.target = 7

# This is the JDK used to run the product version of the tools,
# for example, for testing. If you're building a complete JDK, specify that.
# Override this path as needed, either on the command line or in
# one of the standard user build.properties files (see build.xml)

# target.java.home = /opt/jdk/1.8.0
target.java = ${target.java.home}/bin/java

# Version info -- override as needed
jdk.version = 1.8.0
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}
bootstrap.release = ${release}_bootstrap
full.version = ${release}-${build.number}
bootstrap.full.version = ${bootstrap.release}-${build.number}

# options for the <javac> tasks used to compile the tools
javac.source = 8
javac.target = 8
javac.debug = true
javac.debuglevel = source,lines
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 -Werror

# options for the <javadoc> task for javac
#javadoc.jls3.url=http://java.sun.com/docs/books/jls/
#javadoc.jls3.cite=&lt;a href=&quot;${javadoc.jls3.url}&quot;&gt;The Java Language Specification, Third Edition&lt;/a&gt;
#javadoc.jls3.option=-tag "jls3:a:See &lt;cite&gt;${javadoc.jls3.cite}&lt;/cite&gt;:"


javadoc.jls.cite=The Java&trade; Language Specification

javadoc.jls.option=-tag "jls:a:See &lt;cite&gt;${javadoc.jls.cite}&lt;/cite&gt;:"





# jtreg, used to run the JDK regression tests
# See http://openjdk.java.net/jtreg/
# Override this path as needed, either on the command line or in
# one of the standard user build.properties files (see build.xml)

# jtreg.home = /opt/jtreg/4.1

# findbugs
# See http://findbugs.sourceforge.net/
# Override this path as needed, either on the command line or in
# one of the standard user build.properties files (see build.xml)

# findbugs.home = /opt/findbugs/1.2.1

# vizant (graph visualization tool for Ant)
# See http://vizant.sourceforge.net/
# Override this path as needed, either on the command line or in
# one of the standard user build.properties files (see build.xml)

# vizant.jar = /opt/vizant/0.1.2/vizant-0.1.2.jar
# dot = dot

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

# The following properties define the packages for each of the tools.
# Syntactically, they should be suitable as arguments for the "includes"
# parameter of Ant filesets. In particular, note the trailing '/'.

javac.includes = \
        javax/annotation/processing/ \
        javax/lang/model/ \
        javax/tools/ \
        jdk/ \
        com/sun/source/ \
        com/sun/tools/javac/ \
        com/sun/tools/doclint/

javac.tests = \
        tools/javac

#

javadoc.includes = \
        com/sun/javadoc/ \
        com/sun/tools/javadoc/

javadoc.tests = \
        tools/javadoc/

#

doclets.includes = \
        com/sun/tools/doclets/

doclets.tests = \
        com/sun/javadoc/

#

javah.includes = \
        com/sun/tools/javah/

javah.tests = \
        tools/javah/

#

javap.includes = \
        com/sun/tools/classfile/ \
        com/sun/tools/javap/ \
        com/sun/tools/jdeps/ \
        sun/tools/javap/

javap.tests = \
        tools/javap/

#

sjavac.includes = \
        com/sun/tools/sjavac/

sjavac.tests = \
        tools/sjavac

#

# The following files require the latest JDK to be available.
# The API can be provided by using a suitable boot.java.home
# or by setting import.jdk
require.latest.jdk.files = \
    com/sun/tools/javac/nio/*.java

# The following files in the import jdk source directory are required
# in order to compile the files defined in ${require.latest.jdk.files}
#
# For NIO, the list of stub files is defined by the contents of the primary
# API packages, together with such types that may be required in order to
# compile the stubs. Some of these dependencies would go away if the stub
# generator were to be improved -- e.g. by removing unnecessary imports.
#
import.jdk.stub.files = \
    java/io/File.java \
    java/nio/file/**.java \
    java/nio/file/attribute/**.java \
    java/nio/file/spi/**.java \
    java/nio/channels/AsynchronousChannel.java \
    java/nio/channels/AsynchronousFileChannel.java \
    java/nio/channels/CompletionHandler.java \
    java/nio/channels/SeekableByteChannel.java

# The following value is used by the main jtreg target.
# An empty value means all tests
# Override as desired to run a specific set of tests
jtreg.tests =

# Check style configuration
# overridable name and version
checkstyle.name.version = checkstyle-5.4
