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

HS_MAJOR_VER=24
HS_MINOR_VER=0
HS_BUILD_NUMBER=12

JDK_MAJOR_VER=1
JDK_MINOR_VER=8
JDK_MICRO_VER=0

# Previous (bootdir) JDK version
JDK_PREVIOUS_VERSION=1.7.0
