--- old/make/autoconf/hotspot.m4 2018-04-12 13:36:36.832152286 +0200 +++ new/make/autoconf/hotspot.m4 2018-04-12 13:36:36.572152288 +0200 @@ -93,22 +93,16 @@ AC_MSG_RESULT([$JVM_VARIANTS]) # Check that the selected variants are valid - - # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326 - # Notice that the original variant failes on SLES 10 and 11 - NEEDLE=${VALID_JVM_VARIANTS// /$'\n'} - STACK=${JVM_VARIANTS// /$'\n'} - INVALID_VARIANTS=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"` + BASIC_GET_NON_MATCHING_VALUES(INVALID_VARIANTS, $JVM_VARIANTS, $VALID_JVM_VARIANTS) if test "x$INVALID_VARIANTS" != x; then - AC_MSG_NOTICE([Unknown variant(s) specified: $INVALID_VARIANTS]) - AC_MSG_ERROR([The available JVM variants are: $VALID_JVM_VARIANTS]) + AC_MSG_NOTICE([Unknown variant(s) specified: "$INVALID_VARIANTS"]) + AC_MSG_NOTICE([The available JVM variants are: "$VALID_JVM_VARIANTS"]) + AC_MSG_ERROR([Cannot continue]) fi # All "special" variants share the same output directory ("server") VALID_MULTIPLE_JVM_VARIANTS="server client minimal" - NEEDLE=${VALID_MULTIPLE_JVM_VARIANTS// /$'\n'} - STACK=${JVM_VARIANTS// /$'\n'} - INVALID_MULTIPLE_VARIANTS=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"` + BASIC_GET_NON_MATCHING_VALUES(INVALID_MULTIPLE_VARIANTS, $JVM_VARIANTS, $VALID_MULTIPLE_JVM_VARIANTS) if test "x$INVALID_MULTIPLE_VARIANTS" != x && test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = xtrue; then AC_MSG_ERROR([You cannot build multiple variants with anything else than $VALID_MULTIPLE_JVM_VARIANTS.]) fi @@ -263,14 +257,30 @@ # AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES], [ + # Prettify the VALID_JVM_FEATURES string + BASIC_SORT_LIST(VALID_JVM_FEATURES, $VALID_JVM_FEATURES) + # The user can in some cases supply additional jvm features. For the custom # variant, this defines the entire variant. AC_ARG_WITH([jvm-features], [AS_HELP_STRING([--with-jvm-features], - [additional JVM features to enable (separated by comma), use '--help' to show possible values @<:@none@:>@])]) + [JVM features to enable (foo) or disable (-foo), separated by comma. Use '--help' to show possible values @<:@none@:>@])]) if test "x$with_jvm_features" != x; then - AC_MSG_CHECKING([additional JVM features]) - JVM_FEATURES=`$ECHO $with_jvm_features | $SED -e 's/,/ /g'` - AC_MSG_RESULT([$JVM_FEATURES]) + AC_MSG_CHECKING([user specified JVM feature list]) + USER_JVM_FEATURE_LIST=`$ECHO $with_jvm_features | $SED -e 's/,/ /g'` + AC_MSG_RESULT([$user_jvm_feature_list]) + # These features will be added to all variant defaults + JVM_FEATURES=`$ECHO $USER_JVM_FEATURE_LIST | $AWK '{ for (i=1; i<=NF; i++) if (!match($i, /-.*/)) print $i }'` + # These features will be removed from all variant defaults + DISABLED_JVM_FEATURES=`$ECHO $USER_JVM_FEATURE_LIST | $AWK '{ for (i=1; i<=NF; i++) if (match($i, /-.*/)) print substr($i, 2) }'` + + # Verify that the user has provided valid features + BASIC_GET_NON_MATCHING_VALUES(INVALID_FEATURES, $JVM_FEATURES $DISABLED_JVM_FEATURES, $VALID_JVM_FEATURES) + if test "x$INVALID_FEATURES" != x; then + AC_MSG_NOTICE([Unknown JVM features specified: "$INVALID_FEATURES"]) + AC_MSG_NOTICE([The available JVM features are: "$VALID_JVM_FEATURES"]) + AC_MSG_ERROR([Cannot continue]) + fi + fi # Override hotspot cpu definitions for ARM platforms @@ -390,7 +400,7 @@ NON_MINIMAL_FEATURES="$NON_MINIMAL_FEATURES cds" fi - # Enable features depending on variant. + # Enable default features depending on variant. JVM_FEATURES_server="compiler1 compiler2 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci $JVM_FEATURES_aot $JVM_FEATURES_graal" JVM_FEATURES_client="compiler1 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci" JVM_FEATURES_core="$NON_MINIMAL_FEATURES $JVM_FEATURES" @@ -413,29 +423,29 @@ ]) ############################################################################### -# Validate JVM features once all setup is complete, including custom setup. +# Finalize JVM features once all setup is complete, including custom setup. # -AC_DEFUN_ONCE([HOTSPOT_VALIDATE_JVM_FEATURES], +AC_DEFUN_ONCE([HOTSPOT_FINALIZE_JVM_FEATURES], [ - # Keep feature lists sorted and free of duplicates - JVM_FEATURES_server="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_server | $SORT -u))" - JVM_FEATURES_client="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_client | $SORT -u))" - JVM_FEATURES_core="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_core | $SORT -u))" - JVM_FEATURES_minimal="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_minimal | $SORT -u))" - JVM_FEATURES_zero="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_zero | $SORT -u))" - JVM_FEATURES_custom="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_custom | $SORT -u))" - - # Validate features for variant in $JVM_VARIANTS; do AC_MSG_CHECKING([JVM features for JVM variant '$variant']) features_var_name=JVM_FEATURES_$variant - JVM_FEATURES_TO_TEST=${!features_var_name} - AC_MSG_RESULT([$JVM_FEATURES_TO_TEST]) - NEEDLE=${VALID_JVM_FEATURES// /$'\n'} - STACK=${JVM_FEATURES_TO_TEST// /$'\n'} - INVALID_FEATURES=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"` + JVM_FEATURES_FOR_VARIANT=${!features_var_name} + + # Filter out user-requested disabled features + BASIC_GET_NON_MATCHING_VALUES(JVM_FEATURES_FOR_VARIANT, $JVM_FEATURES_FOR_VARIANT, $DISABLED_JVM_FEATURES) + + # Keep feature lists sorted and free of duplicates + BASIC_SORT_LIST(JVM_FEATURES_FOR_VARIANT, $JVM_FEATURES_FOR_VARIANT) + + # Update real feature set variable + eval $features_var_name='"'$JVM_FEATURES_FOR_VARIANT'"' + AC_MSG_RESULT(["$JVM_FEATURES_FOR_VARIANT"]) + + # Validate features (for configure script errors, not user errors) + INVALID_FEATURES=`$GREP -Fvx "${VALID_JVM_FEATURES// /$'\n'}" <<< "${JVM_FEATURES_FOR_VARIANT// /$'\n'}"` if test "x$INVALID_FEATURES" != x; then - AC_MSG_ERROR([Invalid JVM feature(s): $INVALID_FEATURES]) + AC_MSG_ERROR([Internal configure script error. Invalid JVM feature(s): $INVALID_FEATURES]) fi done ])