How to pass additional options to boot jdk during configure, _JAVA_OPTIONS does not work
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Thu Sep 20 08:10:01 UTC 2018
On 2018-09-20 09:26, Ao Qi wrote:
> Hi,
>
> Is there any options or methods that I can pass additional jdk options
> to the boot jdk when I configure jdk/jdk? I found
> --with-boot-jdk-jvmargs, but I think it is effective during building
> the jdk, not configuring the jdk.
You are correct, the additional arguments in --with-boot-jdk-jvmargs is
only used during the build, not during configure.
>
> I used _JAVA_OPTIONS, but it failed to configure (fail to detect jdk
> version). I made a patch:
>
> $ hg diff
> diff -r feb4c9e03aed make/autoconf/basics.m4
> --- a/make/autoconf/basics.m4 Tue Sep 18 19:44:27 2018 -0700
> +++ b/make/autoconf/basics.m4 Wed Sep 19 11:44:54 2018 +0800
> @@ -168,7 +168,7 @@
> [
> $ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD
> $ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD
> - OUTPUT=`$3 $1 -version 2>&1`
> + OUTPUT=`$3 $1 -version 2>&1 | $GREP -v "^Picked up _JAVA_OPTIONS:"`
> FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn`
> FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""`
> if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
> diff -r feb4c9e03aed make/autoconf/boot-jdk.m4
> --- a/make/autoconf/boot-jdk.m4 Tue Sep 18 19:44:27 2018 -0700
> +++ b/make/autoconf/boot-jdk.m4 Wed Sep 19 11:44:54 2018 +0800
> @@ -74,7 +74,7 @@
> BOOT_JDK_FOUND=no
> else
> # Oh, this is looking good! We probably have found a proper
> JDK. Is it the correct version?
> - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $HEAD -n 1`
> + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 |
> $GREP -v "^Picked up _JAVA_OPTIONS:" | $HEAD -n 1`
>
> # Extra M4 quote needed to protect [] in grep expression.
> [FOUND_CORRECT_VERSION=`$ECHO $BOOT_JDK_VERSION \
> @@ -90,7 +90,7 @@
> AC_MSG_CHECKING([for Boot JDK])
> AC_MSG_RESULT([$BOOT_JDK])
> AC_MSG_CHECKING([Boot JDK version])
> - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 |
> $TR '\n\r' ' '`
> + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 |
> $GREP -v "^Picked up _JAVA_OPTIONS:" | $TR '\n\r' ' '`
> AC_MSG_RESULT([$BOOT_JDK_VERSION])
> fi # end check jdk version
> fi # end check javac
>
>
>
> This works for me. The _JAVA_OPTIONS is effective during configure. Is
> there some other way to do that (without changing the code)? Or
> otherwise is it possible to accept this patch?
Hm. Using _JAVA_OPTIONS is really not good. It's a very hidden way to
influence the behavior of a running Java process. It might fail if it is
not accepted on both the boot JDK and the newly built JDK.
I think a better solution would be to add the --with-boot-jdk-jvmargs to
the boot JDK version check.
Here's an alternative patch. Please try it out and see if it works for
you. It will apply the --with-boot-jdk-jvmargs at all calls to Java.
diff --git a/make/autoconf/basics.m4 b/make/autoconf/basics.m4
--- a/make/autoconf/basics.m4
+++ b/make/autoconf/basics.m4
@@ -168,7 +168,7 @@
[
$ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD
$ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD
- OUTPUT=`$3 $1 -version 2>&1`
+ OUTPUT=`$3 $1 $USER_BOOT_JDK_OPTIONS -version 2>&1`
FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn`
FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""`
if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
diff --git a/make/autoconf/boot-jdk.m4 b/make/autoconf/boot-jdk.m4
--- a/make/autoconf/boot-jdk.m4
+++ b/make/autoconf/boot-jdk.m4
@@ -74,7 +74,17 @@
BOOT_JDK_FOUND=no
else
# Oh, this is looking good! We probably have found a proper
JDK. Is it the correct version?
- BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $HEAD
-n 1`
+ BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" $USER_BOOT_JDK_OPTIONS
-version 2>&1 | $HEAD -n 1`
+ if [ [[ "$BOOT_JDK_VERSION" =~ "Picked up _JAVA_OPTIONS" ]]
]; then
+ AC_MSG_NOTICE([You have _JAVA_OPTIONS set. This can mess up
the build. Please use --with-boot-jdk-jvmargs instead.])
+ AC_MSG_ERROR([Cannot continue])
+ fi
+ if [ [[ "$BOOT_JDK_VERSION" =~ "Unrecognized option" ]] ]; then
+ AC_MSG_NOTICE([The specified --with-boot-jdk-jvmargs is
invalid for the tested java])
+ AC_MSG_NOTICE([Error message: "$BOOT_JDK_VERSION".])
+ AC_MSG_NOTICE([Please fix arguments, or point to an
explicit boot JDK which accept these arguments])
+ AC_MSG_ERROR([Cannot continue])
+ fi
# Extra M4 quote needed to protect [] in grep expression.
[FOUND_CORRECT_VERSION=`$ECHO $BOOT_JDK_VERSION \
@@ -90,7 +100,7 @@
AC_MSG_CHECKING([for Boot JDK])
AC_MSG_RESULT([$BOOT_JDK])
AC_MSG_CHECKING([Boot JDK version])
- BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR
'\n\r' ' '`
+ BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java"
$USER_BOOT_JDK_OPTIONS -version 2>&1 | $TR '\n\r' ' '`
AC_MSG_RESULT([$BOOT_JDK_VERSION])
fi # end check jdk version
fi # end check javac
@@ -283,6 +293,11 @@
AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk],
[path to Boot JDK (used to bootstrap build) @<:@probed@:>@])])
+ AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs],
+ [specify additional arguments to be passed to Boot JDK tools
@<:@none@:>@])])
+
+ USER_BOOT_JDK_OPTIONS="$with_boot_jdk_jvmargs"
+
# We look for the Boot JDK through various means, going from more
certain to
# more of a guess-work. After each test, BOOT_JDK_FOUND is set to
"yes" if
# we detected something (if so, the path to the jdk is in BOOT_JDK).
But we
@@ -372,10 +387,6 @@
# Specify jvm options for anything that is run with the Boot JDK.
# Not all JVM:s accept the same arguments on the command line.
#
- AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs],
- [specify JVM arguments to be passed to all java invocations of boot
JDK, overriding the default values,
- e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])])
-
AC_MSG_CHECKING([flags for boot jdk java command] )
# Force en-US environment
@@ -389,8 +400,8 @@
ADD_JVM_ARG_IF_OK([-Xshare:auto],boot_jdk_jvmargs,[$JAVA])
fi
- # Apply user provided options.
- ADD_JVM_ARG_IF_OK([$with_boot_jdk_jvmargs],boot_jdk_jvmargs,[$JAVA])
+ # Finally append user provided options to allow them to override.
+ ADD_JVM_ARG_IF_OK([$USER_BOOT_JDK_OPTIONS],boot_jdk_jvmargs,[$JAVA])
AC_MSG_RESULT([$boot_jdk_jvmargs])
/Magnus
>
> Cheers,
> Ao Qi
More information about the build-dev
mailing list