--- a/.hgignore Mon May 16 09:54:01 2016 +0100
+++ b/.hgignore Wed Jul 05 21:41:29 2017 +0200
@@ -1,5 +1,6 @@
^build/
^dist/
+^.idea/
nbproject/private/
^webrev
^.hgtip
--- a/.hgtags-top-repo Mon May 16 09:54:01 2016 +0100
+++ b/.hgtags-top-repo Wed Jul 05 21:41:29 2017 +0200
@@ -360,3 +360,4 @@
09617ce980b99d49abfd54dacfed353c47e2a115 jdk-9+115
6743a8e0cab7b5f6f4a0575f6664892f0ab740af jdk-9+116
e882bcdbdac436523f3d5681611d3118a3804ea7 jdk-9+117
+047f95de8f918d8ff5e8cd2636a2abb5c3c8adb8 jdk-9+118
--- a/common/autoconf/flags.m4 Mon May 16 09:54:01 2016 +0100
+++ b/common/autoconf/flags.m4 Wed Jul 05 21:41:29 2017 +0200
@@ -768,7 +768,7 @@
$2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing"
;;
esac
- TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: 6, IF_AT_LEAST: FLAGS_SETUP_GCC6_COMPILER_FLAGS)
+ TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: 6, PREFIX: $2, IF_AT_LEAST: FLAGS_SETUP_GCC6_COMPILER_FLAGS)
elif test "x$TOOLCHAIN_TYPE" = xclang; then
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_GNU_SOURCE"
@@ -964,7 +964,7 @@
-Wunused-value -Woverloaded-virtual"
if test "x$TOOLCHAIN_TYPE" = xgcc; then
- TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: [4.8],
+ TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: [4.8], PREFIX: $2,
IF_AT_LEAST: [
# These flags either do not work or give spurious warnings prior to gcc 4.8.
$2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-format-zero-length -Wtype-limits -Wuninitialized"
@@ -1411,9 +1411,15 @@
DISABLE_WARNING_PREFIX=
fi
CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
- # Repeate the check for the BUILD_CC
+ # Repeate the check for the BUILD_CC and BUILD_CXX. Need to also reset
+ # CFLAGS since any target specific flags will likely not work with the
+ # build compiler
CC_OLD="$CC"
+ CXX_OLD="$CXX"
CC="$BUILD_CC"
+ CXX="$BUILD_CXX"
+ CFLAGS_OLD="$CFLAGS"
+ CFLAGS=""
FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [-Wno-this-is-a-warning-that-do-not-exist],
IF_TRUE: [BUILD_CC_CAN_DISABLE_WARNINGS=true],
IF_FALSE: [BUILD_CC_CAN_DISABLE_WARNINGS=false]
@@ -1424,6 +1430,8 @@
BUILD_CC_DISABLE_WARNING_PREFIX=
fi
CC="$CC_OLD"
+ CXX="$CXX_OLD"
+ CFLAGS="$CFLAGS_OLD"
;;
clang)
DISABLE_WARNING_PREFIX="-Wno-"
--- a/common/autoconf/generated-configure.sh Mon May 16 09:54:01 2016 +0100
+++ b/common/autoconf/generated-configure.sh Wed Jul 05 21:41:29 2017 +0200
@@ -4900,6 +4900,8 @@
# Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called.
# Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER.
+# $1 - optional variable prefix for compiler and version variables (BUILD_)
+# $2 - optional variable prefix for comparable variable (OPENJDK_BUILD_)
# Check if the configured compiler (C and C++) is of a specific version or
@@ -4909,6 +4911,7 @@
# VERSION: The version string to check against the found version
# IF_AT_LEAST: block to run if the compiler is at least this version (>=)
# IF_OLDER_THAN: block to run if the compiler is older than this version (<)
+# PREFIX: Optional variable prefix for compiler to compare version for (OPENJDK_BUILD_)
@@ -5073,7 +5076,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1462806878
+DATE_WHEN_GENERATED=1462970869
###############################################################################
#
@@ -34795,19 +34798,19 @@
if test "x$CC_VERSION_NUMBER" != "x$CXX_VERSION_NUMBER"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C and C++ compiler has different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER." >&5
-$as_echo "$as_me: WARNING: C and C++ compiler has different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C and C++ compiler have different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER." >&5
+$as_echo "$as_me: WARNING: C and C++ compiler have different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER." >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This typically indicates a broken setup, and is not supported" >&5
$as_echo "$as_me: WARNING: This typically indicates a broken setup, and is not supported" >&2;}
fi
# We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
- if [[ "$CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then
+ if [[ "[$]CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5
$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
fi
- if [[ "$CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then
+ if [[ "[$]CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong." >&5
$as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
fi
@@ -34858,6 +34861,13 @@
+
+
+
+
+
+
+
# Execute function body
# Need to assign to a variable since m4 is blocked from modifying parts in [].
@@ -34897,6 +34907,8 @@
+
+
fi
#
@@ -46475,6 +46487,268 @@
BUILD_LDCXX="$BUILD_CXX"
PATH="$OLDPATH"
+
+
+ COMPILER=$BUILD_CC
+ COMPILER_NAME=BuildC
+
+ if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
+ # cc -V output typically looks like
+ # cc: Sun C 5.12 Linux_i386 2011/11/16
+ COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1`
+ # Check that this is likely to be the Solaris Studio cc.
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null
+ if test $? -ne 0; then
+ ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with -V was: \"$COMPILER_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_OUTPUT\"" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$ALT_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with --version was: \"$ALT_VERSION_OUTPUT\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Remove usage instructions (if present), and
+ # collapse compiler output into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/ *[Uu]sage:.*//'`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/"`
+ elif test "x$TOOLCHAIN_TYPE" = xxlc; then
+ # xlc -qversion output typically looks like
+ # IBM XL C/C++ for AIX, V11.1 (5724-X13)
+ # Version: 11.01.0000.0015
+ COMPILER_VERSION_OUTPUT=`$COMPILER -qversion 2>&1`
+ # Check that this is likely to be the IBM XL C compiler.
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "IBM XL C" > /dev/null
+ if test $? -ne 0; then
+ ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with -qversion was: \"$COMPILER_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with -qversion was: \"$COMPILER_VERSION_OUTPUT\"" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$ALT_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with --version was: \"$ALT_VERSION_OUTPUT\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Collapse compiler output into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/^.*, V\([1-9][0-9.]*\).*$/\1/'`
+ elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
+ # There is no specific version flag, but all output starts with a version string.
+ # First line typically looks something like:
+ # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
+ COMPILER_VERSION_OUTPUT=`$COMPILER 2>&1 | $HEAD -n 1 | $TR -d '\r'`
+ # Check that this is likely to be Microsoft CL.EXE.
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "Microsoft.*Compiler" > /dev/null
+ if test $? -ne 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running it was: \"$COMPILER_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running it was: \"$COMPILER_VERSION_OUTPUT\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Collapse compiler output into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/^.*ersion.\([1-9][0-9.]*\) .*$/\1/'`
+ elif test "x$TOOLCHAIN_TYPE" = xgcc; then
+ # gcc --version output typically looks like
+ # gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
+ # Copyright (C) 2013 Free Software Foundation, Inc.
+ # This is free software; see the source for copying conditions. There is NO
+ # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ COMPILER_VERSION_OUTPUT=`$COMPILER --version 2>&1`
+ # Check that this is likely to be GCC.
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "Free Software Foundation" > /dev/null
+ if test $? -ne 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$COMPILER_VERSION\"" >&5
+$as_echo "$as_me: The result from running with --version was: \"$COMPILER_VERSION\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Remove Copyright and legalese from version string, and
+ # collapse into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/ *Copyright .*//'`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/^.* \([1-9]\.[0-9.]*\)[^0-9.].*$/\1/'`
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ # clang --version output typically looks like
+ # Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
+ # clang version 3.3 (tags/RELEASE_33/final)
+ # or
+ # Debian clang version 3.2-7ubuntu1 (tags/RELEASE_32/final) (based on LLVM 3.2)
+ # Target: x86_64-pc-linux-gnu
+ # Thread model: posix
+ COMPILER_VERSION_OUTPUT=`$COMPILER --version 2>&1`
+ # Check that this is likely to be clang
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "clang" > /dev/null
+ if test $? -ne 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$COMPILER_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with --version was: \"$COMPILER_VERSION_OUTPUT\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Collapse compiler output into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/^.* version \([1-9][0-9.]*\).*$/\1/'`
+ else
+ as_fn_error $? "Unknown toolchain type $TOOLCHAIN_TYPE." "$LINENO" 5
+ fi
+ # This sets CC_VERSION_NUMBER or CXX_VERSION_NUMBER. (This comment is a grep marker)
+ BUILD_CC_VERSION_NUMBER="$COMPILER_VERSION_NUMBER"
+ # This sets CC_VERSION_STRING or CXX_VERSION_STRING. (This comment is a grep marker)
+ BUILD_CC_VERSION_STRING="$COMPILER_VERSION_STRING"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using $TOOLCHAIN_TYPE $COMPILER_NAME compiler version $COMPILER_VERSION_NUMBER [$COMPILER_VERSION_STRING]" >&5
+$as_echo "$as_me: Using $TOOLCHAIN_TYPE $COMPILER_NAME compiler version $COMPILER_VERSION_NUMBER [$COMPILER_VERSION_STRING]" >&6;}
+
+
+ COMPILER=$BUILD_CXX
+ COMPILER_NAME=BuildC++
+
+ if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
+ # cc -V output typically looks like
+ # cc: Sun C 5.12 Linux_i386 2011/11/16
+ COMPILER_VERSION_OUTPUT=`$COMPILER -V 2>&1`
+ # Check that this is likely to be the Solaris Studio cc.
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null
+ if test $? -ne 0; then
+ ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with -V was: \"$COMPILER_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_OUTPUT\"" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$ALT_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with --version was: \"$ALT_VERSION_OUTPUT\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Remove usage instructions (if present), and
+ # collapse compiler output into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/ *[Uu]sage:.*//'`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/"`
+ elif test "x$TOOLCHAIN_TYPE" = xxlc; then
+ # xlc -qversion output typically looks like
+ # IBM XL C/C++ for AIX, V11.1 (5724-X13)
+ # Version: 11.01.0000.0015
+ COMPILER_VERSION_OUTPUT=`$COMPILER -qversion 2>&1`
+ # Check that this is likely to be the IBM XL C compiler.
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "IBM XL C" > /dev/null
+ if test $? -ne 0; then
+ ALT_VERSION_OUTPUT=`$COMPILER --version 2>&1`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with -qversion was: \"$COMPILER_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with -qversion was: \"$COMPILER_VERSION_OUTPUT\"" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$ALT_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with --version was: \"$ALT_VERSION_OUTPUT\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Collapse compiler output into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/^.*, V\([1-9][0-9.]*\).*$/\1/'`
+ elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
+ # There is no specific version flag, but all output starts with a version string.
+ # First line typically looks something like:
+ # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
+ COMPILER_VERSION_OUTPUT=`$COMPILER 2>&1 | $HEAD -n 1 | $TR -d '\r'`
+ # Check that this is likely to be Microsoft CL.EXE.
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "Microsoft.*Compiler" > /dev/null
+ if test $? -ne 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running it was: \"$COMPILER_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running it was: \"$COMPILER_VERSION_OUTPUT\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Collapse compiler output into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/^.*ersion.\([1-9][0-9.]*\) .*$/\1/'`
+ elif test "x$TOOLCHAIN_TYPE" = xgcc; then
+ # gcc --version output typically looks like
+ # gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
+ # Copyright (C) 2013 Free Software Foundation, Inc.
+ # This is free software; see the source for copying conditions. There is NO
+ # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ COMPILER_VERSION_OUTPUT=`$COMPILER --version 2>&1`
+ # Check that this is likely to be GCC.
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "Free Software Foundation" > /dev/null
+ if test $? -ne 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$COMPILER_VERSION\"" >&5
+$as_echo "$as_me: The result from running with --version was: \"$COMPILER_VERSION\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Remove Copyright and legalese from version string, and
+ # collapse into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/ *Copyright .*//'`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/^.* \([1-9]\.[0-9.]*\)[^0-9.].*$/\1/'`
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ # clang --version output typically looks like
+ # Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
+ # clang version 3.3 (tags/RELEASE_33/final)
+ # or
+ # Debian clang version 3.2-7ubuntu1 (tags/RELEASE_32/final) (based on LLVM 3.2)
+ # Target: x86_64-pc-linux-gnu
+ # Thread model: posix
+ COMPILER_VERSION_OUTPUT=`$COMPILER --version 2>&1`
+ # Check that this is likely to be clang
+ $ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "clang" > /dev/null
+ if test $? -ne 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&5
+$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required $TOOLCHAIN_TYPE compiler." >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$COMPILER_VERSION_OUTPUT\"" >&5
+$as_echo "$as_me: The result from running with --version was: \"$COMPILER_VERSION_OUTPUT\"" >&6;}
+ as_fn_error $? "A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir." "$LINENO" 5
+ fi
+ # Collapse compiler output into a single line
+ COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
+ COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
+ $SED -e 's/^.* version \([1-9][0-9.]*\).*$/\1/'`
+ else
+ as_fn_error $? "Unknown toolchain type $TOOLCHAIN_TYPE." "$LINENO" 5
+ fi
+ # This sets CC_VERSION_NUMBER or CXX_VERSION_NUMBER. (This comment is a grep marker)
+ BUILD_CXX_VERSION_NUMBER="$COMPILER_VERSION_NUMBER"
+ # This sets CC_VERSION_STRING or CXX_VERSION_STRING. (This comment is a grep marker)
+ BUILD_CXX_VERSION_STRING="$COMPILER_VERSION_STRING"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using $TOOLCHAIN_TYPE $COMPILER_NAME compiler version $COMPILER_VERSION_NUMBER [$COMPILER_VERSION_STRING]" >&5
+$as_echo "$as_me: Using $TOOLCHAIN_TYPE $COMPILER_NAME compiler version $COMPILER_VERSION_NUMBER [$COMPILER_VERSION_STRING]" >&6;}
+
+
+ if test "x$BUILD_CC_VERSION_NUMBER" != "x$BUILD_CXX_VERSION_NUMBER"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C and C++ compiler have different version numbers, $BUILD_CC_VERSION_NUMBER vs $BUILD_CXX_VERSION_NUMBER." >&5
+$as_echo "$as_me: WARNING: C and C++ compiler have different version numbers, $BUILD_CC_VERSION_NUMBER vs $BUILD_CXX_VERSION_NUMBER." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This typically indicates a broken setup, and is not supported" >&5
+$as_echo "$as_me: WARNING: This typically indicates a broken setup, and is not supported" >&2;}
+ fi
+
+ # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
+ if [[ "[$]BUILD_CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&5
+$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
+ fi
+
+ if [[ "[$]BUILD_CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has a part larger than 99999: $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&5
+$as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $BUILD_CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
+ fi
+
+ OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$BUILD_CC_VERSION_NUMBER"`
+
else
# If we are not cross compiling, use the normal target compilers for
# building the build platform executables.
@@ -49135,6 +49409,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
# Execute function body
# Need to assign to a variable since m4 is blocked from modifying parts in [].
@@ -49711,6 +49997,8 @@
+
+
elif test "x$TOOLCHAIN_TYPE" = xclang; then
JVM_CFLAGS="$JVM_CFLAGS -D_GNU_SOURCE"
@@ -49948,6 +50236,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
# Execute function body
# Need to assign to a variable since m4 is blocked from modifying parts in [].
@@ -49987,6 +50287,8 @@
+
+
fi
if ! [[ " $JVM_VARIANTS " =~ " zero " ]] && ! [[ " $JVM_VARIANTS " =~ " zeroshark " ]] ; then
# Non-zero builds have stricter warnings
@@ -50453,6 +50755,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
# Execute function body
# Need to assign to a variable since m4 is blocked from modifying parts in [].
@@ -50469,7 +50783,7 @@
# Version comparison method inspired by http://stackoverflow.com/a/24067243
COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"`
- if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
+ if test $OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
:
else
@@ -50488,6 +50802,8 @@
+
+
elif test "x$TOOLCHAIN_TYPE" = xclang; then
OPENJDK_BUILD_JVM_CFLAGS="$OPENJDK_BUILD_JVM_CFLAGS -D_GNU_SOURCE"
@@ -50725,6 +51041,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
# Execute function body
# Need to assign to a variable since m4 is blocked from modifying parts in [].
@@ -50741,7 +51069,7 @@
# Version comparison method inspired by http://stackoverflow.com/a/24067243
COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"`
- if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
+ if test $OPENJDK_BUILD_COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
:
# These flags either do not work or give spurious warnings prior to gcc 4.8.
@@ -50764,6 +51092,8 @@
+
+
fi
if ! [[ " $JVM_VARIANTS " =~ " zero " ]] && ! [[ " $JVM_VARIANTS " =~ " zeroshark " ]] ; then
# Non-zero builds have stricter warnings
@@ -51918,9 +52248,15 @@
DISABLE_WARNING_PREFIX=
fi
CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
- # Repeate the check for the BUILD_CC
+ # Repeate the check for the BUILD_CC and BUILD_CXX. Need to also reset
+ # CFLAGS since any target specific flags will likely not work with the
+ # build compiler
CC_OLD="$CC"
+ CXX_OLD="$CXX"
CC="$BUILD_CC"
+ CXX="$BUILD_CXX"
+ CFLAGS_OLD="$CFLAGS"
+ CFLAGS=""
@@ -52198,6 +52534,8 @@
BUILD_CC_DISABLE_WARNING_PREFIX=
fi
CC="$CC_OLD"
+ CXX="$CXX_OLD"
+ CFLAGS="$CFLAGS_OLD"
;;
clang)
DISABLE_WARNING_PREFIX="-Wno-"
--- a/common/autoconf/toolchain.m4 Mon May 16 09:54:01 2016 +0100
+++ b/common/autoconf/toolchain.m4 Wed Jul 05 21:41:29 2017 +0200
@@ -59,23 +59,25 @@
# Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called.
# Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER.
+# $1 - optional variable prefix for compiler and version variables (BUILD_)
+# $2 - optional variable prefix for comparable variable (OPENJDK_BUILD_)
AC_DEFUN([TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS],
[
- if test "x$CC_VERSION_NUMBER" != "x$CXX_VERSION_NUMBER"; then
- AC_MSG_WARN([C and C++ compiler has different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER.])
+ if test "x[$]$1CC_VERSION_NUMBER" != "x[$]$1CXX_VERSION_NUMBER"; then
+ AC_MSG_WARN([C and C++ compiler have different version numbers, [$]$1CC_VERSION_NUMBER vs [$]$1CXX_VERSION_NUMBER.])
AC_MSG_WARN([This typically indicates a broken setup, and is not supported])
fi
# We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
- if [ [[ "$CC_VERSION_NUMBER" =~ (.*\.){3} ]] ]; then
- AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong.])
+ if [ [[ "[$]$1CC_VERSION_NUMBER" =~ (.*\.){3} ]] ]; then
+ AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.])
fi
- if [ [[ "$CC_VERSION_NUMBER" =~ [0-9]{6} ]] ]; then
- AC_MSG_WARN([C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong.])
+ if [ [[ "[$]$1CC_VERSION_NUMBER" =~ [0-9]{6} ]] ]; then
+ AC_MSG_WARN([C compiler version number has a part larger than 99999: [$]$1CC_VERSION_NUMBER. Comparisons might be wrong.])
fi
- COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$CC_VERSION_NUMBER"`
+ $2COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "[$]$1CC_VERSION_NUMBER"`
])
# Check if the configured compiler (C and C++) is of a specific version or
@@ -85,8 +87,9 @@
# VERSION: The version string to check against the found version
# IF_AT_LEAST: block to run if the compiler is at least this version (>=)
# IF_OLDER_THAN: block to run if the compiler is older than this version (<)
+# PREFIX: Optional variable prefix for compiler to compare version for (OPENJDK_BUILD_)
BASIC_DEFUN_NAMED([TOOLCHAIN_CHECK_COMPILER_VERSION],
- [*VERSION IF_AT_LEAST IF_OLDER_THAN], [$@],
+ [*VERSION PREFIX IF_AT_LEAST IF_OLDER_THAN], [$@],
[
# Need to assign to a variable since m4 is blocked from modifying parts in [].
REFERENCE_VERSION=ARG_VERSION
@@ -102,7 +105,7 @@
# Version comparison method inspired by http://stackoverflow.com/a/24067243
COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"`
- if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
+ if test [$]ARG_PREFIX[COMPARABLE_ACTUAL_VERSION] -ge $COMPARABLE_REFERENCE_VERSION ; then
:
ARG_IF_AT_LEAST
else
@@ -808,6 +811,10 @@
BUILD_LDCXX="$BUILD_CXX"
PATH="$OLDPATH"
+
+ TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CC, [BuildC])
+ TOOLCHAIN_EXTRACT_COMPILER_VERSION(BUILD_CXX, [BuildC++])
+ TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_])
else
# If we are not cross compiling, use the normal target compilers for
# building the build platform executables.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/common/bin/idea.sh Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,199 @@
+#!/bin/sh
+#
+# Copyright (c) 2009, 2014, 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.
+#
+
+# Shell script for generating an IDEA project from a given list of modules
+
+usage() {
+ echo "usage: $0 [-h|--help] [-v|--verbose] [-o|--output <path>] [modules]+"
+ exit 1
+}
+
+SCRIPT_DIR=`dirname $0`
+PWD=`pwd`
+cd $SCRIPT_DIR; SCRIPT_DIR=`pwd`
+cd ../../; TOP=`pwd`; cd $PWD
+
+IDEA_OUTPUT=$TOP/.idea
+VERBOSE="false"
+while [ $# -gt 0 ]
+do
+ case $1 in
+ -h | --help )
+ usage
+ ;;
+
+ -v | --vebose )
+ VERBOSE="true"
+ ;;
+
+ -o | --output )
+ IDEA_OUTPUT=$2
+ shift
+ ;;
+
+ -*) # bad option
+ usage
+ ;;
+
+ * ) # non option
+ break
+ ;;
+ esac
+ shift
+done
+
+mkdir $IDEA_OUTPUT || exit 1
+cd $IDEA_OUTPUT; IDEA_OUTPUT=`pwd`
+
+IDEA_MAKE="$TOP/make/idea"
+IDEA_TEMPLATE="$IDEA_MAKE/template"
+IML_TEMPLATE="$IDEA_TEMPLATE/jdk.iml"
+ANT_TEMPLATE="$IDEA_TEMPLATE/ant.xml"
+IDEA_IML="$IDEA_OUTPUT/jdk.iml"
+IDEA_ANT="$IDEA_OUTPUT/ant.xml"
+
+if [ "$VERBOSE" = "true" ] ; then
+ echo "output dir: $IDEA_OUTPUT"
+ echo "idea template dir: $IDEA_TEMPLATE"
+fi
+
+if [ ! -f "$IML_TEMPLATE" ] ; then
+ echo "FATAL: cannot find $IML_TEMPLATE" >&2; exit 1
+fi
+
+if [ ! -f "$ANT_TEMPLATE" ] ; then
+ echo "FATAL: cannot find $ANT_TEMPLATE" >&2; exit 1
+fi
+
+cp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT"
+cd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I make/common idea MAKEOVERRIDES= OUT=$IDEA_OUTPUT/env.cfg MODULES="$*" || exit 1
+cd $SCRIPT_DIR
+
+. $IDEA_OUTPUT/env.cfg
+
+# Expect MODULE_ROOTS, MODULE_NAMES, BOOT_JDK & SPEC to be set
+if [ "x$MODULE_ROOTS" = "x" ] ; then
+ echo "FATAL: MODULE_ROOTS is empty" >&2; exit 1
+fi
+
+if [ "x$MODULE_NAMES" = "x" ] ; then
+ echo "FATAL: MODULE_NAMES is empty" >&2; exit 1
+fi
+
+if [ "x$BOOT_JDK" = "x" ] ; then
+ echo "FATAL: BOOT_JDK is empty" >&2; exit 1
+fi
+
+if [ "x$SPEC" = "x" ] ; then
+ echo "FATAL: SPEC is empty" >&2; exit 1
+fi
+
+SOURCE_FOLDER=" <sourceFolder url=\"file://\$MODULE_DIR\$/####\" isTestSource=\"false\" />"
+SOURCE_FOLDERS_DONE="false"
+
+addSourceFolder() {
+ root=$@
+ relativePath="`echo "$root" | sed -e s@"$TOP/\(.*$\)"@"\1"@`"
+ folder="`echo "$SOURCE_FOLDER" | sed -e s@"\(.*/\)####\(.*\)"@"\1$relativePath\2"@`"
+ printf "%s\n" "$folder" >> $IDEA_IML
+}
+
+### Generate project iml
+RELATIVE_BUILD_DIR="`dirname $SPEC | sed -e s@"$TOP/\(.*$\)"@"\1"@`"
+rm -f $IDEA_IML
+while IFS= read -r line
+do
+ if echo "$line" | egrep "^ .* <sourceFolder.*####" > /dev/null ; then
+ if [ "$SOURCE_FOLDERS_DONE" = "false" ] ; then
+ SOURCE_FOLDERS_DONE="true"
+ for root in $MODULE_ROOTS; do
+ addSourceFolder $root
+ done
+ fi
+ elif echo "$line" | egrep "^ .* <excludeFolder.*####" > /dev/null ; then
+ ul="`echo "$line" | sed -e s@"\(.*/\)####\(.*\)"@"\1$RELATIVE_BUILD_DIR\2"@`"
+ printf "%s\n" "$ul" >> $IDEA_IML
+ else
+ printf "%s\n" "$line" >> $IDEA_IML
+ fi
+done < "$IML_TEMPLATE"
+
+
+MODULE_NAME=" <property name=\"module.name\" value=\"####\" />"
+
+addModuleName() {
+ mn="`echo "$MODULE_NAME" | sed -e s@"\(.*\)####\(.*\)"@"\1$MODULE_NAMES\2"@`"
+ printf "%s\n" "$mn" >> $IDEA_ANT
+}
+
+BUILD_DIR=" <property name=\"build.target.dir\" value=\"####\" />"
+
+addBuildDir() {
+ DIR=`dirname $SPEC`
+ mn="`echo "$BUILD_DIR" | sed -e s@"\(.*\)####\(.*\)"@"\1$DIR\2"@`"
+ printf "%s\n" "$mn" >> $IDEA_ANT
+}
+
+### Generate ant.xml
+
+rm -f $IDEA_ANT
+while IFS= read -r line
+do
+ if echo "$line" | egrep "^ .* <property name=\"module.name\"" > /dev/null ; then
+ addModuleName
+ elif echo "$line" | egrep "^ .* <property name=\"build.target.dir\"" > /dev/null ; then
+ addBuildDir
+ else
+ printf "%s\n" "$line" >> $IDEA_ANT
+ fi
+done < "$ANT_TEMPLATE"
+
+### Compile the custom Logger
+
+CLASSES=$IDEA_OUTPUT/classes
+
+if [ "x$ANT_HOME" = "x" ] ; then
+ # try some common locations, before giving up
+ if [ -f "/usr/share/ant/lib/ant.jar" ] ; then
+ ANT_HOME="/usr/share/ant"
+ elif [ -f "/usr/local/Cellar/ant/1.9.4/libexec/lib/ant.jar" ] ; then
+ ANT_HOME="/usr/local/Cellar/ant/1.9.4/libexec"
+ else
+ echo "FATAL: cannot find ant. Try setting ANT_HOME." >&2; exit 1
+ fi
+fi
+CP=$ANT_HOME/lib/ant.jar
+rm -rf $CLASSES; mkdir $CLASSES
+
+if [ "x$CYGPATH" = "x" ] ; then ## CYGPATH may be set in env.cfg
+ JAVAC_SOURCE_FILE=$IDEA_OUTPUT/src/idea/JdkIdeaAntLogger.java
+ JAVAC_CLASSES=$CLASSES
+ JAVAC_CP=$CP
+else
+ JAVAC_SOURCE_FILE=`cygpath -am $IDEA_OUTPUT/src/idea/JdkIdeaAntLogger.java`
+ JAVAC_CLASSES=`cygpath -am $CLASSES`
+ JAVAC_CP=`cygpath -am $CP`
+fi
+
+$BOOT_JDK/bin/javac -d $JAVAC_CLASSES -cp $JAVAC_CP $JAVAC_SOURCE_FILE
--- a/common/bin/jib.sh Mon May 16 09:54:01 2016 +0100
+++ b/common/bin/jib.sh Wed Jul 05 21:41:29 2017 +0200
@@ -89,7 +89,7 @@
fi
if command -v curl > /dev/null; then
- getcmd="curl -s"
+ getcmd="curl -s -L --retry 3 --retry-delay 5"
elif command -v wget > /dev/null; then
getcmd="wget --quiet -O -"
else
--- a/hotspot/.hgtags Mon May 16 09:54:01 2016 +0100
+++ b/hotspot/.hgtags Wed Jul 05 21:41:29 2017 +0200
@@ -520,3 +520,4 @@
88dd08d7be0fe7fb9f1914b1628f0aae9bf56e25 jdk-9+115
61a214186dae6811dd989e9165e42f7dbf02acde jdk-9+116
88170d3642905b9e6cac03e8efcc976885a7e6da jdk-9+117
+9b1075cac08dc836ec32e7b368415cbe3aceaf8c jdk-9+118
--- a/hotspot/src/share/vm/prims/jvm.cpp Mon May 16 09:54:01 2016 +0100
+++ b/hotspot/src/share/vm/prims/jvm.cpp Wed Jul 05 21:41:29 2017 +0200
@@ -3387,14 +3387,14 @@
return (!access.is_private() && InstanceKlass::cast(current_class)->is_same_class_package(field_class));
}
-// Return the first non-null class loader up the execution stack, or null
-// if only code from the null class loader is on the stack.
+// Return the first user-defined class loader up the execution stack, or null
+// if only code from the bootstrap or platform class loader is on the stack.
JVM_ENTRY(jobject, JVM_LatestUserDefinedLoader(JNIEnv *env))
for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) {
vfst.skip_reflection_related_frames(); // Only needed for 1.4 reflection
oop loader = vfst.method()->method_holder()->class_loader();
- if (loader != NULL) {
+ if (loader != NULL && !SystemDictionary::is_platform_class_loader(loader)) {
return JNIHandles::make_local(env, loader);
}
}
--- a/hotspot/test/Makefile Mon May 16 09:54:01 2016 +0100
+++ b/hotspot/test/Makefile Wed Jul 05 21:41:29 2017 +0200
@@ -120,24 +120,33 @@
TEST_ROOT := $(shell pwd)
# Root of all test results
-ifdef ALT_OUTPUTDIR
- ABS_BUILD_ROOT = $(ALT_OUTPUTDIR)
+ifdef TEST_OUTPUT_DIR
+ $(shell $(MKDIR) -p $(TEST_OUTPUT_DIR)/jtreg)
+ ABS_TEST_OUTPUT_DIR := \
+ $(shell $(CD) $(TEST_OUTPUT_DIR)/jtreg && $(PWD))
else
- ABS_BUILD_ROOT = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
+ ifdef ALT_OUTPUTDIR
+ ABS_OUTPUTDIR = $(shell $(CD) $(ALT_OUTPUTDIR) && $(PWD))
+ else
+ ABS_OUTPUTDIR = $(shell $(CD) $(TEST_ROOT)/.. && $(PWD))
+ endif
+
+ ABS_PLATFORM_BUILD_ROOT = $(ABS_OUTPUTDIR)
+ ABS_TEST_OUTPUT_DIR := $(ABS_PLATFORM_BUILD_ROOT)/testoutput/$(UNIQUE_DIR)
endif
-ABS_TEST_OUTPUT_DIR = $(ABS_BUILD_ROOT)/testoutput/$(UNIQUE_DIR)
# Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test)
ifndef PRODUCT_HOME
- # Try to use j2sdk-image if it exists
- ABS_JDK_IMAGE = $(ABS_BUILD_ROOT)/j2sdk-image
- PRODUCT_HOME := \
- $(shell \
- if [ -d $(ABS_JDK_IMAGE) ] ; then \
- $(ECHO) "$(ABS_JDK_IMAGE)"; \
- else \
- $(ECHO) "$(ABS_BUILD_ROOT)" ; \
+ # Try to use images/jdk if it exists
+ ABS_JDK_IMAGE = $(ABS_PLATFORM_BUILD_ROOT)/images/jdk
+ PRODUCT_HOME := \
+ $(shell \
+ if [ -d $(ABS_JDK_IMAGE) ] ; then \
+ $(ECHO) "$(ABS_JDK_IMAGE)"; \
+ else \
+ $(ECHO) "$(ABS_PLATFORM_BUILD_ROOT)"; \
fi)
+ PRODUCT_HOME := $(PRODUCT_HOME)
endif
# Expect JPRT to set JAVA_ARGS (e.g. -server etc.)
--- a/make/Images.gmk Mon May 16 09:54:01 2016 +0100
+++ b/make/Images.gmk Wed Jul 05 21:41:29 2017 +0200
@@ -114,8 +114,18 @@
# Use this file inside the image as target for make rule
JIMAGE_TARGET_FILE := bin/java$(EXE_SUFFIX)
+JLINK_ORDER_RESOURCES := \
+ *module-info.class* \
+ @$(SUPPORT_OUTPUTDIR)/classlist/classlist,/java.base/java/* \
+ /java.base/jdk/* \
+ /java.base/sun/* \
+ /java.base/com/* \
+ /jdk.localedata/* \
+ #
+
JLINK_TOOL := $(JLINK) --modulepath $(IMAGES_OUTPUTDIR)/jmods \
--endian $(OPENJDK_BUILD_CPU_ENDIAN) \
+ --order-resources=$(call CommaList, $(JLINK_ORDER_RESOURCES)) \
--release-info $(BASE_RELEASE_FILE)
ifeq ($(JLINK_KEEP_PACKAGED_MODULES), true)
--- a/make/common/NativeCompilation.gmk Mon May 16 09:54:01 2016 +0100
+++ b/make/common/NativeCompilation.gmk Wed Jul 05 21:41:29 2017 +0200
@@ -770,13 +770,20 @@
$$(call ExecuteWithLog, $$@, \
$$($1_RC) $$($1_RC_FLAGS) $$($1_SYSROOT_CFLAGS) $(CC_OUT_OPTION)$$@ \
$$($1_VERSIONINFO_RESOURCE))
- # Windows RC compiler does not support -showIncludes, so we mis-use CL for this.
+ # Windows RC compiler does not support -showIncludes, so we mis-use CL
+ # for this. Filter out RC specific arguments that are unknown to CL.
+ # For some unknown reason, in this case CL actually outputs the show
+ # includes to stderr so need to redirect it to hide the output from the
+ # main log.
$$(call ExecuteWithLog, $$($1_RES_DEP).obj, \
- $$($1_CC) $$($1_RC_FLAGS) $$($1_SYSROOT_CFLAGS) -showIncludes -nologo -TC \
- $(CC_OUT_OPTION)$$($1_RES_DEP).obj -P -Fi$$($1_RES_DEP).pp \
- $$($1_VERSIONINFO_RESOURCE)) > $$($1_RES_DEP).raw 2>&1 || true ; \
+ $$($1_CC) $$(filter-out -l%, $$($1_RC_FLAGS)) \
+ $$($1_SYSROOT_CFLAGS) -showIncludes -nologo -TC \
+ $(CC_OUT_OPTION)$$($1_RES_DEP).obj -P -Fi$$($1_RES_DEP).pp \
+ $$($1_VERSIONINFO_RESOURCE)) 2>&1 \
+ | $(GREP) -v -e "^Note: including file:" \
+ -e "^$$(notdir $$($1_VERSIONINFO_RESOURCE))$$$$" || test "$$$$?" = "1" ; \
$(ECHO) $$($1_RES): \\ > $$($1_RES_DEP) ; \
- $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_RES_DEP).raw >> $$($1_RES_DEP) ; \
+ $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_RES_DEP).obj.log >> $$($1_RES_DEP) ; \
$(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_RES_DEP) > $$($1_RES_DEP_TARGETS)
endif
endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/idea.gmk Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,39 @@
+include Makefile
+include make/MainSupport.gmk
+
+.PHONY: idea
+
+ifeq ($(SPEC),)
+ ifneq ($(words $(SPECS)),1)
+ @echo "Error: Multiple build specification files found. Please select one explicitly."
+ @exit 2
+ endif
+ idea:
+ @cd $(topdir)
+ @$(MAKE) $(MFLAGS) $(MAKE_LOG_FLAGS) -r -R -j 1 -f $(topdir)/make/idea/idea.gmk SPEC=$(SPECS) HAS_SPEC=true ACTUAL_TOPDIR=$(topdir) MODULES="$(MODULES)" idea
+else #with SPEC
+ include make/common/Modules.gmk
+
+ ifeq ($(MODULES),)
+ SEL_MODULES := $(call FindAllModules)
+ else
+ SEL_MODULES := $(MODULES)
+ endif
+
+ # Find all source dirs for a particular module
+ # $1 - Module to find source dirs for
+ FindIdeaModuleSrcDirs = \
+ $(strip $(addsuffix /$(strip $1), $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
+ $(wildcard $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
+
+
+ idea:
+ $(ECHO) "SUPPORT=$(SUPPORT_OUTPUTDIR)" >> $(OUT)
+ $(ECHO) "MODULE_ROOTS=\"$(foreach mod, $(SEL_MODULES), $(call FindIdeaModuleSrcDirs,$(mod)))\"" >> $(OUT)
+ $(ECHO) "MODULE_NAMES=\"$(strip $(foreach mod, $(SEL_MODULES), $(mod)))\"" >> $(OUT)
+ $(ECHO) "SEL_MODULES=\"$(SEL_MODULES)\"" >> $(OUT)
+ $(ECHO) "BOOT_JDK=\"$(BOOT_JDK)\"" >> $(OUT)
+ $(ECHO) "CYGPATH=\"$(CYGPATH)\"" >> $(OUT)
+ $(ECHO) "SPEC=\"$(SPEC)\"" >> $(OUT)
+
+endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/.name Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,1 @@
+jdk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/ant.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="AntConfiguration">
+ <buildFile url="file://$PROJECT_DIR$/.idea/build.xml">
+ <properties>
+ <property name="boot.java.home" value="$JDKPath$" />
+ <property name="jtreg.tests" value="$FilePath$" />
+ <property name="jtreg.home" value="###" />
+ <property name="build.target.dir" value="specDir" /> <!-- this will be replaced -->
+ <property name="jtreg.jpda.jvmargs" value="-agentlib:jdwp=transport=dt_socket,server=n,address=localhost:5900,suspend=y" />
+ <property name="module.name" value="java.base" /> <!-- this will be replaced -->
+ </properties>
+ <executeOn event="afterCompilation" target="post-make" />
+ </buildFile>
+ </component>
+</project>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/build.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,126 @@
+<!-- importing.xml -->
+<project name="jdk" basedir="..">
+
+ <script language="javascript" classpath=".idea/classes">
+ var JdkLogger = Java.type("idea.JdkIdeaAntLogger");
+ new JdkLogger(project)
+ </script>
+
+ <!-- java.marker is set to a marker file to check for within a Java install dir.
+ The best file to check for across Solaris/Linux/Windows/MacOS is one of the
+ executables; regrettably, that is OS-specific. -->
+ <condition property="java.marker" value="bin/java">
+ <os family="unix"/>
+ </condition>
+ <condition property="java.marker" value="bin/java.exe">
+ <os family="windows"/>
+ </condition>
+
+ <property name="test.dir" value="${basedir}/jdk/test"/>
+
+ <macrodef name="call-make">
+ <attribute name="dir"/>
+ <attribute name="args"/>
+ <sequential>
+ <exec executable="make" dir="@{dir}" failonerror="true">
+ <arg line="@{args}"/>
+ <env key="CLASSPATH" value = ""/>
+ </exec>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="exec-target">
+ <attribute name="antfile" default="${ant.file}" />
+ <attribute name="target" />
+ <sequential>
+ <java classname="org.apache.tools.ant.Main" fork="true" spawn="true">
+ <arg value="-f"/>
+ <arg value="@{antfile}"/>
+ <arg value="-Dboot.java.home=${boot.java.home}"/>
+ <arg value="-Dbuild.target.dir=${build.target.dir}"/>
+ <arg value="-Djtreg.home=${jtreg.home}"/>
+ <arg value="-Djtreg.tests=${jtreg.tests}"/>
+ <arg value="-Djtreg.jpda.jvmargs=${jtreg.jpda.jvmargs}"/>
+ <arg value="@{target}"/>
+ <classpath>
+ <pathelement path="${java.class.path}"/>
+ </classpath>
+ </java>
+ </sequential>
+ </macrodef>
+
+ <target name="post-make" depends="build-module"/>
+
+ <!--
+ **** Global JDK Build Targets
+ -->
+
+ <target name="clean" depends="-do-configure">
+ <echo message="base = ${basedir}"/>
+ <call-make dir = "${build.target.dir}" args = "clean"/>
+ </target>
+
+ <target name="-do-configure">
+ <echo message="base = ${basedir}"/>
+ <fail message="Not part of a full JDK forest">
+ <condition>
+ <not>
+ <available file="${basedir}/configure" />
+ </not>
+ </condition>
+ </fail>
+ <exec executable="sh" dir="${basedir}" failonerror="true">
+ <arg line="configure --with-boot-jdk=${boot.java.home}"/>
+ </exec>
+ </target>
+
+ <target name="images">
+ <call-make dir = "${build.target.dir}" args = "images"/>
+ </target>
+
+ <target name="jimages">
+ <call-make dir = "${build.target.dir}" args = "jimages"/>
+ </target>
+
+ <target name="check-env">
+ <exec executable="env" dir="${basedir}"/>
+ </target>
+
+ <target name="build-module">
+ <call-make dir = "${build.target.dir}" args = "${module.name}"/>
+ </target>
+
+ <target name="-check-boot.java.home" depends="-def-check">
+ <check name="bootstrap java" property="boot.java.home" marker="${java.marker}"/>
+ </target>
+
+ <target name="-def-check">
+ <macrodef name="check">
+ <attribute name="name"/>
+ <attribute name="property"/>
+ <attribute name="marker" default=""/>
+ <sequential>
+ <fail message="Cannot locate @{name}: please set @{property} to its location">
+ <condition>
+ <not>
+ <isset property="@{property}"/>
+ </not>
+ </condition>
+ </fail>
+ <fail message="@{name} is not installed in ${@{property}}">
+ <condition>
+ <and>
+ <not>
+ <equals arg1="@{marker}" arg2=""/>
+ </not>
+ <not>
+ <available file="${@{property}}/@{marker}"/>
+ </not>
+ </and>
+ </condition>
+ </fail>
+ </sequential>
+ </macrodef>
+ </target>
+</project>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/compiler.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="CompilerConfiguration">
+ <option name="DEFAULT_COMPILER" value="Javac" />
+ <excludeFromCompile>
+ <directory url="file://$PROJECT_DIR$/jdk/src" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/langtools/src" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/jaxp/src" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/jaxws/src" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/corba/src" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/nashorn/src" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/build" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/jdk/test" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/jaxp/test" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/langtools/test" includeSubdirectories="true" />
+ <directory url="file://$PROJECT_DIR$/langtools" includeSubdirectories="true" />
+ </excludeFromCompile>
+ <resourceExtensions />
+ <wildcardResourcePatterns>
+ <entry name="!?*.java" />
+ <entry name="!?*.form" />
+ <entry name="!?*.class" />
+ <entry name="!?*.groovy" />
+ <entry name="!?*.scala" />
+ <entry name="!?*.flex" />
+ <entry name="!?*.kt" />
+ <entry name="!?*.clj" />
+ </wildcardResourcePatterns>
+ <annotationProcessing>
+ <profile default="true" name="Default" enabled="false">
+ <processorPath useClasspath="true" />
+ </profile>
+ </annotationProcessing>
+ </component>
+</project>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/copyright/profiles_settings.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,3 @@
+<component name="CopyrightManager">
+ <settings default="" />
+</component>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/jdk.iml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/####" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/jdk/test" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/langtools/test" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/jaxp/test" isTestSource="true" />
+ <excludeFolder url="file://$MODULE_DIR$/####/buildtools" />
+ <excludeFolder url="file://$MODULE_DIR$/####/configure-support" />
+ <excludeFolder url="file://$MODULE_DIR$/####/hotspot" />
+ <excludeFolder url="file://$MODULE_DIR$/####/images" />
+ <excludeFolder url="file://$MODULE_DIR$/####/ide" />
+ <excludeFolder url="file://$MODULE_DIR$/####/jdk" />
+ <excludeFolder url="file://$MODULE_DIR$/####/make-support" />
+ <excludeFolder url="file://$MODULE_DIR$/####/testoutput" />
+ </content>
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="inheritedJdk" />
+ </component>
+</module>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/misc.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="EntryPointsManager">
+ <entry_points version="2.0" />
+ </component>
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_1_9" assert-keyword="true" jdk-15="true">
+ <output url="file://$PROJECT_DIR$/build/idea/out" />
+ </component>
+</project>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/modules.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/.idea/jdk.iml" filepath="$PROJECT_DIR$/.idea/jdk.iml" />
+ </modules>
+ </component>
+</project>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/scopes/scope_settings.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,5 @@
+<component name="DependencyValidationManager">
+ <state>
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+ </state>
+</component>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/src/idea/JdkIdeaAntLogger.java Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,373 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+package idea;
+
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.DefaultLogger;
+import org.apache.tools.ant.Project;
+
+import java.util.EnumSet;
+import java.util.Stack;
+
+import static org.apache.tools.ant.Project.*;
+
+/**
+ * This class is used to wrap the IntelliJ ant logger in order to provide more meaningful
+ * output when building langtools. The basic ant output in IntelliJ can be quite cumbersome to
+ * work with, as it provides two separate views: (i) a tree view, which is good to display build task
+ * in a hierarchical fashion as they are processed; and a (ii) plain text view, which gives you
+ * the full ant output. The main problem is that javac-related messages are buried into the
+ * ant output (which is made very verbose by IntelliJ in order to support the tree view). It is
+ * not easy to figure out which node to expand in order to see the error message; switching
+ * to plain text doesn't help either, as now the output is totally flat.
+ *
+ * This logger class removes a lot of verbosity from the IntelliJ ant logger by not propagating
+ * all the events to the IntelliJ's logger. In addition, certain events are handled in a custom
+ * fashion, to generate better output during the build.
+ */
+public final class JdkIdeaAntLogger extends DefaultLogger {
+
+ /**
+ * This is just a way to pass in customized binary string predicates;
+ *
+ * TODO: replace with @code{BiPredicate<String, String>} and method reference when moving to 8
+ */
+ enum StringBinaryPredicate {
+ CONTAINS() {
+ @Override
+ boolean apply(String s1, String s2) {
+ return s1.contains(s2);
+ }
+ },
+ STARTS_WITH {
+ @Override
+ boolean apply(String s1, String s2) {
+ return s1.startsWith(s2);
+ }
+ },
+ MATCHES {
+ @Override
+ boolean apply(String s1, String s2) {
+ return s1.matches(s2);
+ }
+ };
+
+ abstract boolean apply(String s1, String s2);
+ }
+
+ /**
+ * Various kinds of ant messages that we shall intercept
+ */
+ enum MessageKind {
+
+ /** a make error */
+ MAKE_ERROR(StringBinaryPredicate.CONTAINS, MSG_ERR, "error:", "compiler.err"),
+ /** a make warning */
+ MAKE_WARNING(StringBinaryPredicate.CONTAINS, MSG_WARN, "warning:", "compiler.warn"),
+ /** a make note */
+ MAKE_NOTE(StringBinaryPredicate.CONTAINS, MSG_INFO, "note:", "compiler.note"),
+ /** std make output */
+ MAKE_OTHER(StringBinaryPredicate.MATCHES, MSG_INFO, ".*"),
+ /** a javac crash */
+ JAVAC_CRASH(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "An exception has occurred in the compiler"),
+ /** jtreg test success */
+ JTREG_TEST_PASSED(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "Passed: "),
+ /** jtreg test failure */
+ JTREG_TEST_FAILED(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "FAILED: "),
+ /** jtreg test error */
+ JTREG_TEST_ERROR(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "Error: ");
+
+ StringBinaryPredicate sbp;
+ int priority;
+ String[] keys;
+
+ MessageKind(StringBinaryPredicate sbp, int priority, String... keys) {
+ this.sbp = sbp;
+ this.priority = priority;
+ this.keys = keys;
+ }
+
+ /**
+ * Does a given message string matches this kind?
+ */
+ boolean matches(String s) {
+ for (String key : keys) {
+ if (sbp.apply(s, key)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ /**
+ * This enum is used to represent the list of tasks we need to keep track of during logging.
+ */
+ enum Task {
+ /** javac task - invoked during compilation */
+ MAKE("exec", MessageKind.MAKE_ERROR, MessageKind.MAKE_WARNING, MessageKind.MAKE_NOTE,
+ MessageKind.MAKE_OTHER, MessageKind.JAVAC_CRASH),
+ /** jtreg task - invoked during test execution */
+ JTREG("jtreg", MessageKind.JTREG_TEST_PASSED, MessageKind.JTREG_TEST_FAILED, MessageKind.JTREG_TEST_ERROR),
+ /** initial synthetic task when the logger is created */
+ ROOT("") {
+ @Override
+ boolean matches(String s) {
+ return false;
+ }
+ },
+ /** synthetic task catching any other tasks not in this list */
+ ANY("") {
+ @Override
+ boolean matches(String s) {
+ return true;
+ }
+ };
+
+ String taskName;
+ MessageKind[] msgs;
+
+ Task(String taskName, MessageKind... msgs) {
+ this.taskName = taskName;
+ this.msgs = msgs;
+ }
+
+ boolean matches(String s) {
+ return s.equals(taskName);
+ }
+ }
+
+ /**
+ * This enum is used to represent the list of targets we need to keep track of during logging.
+ * A regular expression is used to match a given target name.
+ */
+ enum Target {
+ /** jtreg target - executed when launching tests */
+ JTREG("jtreg") {
+ @Override
+ String getDisplayMessage(BuildEvent e) {
+ return "Running jtreg tests: " + e.getProject().getProperty("jtreg.tests");
+ }
+ },
+ /** build selected modules */
+ BUILD_MODULE("build-module") {
+ @Override
+ String getDisplayMessage(BuildEvent e) {
+ return "Building modules: " + e.getProject().getProperty("module.name") + "...";
+ }
+ },
+ /** build images */
+ BUILD_IMAGES("images") {
+ @Override
+ String getDisplayMessage(BuildEvent e) {
+ return "Building images...";
+ }
+ },
+ /** build images */
+ CONFIGURE("-do-configure") {
+ @Override
+ String getDisplayMessage(BuildEvent e) {
+ return "Configuring build...";
+ }
+ },
+ /** synthetic target catching any other target not in this list */
+ ANY("") {
+ @Override
+ String getDisplayMessage(BuildEvent e) {
+ return "Executing Ant target(s): " + e.getProject().getProperty("ant.project.invoked-targets");
+ }
+ @Override
+ boolean matches(String msg) {
+ return true;
+ }
+ };
+
+ String targetRegex;
+
+ Target(String targetRegex) {
+ this.targetRegex = targetRegex;
+ }
+
+ boolean matches(String msg) {
+ return msg.matches(targetRegex);
+ }
+
+ abstract String getDisplayMessage(BuildEvent e);
+ }
+
+ /**
+ * A custom build event used to represent status changes which should be notified inside
+ * Intellij
+ */
+ static class StatusEvent extends BuildEvent {
+
+ /** the target to which the status update refers */
+ Target target;
+
+ StatusEvent(BuildEvent e, Target target) {
+ super(new StatusTask(e, target.getDisplayMessage(e)));
+ this.target = target;
+ setMessage(getTask().getTaskName(), 2);
+ }
+
+ /**
+ * A custom task used to channel info regarding a status change
+ */
+ static class StatusTask extends org.apache.tools.ant.Task {
+ StatusTask(BuildEvent event, String msg) {
+ setProject(event.getProject());
+ setOwningTarget(event.getTarget());
+ setTaskName(msg);
+ }
+ }
+ }
+
+ /** wrapped ant logger (IntelliJ's own logger) */
+ DefaultLogger logger;
+
+ /** flag - is this the first target we encounter? */
+ boolean firstTarget = true;
+
+ /** flag - should subsequenet failures be suppressed ? */
+ boolean suppressTaskFailures = false;
+
+ /** flag - have we ran into a javac crash ? */
+ boolean crashFound = false;
+
+ /** stack of status changes associated with pending targets */
+ Stack<StatusEvent> statusEvents = new Stack<>();
+
+ /** stack of pending tasks */
+ Stack<Task> tasks = new Stack<>();
+
+ public JdkIdeaAntLogger(Project project) {
+ for (Object o : project.getBuildListeners()) {
+ if (o instanceof DefaultLogger) {
+ this.logger = (DefaultLogger)o;
+ project.removeBuildListener((BuildListener)o);
+ project.addBuildListener(this);
+ }
+ }
+ tasks.push(Task.ROOT);
+ }
+
+ @Override
+ public void buildStarted(BuildEvent event) {
+ //do nothing
+ }
+
+ @Override
+ public void buildFinished(BuildEvent event) {
+ //do nothing
+ }
+
+ @Override
+ public void targetStarted(BuildEvent event) {
+ EnumSet<Target> statusKinds = firstTarget ?
+ EnumSet.allOf(Target.class) :
+ EnumSet.complementOf(EnumSet.of(Target.ANY));
+
+ String targetName = event.getTarget().getName();
+
+ for (Target statusKind : statusKinds) {
+ if (statusKind.matches(targetName)) {
+ StatusEvent statusEvent = new StatusEvent(event, statusKind);
+ statusEvents.push(statusEvent);
+ logger.taskStarted(statusEvent);
+ firstTarget = false;
+ return;
+ }
+ }
+ }
+
+ @Override
+ public void targetFinished(BuildEvent event) {
+ if (!statusEvents.isEmpty()) {
+ StatusEvent lastEvent = statusEvents.pop();
+ if (lastEvent.target.matches(event.getTarget().getName())) {
+ logger.taskFinished(lastEvent);
+ }
+ }
+ }
+
+ @Override
+ public void taskStarted(BuildEvent event) {
+ String taskName = event.getTask().getTaskName();
+ System.err.println("task started " + taskName);
+ for (Task task : Task.values()) {
+ if (task.matches(taskName)) {
+ tasks.push(task);
+ return;
+ }
+ }
+ }
+
+ @Override
+ public void taskFinished(BuildEvent event) {
+ if (tasks.peek() == Task.ROOT) {
+ //we need to 'close' the root task to get nicer output
+ logger.taskFinished(event);
+ } else if (!suppressTaskFailures && event.getException() != null) {
+ //the first (innermost) task failure should always be logged
+ event.setMessage(event.getException().toString(), 0);
+ event.setException(null);
+ //note: we turn this into a plain message to avoid stack trace being logged by Idea
+ logger.messageLogged(event);
+ suppressTaskFailures = true;
+ }
+ tasks.pop();
+ }
+
+ @Override
+ public void messageLogged(BuildEvent event) {
+ String msg = event.getMessage();
+
+ boolean processed = false;
+
+ if (!tasks.isEmpty()) {
+ Task task = tasks.peek();
+ for (MessageKind messageKind : task.msgs) {
+ if (messageKind.matches(msg)) {
+ event.setMessage(msg, messageKind.priority);
+ processed = true;
+ if (messageKind == MessageKind.JAVAC_CRASH) {
+ crashFound = true;
+ }
+ break;
+ }
+ }
+ }
+
+ if (event.getPriority() == MSG_ERR || crashFound) {
+ //we log errors regardless of owning task
+ logger.messageLogged(event);
+ suppressTaskFailures = true;
+ } else if (processed) {
+ logger.messageLogged(event);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/vcs.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="$PROJECT_DIR$" vcs="hg4idea" />
+ <mapping directory="$PROJECT_DIR$/jdk" vcs="hg4idea" />
+ <mapping directory="$PROJECT_DIR$/langtools" vcs="hg4idea" />
+ <mapping directory="$PROJECT_DIR$/hotspot" vcs="hg4idea" />
+ <mapping directory="$PROJECT_DIR$/nashorn" vcs="hg4idea" />
+ <mapping directory="$PROJECT_DIR$/jaxp" vcs="hg4idea" />
+ <mapping directory="$PROJECT_DIR$/jaxws" vcs="hg4idea" />
+ <mapping directory="$PROJECT_DIR$/corba" vcs="hg4idea" />
+ </component>
+</project>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/template/workspace.xml Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ChangeListManager">
+ <ignored path="jdk.iws" />
+ <ignored path="$PROJECT_DIR$/build/idea/out/" />
+ <ignored path=".idea/" />
+ </component>
+ <component name="StructureViewFactory">
+ <option name="ACTIVE_ACTIONS" value=",ALPHA_COMPARATOR" />
+ </component>
+ <component name="antWorkspaceConfiguration">
+ <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+ <option name="FILTER_TARGETS" value="false" />
+ <buildFile url="file://$PROJECT_DIR$/.idea/build.xml">
+ <runInBackground value="false" />
+ <targetFilters>
+ <filter targetName="post-make" isVisible="false" />
+ <filter targetName="clean" isVisible="true" />
+ <filter targetName="-do-configure" isVisible="false" />
+ <filter targetName="images" isVisible="true" />
+ <filter targetName="build-module" isVisible="true" />
+ <filter targetName="jtreg-debug" isVisible="false" />
+ <filter targetName="jtreg-debug-internal" isVisible="false" />
+ <filter targetName="jtreg" isVisible="false" />
+ <filter targetName="-check-jtreg.home" isVisible="false" />
+ <filter targetName="-def-check" isVisible="false" />
+ <filter targetName="-def-jtreg" isVisible="false" />
+ <filter targetName="-check-boot.java.home" isVisible="false" />
+ <filter targetName="-check-target.java.home" isVisible="false" />
+ <filter targetName="find-jdk-build-dir" isVisible="false" />
+ <filter targetName="check-env" isVisible="false" />
+ </targetFilters>
+ <treeView value="false" />
+ <expanded value="true" />
+ </buildFile>
+ </component>
+ <component name="ProjectView">
+ <navigator currentView="PackagesPane" proportions="" version="1">
+ <flattenPackages />
+ <showMembers />
+ <showModules />
+ <showLibraryContents />
+ <hideEmptyPackages />
+ <abbreviatePackageNames />
+ <autoscrollToSource />
+ <autoscrollFromSource />
+ <sortByType />
+ </navigator>
+ <panes>
+ <pane id="ProjectPane">
+ <subPane>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="jdk" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ </subPane>
+ </pane>
+ <pane id="PackagesPane">
+ <subPane>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="jdk" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="jdk" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ </subPane>
+ </pane>
+ <pane id="Scope" />
+ </panes>
+ </component>
+</project>
--- a/test/Makefile Mon May 16 09:54:01 2016 +0100
+++ b/test/Makefile Wed Jul 05 21:41:29 2017 +0200
@@ -87,7 +87,7 @@
#
# Invocation:
#
-# make jtreg_tests TESTDIRS=<test-dirs>
+# make jtreg_tests TESTDIRS=<test-dirs> TEST_SELECTION=<path to test or jtreg group> TEST_OUTPUT_DIR=<path>
#
# where <test-dirs> is something like '../<component>/test/runtime',
# <component> in turn being one of the top level directories (for
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/make/TestIdea.gmk Wed Jul 05 21:41:29 2017 +0200
@@ -0,0 +1,46 @@
+
+# Copyright (c) 2014, 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.
+#
+
+include $(SPEC)
+include MakeBase.gmk
+
+default: all
+
+IDEA_OUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/verify-idea
+
+clean-idea:
+ $(RM) -r $(IDEA_OUTPUT_DIR)
+
+verify-idea:
+ $(MKDIR) -p $(IDEA_OUTPUT_DIR)
+ $(BASH) $(TOPDIR)/common/bin/idea.sh -o $(IDEA_OUTPUT_DIR)/idea1
+ $(BASH) $(TOPDIR)/common/bin/idea.sh -o $(IDEA_OUTPUT_DIR)/idea2 java.base
+ $(BASH) $(TOPDIR)/common/bin/idea.sh -o $(IDEA_OUTPUT_DIR)/idea3 java.base jdk.compiler
+
+TEST_TARGETS += verify-idea
+
+all: $(TEST_TARGETS)
+
+.PHONY: default all verify-idea
--- a/test/make/TestMake.gmk Mon May 16 09:54:01 2016 +0100
+++ b/test/make/TestMake.gmk Wed Jul 05 21:41:29 2017 +0200
@@ -33,7 +33,10 @@
java-compilation:
+$(MAKE) -f TestJavaCompilation.gmk $(TEST_SUBTARGET)
+test-idea:
+ +$(MAKE) -f TestIdea.gmk $(TEST_SUBTARGET)
-all: make-base java-compilation
-.PHONY: default all make-base java-compilation
+all: make-base java-compilation test-idea
+
+.PHONY: default all make-base java-compilation test-idea