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

#
# 

#
# Master Hotspot version file.  These values may be overridden by a control
# workspace build.  This file format must remain compatible with both
# GNU Makefile and Microsoft nmake formats.
#

# Don't put quotes (fail windows build).
HOTSPOT_VM_COPYRIGHT=Copyright 2016

HS_MAJOR_VER=25
HS_MINOR_VER=71
HS_BUILD_NUMBER=01

JDK_MAJOR_VER=1
JDK_MINOR_VER=8
JDK_MICRO_VER=0

# Previous (bootdir) JDK version
JDK_PREVIOUS_VERSION=1.7.0
