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

# Properties for jprt

# Locked down to jdk8
jprt.tools.default.release=jdk8

# The different build flavors we want, we override here so we just get these 2
jprt.build.flavors=product,fastdebug

# Standard list of jprt build targets for this source tree
jprt.build.targets=                                             \
    solaris_sparc_5.10-{product|fastdebug},                     \
    solaris_sparcv9_5.10-{product|fastdebug},                   \
    solaris_i586_5.10-{product|fastdebug},                      \
    solaris_x64_5.10-{product|fastdebug},                       \
    linux_i586_2.6-{product|fastdebug},                         \
    linux_x64_2.6-{product|fastdebug},                          \
    macosx_x64_10.7-{product|fastdebug},                        \
    windows_i586_6.1-{product|fastdebug},                       \
    windows_x64_6.1-{product|fastdebug}

# Test target list (no fastdebug & limited c2 testing)
jprt.my.test.target.set= 					\
    solaris_sparc_5.10-product-c1-TESTNAME,                     \
    solaris_sparcv9_5.10-product-c2-TESTNAME,                   \
    solaris_i586_5.10-product-c1-TESTNAME,                      \
    solaris_x64_5.10-product-c2-TESTNAME,                       \
    linux_i586_2.6-product-{c1|c2}-TESTNAME,                    \
    linux_x64_2.6-product-c2-TESTNAME,                          \
    macosx_x64_10.7-product-c2-TESTNAME,                        \
    windows_i586_6.1-product-c1-TESTNAME,                       \
    windows_x64_6.1-product-c2-TESTNAME

# Default test targets
jprt.make.rule.test.targets=					\
    ${jprt.my.test.target.set:TESTNAME=jtreg}

# Directories to be excluded from the source bundles
jprt.bundle.exclude.src.dirs=build dist webrev

# Test target list (no fastdebug & limited c2 testing)
jprt.my.test.target.set= 					\
    solaris_sparc_5.10-product-c1-TESTNAME,                     \
    solaris_sparcv9_5.10-product-c2-TESTNAME,                   \
    solaris_i586_5.10-product-c1-TESTNAME,                      \
    solaris_x64_5.10-product-c2-TESTNAME,                       \
    linux_i586_2.6-product-{c1|c2}-TESTNAME,                    \
    linux_x64_2.6-product-c2-TESTNAME,                          \
    macosx_x64_10.7-product-c2-TESTNAME,                        \
    windows_i586_6.1-product-c1-TESTNAME,                       \
    windows_x64_6.1-product-c2-TESTNAME

# Default test targets
jprt.make.rule.test.targets=					\
    ${jprt.my.test.target.set:TESTNAME=jtreg}
