1 #
   2 # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 ###############################################################################
  27 # Check which variant of the JDK that we want to build.
  28 # Currently we have:
  29 #    normal:   standard edition
  30 # but the custom make system may add other variants
  31 #
  32 # Effectively the JDK variant gives a name to a specific set of
  33 # modules to compile into the JDK.
  34 AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT],
  35 [
  36   # Deprecated in JDK 12
  37   BASIC_DEPRECATED_ARG_WITH([jdk-variant])
  38 ])
  39 
  40 ###############################################################################
  41 # Set the debug level
  42 #    release: no debug information, all optimizations, no asserts.
  43 #    optimized: no debug information, all optimizations, no asserts, HotSpot target is 'optimized'.
  44 #    fastdebug: debug information (-g), all optimizations, all asserts
  45 #    slowdebug: debug information (-g), no optimizations, all asserts
  46 AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL],
  47 [
  48   DEBUG_LEVEL="release"
  49   AC_MSG_CHECKING([which debug level to use])
  50   AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],
  51       [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])],
  52       [
  53         ENABLE_DEBUG="${enableval}"
  54         DEBUG_LEVEL="fastdebug"
  55       ], [ENABLE_DEBUG="no"])
  56 
  57   AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level],
  58       [set the debug level (release, fastdebug, slowdebug, optimized) @<:@release@:>@])],
  59       [
  60         DEBUG_LEVEL="${withval}"
  61         if test "x$ENABLE_DEBUG" = xyes; then
  62           AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.])
  63         fi
  64       ])
  65   AC_MSG_RESULT([$DEBUG_LEVEL])
  66 
  67   if test "x$DEBUG_LEVEL" != xrelease && \
  68       test "x$DEBUG_LEVEL" != xoptimized && \
  69       test "x$DEBUG_LEVEL" != xfastdebug && \
  70       test "x$DEBUG_LEVEL" != xslowdebug; then
  71     AC_MSG_ERROR([Allowed debug levels are: release, fastdebug, slowdebug and optimized])
  72   fi
  73 
  74   # Translate DEBUG_LEVEL to debug level used by Hotspot
  75   HOTSPOT_DEBUG_LEVEL="$DEBUG_LEVEL"
  76   if test "x$DEBUG_LEVEL" = xrelease; then
  77     HOTSPOT_DEBUG_LEVEL="product"
  78   elif test "x$DEBUG_LEVEL" = xslowdebug; then
  79     HOTSPOT_DEBUG_LEVEL="debug"
  80   fi
  81 
  82   if test "x$DEBUG_LEVEL" = xoptimized; then
  83     # The debug level 'optimized' is a little special because it is currently only
  84     # applicable to the HotSpot build where it means to build a completely
  85     # optimized version of the VM without any debugging code (like for the
  86     # 'release' debug level which is called 'product' in the HotSpot build) but
  87     # with the exception that it can contain additional code which is otherwise
  88     # protected by '#ifndef PRODUCT' macros. These 'optimized' builds are used to
  89     # test new and/or experimental features which are not intended for customer
  90     # shipment. Because these new features need to be tested and benchmarked in
  91     # real world scenarios, we want to build the containing JDK at the 'release'
  92     # debug level.
  93     DEBUG_LEVEL="release"
  94   fi
  95 
  96   AC_SUBST(HOTSPOT_DEBUG_LEVEL)
  97   AC_SUBST(DEBUG_LEVEL)
  98 ])
  99 
 100 ###############################################################################
 101 #
 102 # Should we build only OpenJDK even if closed sources are present?
 103 #
 104 AC_DEFUN_ONCE([JDKOPT_SETUP_OPEN_OR_CUSTOM],
 105 [
 106   AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only],
 107       [suppress building custom source even if present @<:@disabled@:>@])],,[enable_openjdk_only="no"])
 108 
 109   AC_MSG_CHECKING([if custom source is suppressed (openjdk-only)])
 110   AC_MSG_RESULT([$enable_openjdk_only])
 111   if test "x$enable_openjdk_only" = "xyes"; then
 112     SUPPRESS_CUSTOM_EXTENSIONS="true"
 113   elif test "x$enable_openjdk_only" = "xno"; then
 114     SUPPRESS_CUSTOM_EXTENSIONS="false"
 115   else
 116     AC_MSG_ERROR([Invalid value for --enable-openjdk-only: $enable_openjdk_only])
 117   fi
 118 ])
 119 
 120 AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
 121 [
 122   # Should we build a JDK without a graphical UI?
 123   AC_MSG_CHECKING([headless only])
 124   AC_ARG_ENABLE([headless-only], [AS_HELP_STRING([--enable-headless-only],
 125       [only build headless (no GUI) support @<:@disabled@:>@])])
 126 
 127   if test "x$enable_headless_only" = "xyes"; then
 128     ENABLE_HEADLESS_ONLY="true"
 129     AC_MSG_RESULT([yes])
 130   elif test "x$enable_headless_only" = "xno"; then
 131     ENABLE_HEADLESS_ONLY="false"
 132     AC_MSG_RESULT([no])
 133   elif test "x$enable_headless_only" = "x"; then
 134     ENABLE_HEADLESS_ONLY="false"
 135     AC_MSG_RESULT([no])
 136   else
 137     AC_MSG_ERROR([--enable-headless-only can only take yes or no])
 138   fi
 139 
 140   AC_SUBST(ENABLE_HEADLESS_ONLY)
 141 
 142   # Should we build the complete docs, or just a lightweight version?
 143   AC_ARG_ENABLE([full-docs], [AS_HELP_STRING([--enable-full-docs],
 144       [build complete documentation @<:@enabled if all tools found@:>@])])
 145 
 146   # Verify dependencies
 147   AC_MSG_CHECKING([for graphviz dot])
 148   if test "x$DOT" != "x"; then
 149     AC_MSG_RESULT([yes])
 150   else
 151     AC_MSG_RESULT([no, cannot generate full docs])
 152     FULL_DOCS_DEP_MISSING=true
 153   fi
 154 
 155   AC_MSG_CHECKING([for pandoc])
 156   if test "x$PANDOC" != "x"; then
 157     AC_MSG_RESULT([yes])
 158   else
 159     AC_MSG_RESULT([no, cannot generate full docs])
 160     FULL_DOCS_DEP_MISSING=true
 161   fi
 162 
 163   AC_MSG_CHECKING([full docs])
 164   if test "x$enable_full_docs" = xyes; then
 165     if test "x$FULL_DOCS_DEP_MISSING" = "xtrue"; then
 166       AC_MSG_RESULT([no, missing dependencies])
 167       HELP_MSG_MISSING_DEPENDENCY([dot])
 168       AC_MSG_ERROR([Cannot enable full docs with missing dependencies. See above. $HELP_MSG])
 169     else
 170       ENABLE_FULL_DOCS=true
 171       AC_MSG_RESULT([yes, forced])
 172     fi
 173   elif test "x$enable_full_docs" = xno; then
 174     ENABLE_FULL_DOCS=false
 175     AC_MSG_RESULT([no, forced])
 176   elif test "x$enable_full_docs" = x; then
 177     # Check for prerequisites
 178     if test "x$FULL_DOCS_DEP_MISSING" = xtrue; then
 179       ENABLE_FULL_DOCS=false
 180       AC_MSG_RESULT([no, missing dependencies])
 181     else
 182       ENABLE_FULL_DOCS=true
 183       AC_MSG_RESULT([yes, dependencies present])
 184     fi
 185   else
 186     AC_MSG_ERROR([--enable-full-docs can only take yes or no])
 187   fi
 188 
 189   AC_SUBST(ENABLE_FULL_DOCS)
 190 
 191   # Choose cacerts source file
 192   AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file],
 193       [specify alternative cacerts file])])
 194   AC_MSG_CHECKING([for cacerts file])
 195   if test "x$with_cacerts_file" == x; then
 196     AC_MSG_RESULT([default])
 197   else
 198     CACERTS_FILE=$with_cacerts_file
 199     if test ! -f "$CACERTS_FILE"; then
 200       AC_MSG_RESULT([fail])
 201       AC_MSG_ERROR([Specified cacerts file "$CACERTS_FILE" does not exist])
 202     fi
 203     AC_MSG_RESULT([$CACERTS_FILE])
 204   fi
 205   AC_SUBST(CACERTS_FILE)
 206 
 207   # Enable or disable unlimited crypto
 208   AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--disable-unlimited-crypto],
 209       [Disable unlimited crypto policy @<:@enabled@:>@])],,
 210       [enable_unlimited_crypto=yes])
 211   if test "x$enable_unlimited_crypto" = "xyes"; then
 212     UNLIMITED_CRYPTO=true
 213   else
 214     UNLIMITED_CRYPTO=false
 215   fi
 216   AC_SUBST(UNLIMITED_CRYPTO)
 217 
 218   # Should we build the serviceability agent (SA)?
 219   INCLUDE_SA=true
 220   if HOTSPOT_CHECK_JVM_VARIANT(zero); then
 221     INCLUDE_SA=false
 222   fi
 223   if test "x$OPENJDK_TARGET_OS" = xaix ; then
 224     INCLUDE_SA=false
 225   fi
 226   if test "x$OPENJDK_TARGET_CPU" = xs390x ; then
 227     INCLUDE_SA=false
 228   fi
 229   AC_SUBST(INCLUDE_SA)
 230 
 231   # Compress jars
 232   COMPRESS_JARS=false
 233 
 234   AC_SUBST(COMPRESS_JARS)
 235 
 236   # Setup default copyright year. Mostly overridden when building close to a new year.
 237   AC_ARG_WITH(copyright-year, [AS_HELP_STRING([--with-copyright-year],
 238       [Set copyright year value for build @<:@current year@:>@])])
 239   if test "x$with_copyright_year" = xyes; then
 240     AC_MSG_ERROR([Copyright year must have a value])
 241   elif test "x$with_copyright_year" != x; then
 242     COPYRIGHT_YEAR="$with_copyright_year"
 243   else
 244     COPYRIGHT_YEAR=`$DATE +'%Y'`
 245   fi
 246   AC_SUBST(COPYRIGHT_YEAR)
 247 ])
 248 
 249 ###############################################################################
 250 #
 251 # Enable or disable the elliptic curve crypto implementation
 252 #
 253 AC_DEFUN_ONCE([JDKOPT_DETECT_INTREE_EC],
 254 [
 255   AC_MSG_CHECKING([if elliptic curve crypto implementation is present])
 256 
 257   if test -d "${TOPDIR}/src/jdk.crypto.ec/share/native/libsunec/impl"; then
 258     ENABLE_INTREE_EC=true
 259     AC_MSG_RESULT([yes])
 260   else
 261     ENABLE_INTREE_EC=false
 262     AC_MSG_RESULT([no])
 263   fi
 264 
 265   AC_SUBST(ENABLE_INTREE_EC)
 266 ])
 267 
 268 AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
 269 [
 270   #
 271   # NATIVE_DEBUG_SYMBOLS
 272   # This must be done after the toolchain is setup, since we're looking at objcopy.
 273   #
 274   AC_MSG_CHECKING([what type of native debug symbols to use])
 275   AC_ARG_WITH([native-debug-symbols],
 276       [AS_HELP_STRING([--with-native-debug-symbols],
 277       [set the native debug symbol configuration (none, internal, external, zipped) @<:@varying@:>@])],
 278       [
 279         if test "x$OPENJDK_TARGET_OS" = xaix; then
 280           if test "x$withval" = xexternal || test "x$withval" = xzipped; then
 281             AC_MSG_ERROR([AIX only supports the parameters 'none' and 'internal' for --with-native-debug-symbols])
 282           fi
 283         fi
 284       ],
 285       [
 286         if test "x$OPENJDK_TARGET_OS" = xaix; then
 287           # AIX doesn't support 'external' so use 'internal' as default
 288           with_native_debug_symbols="internal"
 289         else
 290           if test "x$STATIC_BUILD" = xtrue; then
 291             with_native_debug_symbols="none"
 292           else
 293             with_native_debug_symbols="external"
 294           fi
 295         fi
 296       ])
 297   NATIVE_DEBUG_SYMBOLS=$with_native_debug_symbols
 298   AC_MSG_RESULT([$NATIVE_DEBUG_SYMBOLS])
 299 
 300   if test "x$NATIVE_DEBUG_SYMBOLS" = xzipped; then
 301 
 302     if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
 303       if test "x$OBJCOPY" = x; then
 304         # enabling of enable-debug-symbols and can't find objcopy
 305         # this is an error
 306         AC_MSG_ERROR([Unable to find objcopy, cannot enable native debug symbols])
 307       fi
 308     fi
 309 
 310     COMPILE_WITH_DEBUG_SYMBOLS=true
 311     COPY_DEBUG_SYMBOLS=true
 312     ZIP_EXTERNAL_DEBUG_SYMBOLS=true
 313   elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then
 314     COMPILE_WITH_DEBUG_SYMBOLS=false
 315     COPY_DEBUG_SYMBOLS=false
 316     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 317   elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then
 318     COMPILE_WITH_DEBUG_SYMBOLS=true
 319     COPY_DEBUG_SYMBOLS=false
 320     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 321   elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then
 322 
 323     if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
 324       if test "x$OBJCOPY" = x; then
 325         # enabling of enable-debug-symbols and can't find objcopy
 326         # this is an error
 327         AC_MSG_ERROR([Unable to find objcopy, cannot enable native debug symbols])
 328       fi
 329     fi
 330 
 331     COMPILE_WITH_DEBUG_SYMBOLS=true
 332     COPY_DEBUG_SYMBOLS=true
 333     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 334   else
 335     AC_MSG_ERROR([Allowed native debug symbols are: none, internal, external, zipped])
 336   fi
 337 
 338   AC_SUBST(COMPILE_WITH_DEBUG_SYMBOLS)
 339   AC_SUBST(COPY_DEBUG_SYMBOLS)
 340   AC_SUBST(ZIP_EXTERNAL_DEBUG_SYMBOLS)
 341 ])
 342 
 343 ################################################################################
 344 #
 345 # Gcov coverage data for hotspot
 346 #
 347 AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
 348 [
 349   AC_ARG_ENABLE(native-coverage, [AS_HELP_STRING([--enable-native-coverage],
 350       [enable native compilation with code coverage data@<:@disabled@:>@])])
 351   GCOV_ENABLED="false"
 352   if test "x$enable_native_coverage" = "xyes"; then
 353     if test "x$TOOLCHAIN_TYPE" = "xgcc"; then
 354       AC_MSG_CHECKING([if native coverage is enabled])
 355       AC_MSG_RESULT([yes])
 356       GCOV_CFLAGS="-fprofile-arcs -ftest-coverage -fno-inline"
 357       GCOV_LDFLAGS="-fprofile-arcs"
 358       JVM_CFLAGS="$JVM_CFLAGS $GCOV_CFLAGS"
 359       JVM_LDFLAGS="$JVM_LDFLAGS $GCOV_LDFLAGS"
 360       CFLAGS_JDKLIB="$CFLAGS_JDKLIB $GCOV_CFLAGS"
 361       CFLAGS_JDKEXE="$CFLAGS_JDKEXE $GCOV_CFLAGS"
 362       CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $GCOV_CFLAGS"
 363       CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $GCOV_CFLAGS"
 364       LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $GCOV_LDFLAGS"
 365       LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $GCOV_LDFLAGS"
 366       GCOV_ENABLED="true"
 367     else
 368       AC_MSG_ERROR([--enable-native-coverage only works with toolchain type gcc])
 369     fi
 370   elif test "x$enable_native_coverage" = "xno"; then
 371     AC_MSG_CHECKING([if native coverage is enabled])
 372     AC_MSG_RESULT([no])
 373   elif test "x$enable_native_coverage" != "x"; then
 374     AC_MSG_ERROR([--enable-native-coverage can only be assigned "yes" or "no"])
 375   fi
 376   AC_SUBST(GCOV_ENABLED)
 377 
 378   AC_ARG_WITH(jcov, [AS_HELP_STRING([--with-jcov],
 379       [jcov library location])])
 380   AC_ARG_WITH(jcov-input-jdk, [AS_HELP_STRING([--with-jcov-input-jdk],
 381       [jdk image to instrument])])
 382   JCOV_HOME=
 383   JCOV_INPUT_JDK=
 384   JCOV_ENABLED=
 385   if test "x$with_jcov" = "x" ; then
 386     JCOV_ENABLED="false"
 387   else
 388     JCOV_HOME="$with_jcov"
 389     if test ! -f "$JCOV_HOME/lib/jcov.jar"; then
 390       AC_MSG_RESULT([fail])
 391       AC_MSG_ERROR([Invalid JCov bundle: "$JCOV_HOME/lib/jcov.jar" does not exist])
 392     fi
 393     JCOV_ENABLED="true"
 394     BASIC_FIXUP_PATH(JCOV_HOME)
 395     if test "x$with_jcov_input_jdk" != "x" ; then
 396       JCOV_INPUT_JDK="$with_jcov_input_jdk"
 397       if test ! -f "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX"; then
 398         AC_MSG_RESULT([fail])
 399         AC_MSG_ERROR([Invalid JDK bundle: "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX" does not exist])
 400       fi
 401       BASIC_FIXUP_PATH(JCOV_INPUT_JDK)
 402     fi
 403   fi
 404   AC_SUBST(JCOV_ENABLED)
 405   AC_SUBST(JCOV_HOME)
 406   AC_SUBST(JCOV_INPUT_JDK)
 407 ])
 408 
 409 ###############################################################################
 410 #
 411 # AddressSanitizer
 412 #
 413 AC_DEFUN_ONCE([JDKOPT_SETUP_ADDRESS_SANITIZER],
 414 [
 415   AC_ARG_ENABLE(asan, [AS_HELP_STRING([--enable-asan],
 416       [enable AddressSanitizer if possible @<:@disabled@:>@])])
 417   ASAN_ENABLED="no"
 418   if test "x$enable_asan" = "xyes"; then
 419     case $TOOLCHAIN_TYPE in
 420       gcc | clang)
 421         AC_MSG_CHECKING([if asan is enabled])
 422         AC_MSG_RESULT([yes])
 423         ASAN_CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
 424         ASAN_LDFLAGS="-fsanitize=address"
 425         JVM_CFLAGS="$JVM_CFLAGS $ASAN_CFLAGS"
 426         JVM_LDFLAGS="$JVM_LDFLAGS $ASAN_LDFLAGS"
 427         CFLAGS_JDKLIB="$CFLAGS_JDKLIB $ASAN_CFLAGS"
 428         CFLAGS_JDKEXE="$CFLAGS_JDKEXE $ASAN_CFLAGS"
 429         CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $ASAN_CFLAGS"
 430         CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $ASAN_CFLAGS"
 431         LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $ASAN_LDFLAGS"
 432         LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $ASAN_LDFLAGS"
 433         ASAN_ENABLED="yes"
 434         ;;
 435       *)
 436         AC_MSG_ERROR([--enable-asan only works with toolchain type gcc or clang])
 437         ;;
 438     esac
 439   elif test "x$enable_asan" = "xno"; then
 440     AC_MSG_CHECKING([if asan is enabled])
 441     AC_MSG_RESULT([no])
 442   elif test "x$enable_asan" != "x"; then
 443     AC_MSG_ERROR([--enable-asan can only be assigned "yes" or "no"])
 444   fi
 445 
 446   AC_SUBST(ASAN_ENABLED)
 447 ])
 448 
 449 ################################################################################
 450 #
 451 # Static build support.  When enabled will generate static
 452 # libraries instead of shared libraries for all JDK libs.
 453 #
 454 AC_DEFUN_ONCE([JDKOPT_SETUP_STATIC_BUILD],
 455 [
 456   AC_ARG_ENABLE([static-build], [AS_HELP_STRING([--enable-static-build],
 457     [enable static library build @<:@disabled@:>@])])
 458   STATIC_BUILD=false
 459   if test "x$enable_static_build" = "xyes"; then
 460     AC_MSG_CHECKING([if static build is enabled])
 461     AC_MSG_RESULT([yes])
 462     if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then
 463       AC_MSG_ERROR([--enable-static-build is only supported for macosx builds])
 464     fi
 465     STATIC_BUILD_CFLAGS="-DSTATIC_BUILD=1"
 466     CFLAGS_JDKLIB_EXTRA="$CFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS"
 467     CXXFLAGS_JDKLIB_EXTRA="$CXXFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS"
 468     STATIC_BUILD=true
 469   elif test "x$enable_static_build" = "xno"; then
 470     AC_MSG_CHECKING([if static build is enabled])
 471     AC_MSG_RESULT([no])
 472   elif test "x$enable_static_build" != "x"; then
 473     AC_MSG_ERROR([--enable-static-build can only be assigned "yes" or "no"])
 474   fi
 475 
 476   AC_SUBST(STATIC_BUILD)
 477 ])
 478 
 479 ################################################################################
 480 #
 481 # jlink options.
 482 # We always keep packaged modules in JDK image.
 483 #
 484 AC_DEFUN_ONCE([JDKOPT_SETUP_JLINK_OPTIONS],
 485 [
 486   AC_ARG_ENABLE([keep-packaged-modules], [AS_HELP_STRING([--disable-keep-packaged-modules],
 487     [Do not keep packaged modules in jdk image @<:@enable@:>@])])
 488 
 489   AC_MSG_CHECKING([if packaged modules are kept])
 490   if test "x$enable_keep_packaged_modules" = "xyes"; then
 491     AC_MSG_RESULT([yes])
 492     JLINK_KEEP_PACKAGED_MODULES=true
 493   elif test "x$enable_keep_packaged_modules" = "xno"; then
 494     AC_MSG_RESULT([no])
 495     JLINK_KEEP_PACKAGED_MODULES=false
 496   elif test "x$enable_keep_packaged_modules" = "x"; then
 497     AC_MSG_RESULT([yes (default)])
 498     JLINK_KEEP_PACKAGED_MODULES=true
 499   else
 500     AC_MSG_RESULT([error])
 501     AC_MSG_ERROR([--enable-keep-packaged-modules accepts no argument])
 502   fi
 503 
 504   AC_SUBST(JLINK_KEEP_PACKAGED_MODULES)
 505 ])
 506 
 507 ################################################################################
 508 #
 509 # Check if building of the jtreg failure handler should be enabled.
 510 #
 511 AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER],
 512 [
 513   AC_ARG_ENABLE([jtreg-failure-handler], [AS_HELP_STRING([--enable-jtreg-failure-handler],
 514     [forces build of the jtreg failure handler to be enabled, missing dependencies
 515      become fatal errors. Default is auto, where the failure handler is built if all
 516      dependencies are present and otherwise just disabled.])])
 517 
 518   AC_MSG_CHECKING([if jtreg failure handler should be built])
 519 
 520   if test "x$enable_jtreg_failure_handler" = "xyes"; then
 521     if test "x$JT_HOME" = "x"; then
 522       AC_MSG_ERROR([Cannot enable jtreg failure handler without jtreg.])
 523     else
 524       BUILD_FAILURE_HANDLER=true
 525       AC_MSG_RESULT([yes, forced])
 526     fi
 527   elif test "x$enable_jtreg_failure_handler" = "xno"; then
 528     BUILD_FAILURE_HANDLER=false
 529     AC_MSG_RESULT([no, forced])
 530   elif test "x$enable_jtreg_failure_handler" = "xauto" \
 531       || test "x$enable_jtreg_failure_handler" = "x"; then
 532     if test "x$JT_HOME" = "x"; then
 533       BUILD_FAILURE_HANDLER=false
 534       AC_MSG_RESULT([no, missing jtreg])
 535     else
 536       BUILD_FAILURE_HANDLER=true
 537       AC_MSG_RESULT([yes, jtreg present])
 538     fi
 539   else
 540     AC_MSG_ERROR([Invalid value for --enable-jtreg-failure-handler: $enable_jtreg_failure_handler])
 541   fi
 542 
 543   AC_SUBST(BUILD_FAILURE_HANDLER)
 544 ])
 545 
 546 ################################################################################
 547 #
 548 # Enable or disable generation of the classlist at build time
 549 #
 550 AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_GENERATE_CLASSLIST],
 551 [
 552   AC_ARG_ENABLE([generate-classlist], [AS_HELP_STRING([--disable-generate-classlist],
 553       [forces enabling or disabling of the generation of a CDS classlist at build time.
 554       Default is to generate it when either the server or client JVMs are built and
 555       enable-cds is true.])])
 556 
 557   # Check if it's likely that it's possible to generate the classlist. Depending
 558   # on exact jvm configuration it could be possible anyway.
 559   if test "x$ENABLE_CDS" = "xtrue" && (HOTSPOT_CHECK_JVM_VARIANT(server) || HOTSPOT_CHECK_JVM_VARIANT(client) || HOTSPOT_CHECK_JVM_FEATURE(cds)); then
 560     ENABLE_GENERATE_CLASSLIST_POSSIBLE="true"
 561   else
 562     ENABLE_GENERATE_CLASSLIST_POSSIBLE="false"
 563   fi
 564 
 565   AC_MSG_CHECKING([if the CDS classlist generation should be enabled])
 566   if test "x$enable_generate_classlist" = "xyes"; then
 567     AC_MSG_RESULT([yes, forced])
 568     ENABLE_GENERATE_CLASSLIST="true"
 569     if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xfalse"; then
 570       AC_MSG_WARN([Generation of classlist might not be possible with JVM Variants $JVM_VARIANTS and enable-cds=$ENABLE_CDS])
 571     fi
 572   elif test "x$enable_generate_classlist" = "xno"; then
 573     AC_MSG_RESULT([no, forced])
 574     ENABLE_GENERATE_CLASSLIST="false"
 575   elif test "x$enable_generate_classlist" = "x"; then
 576     if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xtrue"; then
 577       AC_MSG_RESULT([yes])
 578       ENABLE_GENERATE_CLASSLIST="true"
 579     else
 580       AC_MSG_RESULT([no])
 581       ENABLE_GENERATE_CLASSLIST="false"
 582     fi
 583   else
 584     AC_MSG_ERROR([Invalid value for --enable-generate-classlist: $enable_generate_classlist])
 585   fi
 586 
 587   AC_SUBST(ENABLE_GENERATE_CLASSLIST)
 588 ])
 589 
 590 ################################################################################
 591 #
 592 # Optionally filter resource translations
 593 #
 594 AC_DEFUN([JDKOPT_EXCLUDE_TRANSLATIONS],
 595 [
 596   AC_ARG_WITH([exclude-translations], [AS_HELP_STRING([--with-exclude-translations],
 597       [a comma separated list of locales to exclude translations for. Default is
 598       to include all translations present in the source.])])
 599 
 600   EXCLUDE_TRANSLATIONS=""
 601   AC_MSG_CHECKING([if any translations should be excluded])
 602   if test "x$with_exclude_translations" != "x"; then
 603     EXCLUDE_TRANSLATIONS="${with_exclude_translations//,/ }"
 604     AC_MSG_RESULT([yes: $EXCLUDE_TRANSLATIONS])
 605   else
 606     AC_MSG_RESULT([no])
 607   fi
 608 
 609   AC_SUBST(EXCLUDE_TRANSLATIONS)
 610 ])
 611 
 612 ################################################################################
 613 #
 614 # Optionally disable man pages
 615 #
 616 AC_DEFUN([JDKOPT_ENABLE_DISABLE_MANPAGES],
 617 [
 618   AC_ARG_ENABLE([manpages], [AS_HELP_STRING([--disable-manpages],
 619       [Set to disable building of man pages @<:@enabled@:>@])])
 620 
 621   BUILD_MANPAGES="true"
 622   AC_MSG_CHECKING([if man pages should be built])
 623   if test "x$enable_manpages" = "x"; then
 624     AC_MSG_RESULT([yes])
 625   elif test "x$enable_manpages" = "xyes"; then
 626     AC_MSG_RESULT([yes, forced])
 627   elif test "x$enable_manpages" = "xno"; then
 628     AC_MSG_RESULT([no, forced])
 629     BUILD_MANPAGES="false"
 630   else
 631     AC_MSG_RESULT([no])
 632     AC_MSG_ERROR([--enable-manpages can only yes/no or empty])
 633   fi
 634 
 635   AC_SUBST(BUILD_MANPAGES)
 636 ])
 637 
 638 ################################################################################
 639 #
 640 # Disable the default CDS archive generation
 641 #   cross compilation - disabled
 642 #
 643 AC_DEFUN([JDKOPT_ENABLE_DISABLE_CDS_ARCHIVE],
 644 [
 645   AC_ARG_ENABLE([cds-archive], [AS_HELP_STRING([--disable-cds-archive],
 646       [Set to disable generation of a default CDS archive in the product image @<:@enabled@:>@])])
 647 
 648   AC_MSG_CHECKING([if a default CDS archive should be generated])
 649   if test "x$ENABLE_CDS" = "xfalse"; then
 650     AC_MSG_RESULT([no, because CDS is disabled])
 651     BUILD_CDS_ARCHIVE="false"
 652   elif test "x$COMPILE_TYPE" = "xcross"; then
 653     AC_MSG_RESULT([no, not possible with cross compilation])
 654     BUILD_CDS_ARCHIVE="false"
 655   elif test "x$enable_cds_archive" = "xyes"; then
 656     AC_MSG_RESULT([yes, forced])
 657     BUILD_CDS_ARCHIVE="true"
 658   elif test "x$enable_cds_archive" = "x"; then
 659     AC_MSG_RESULT([yes])
 660     BUILD_CDS_ARCHIVE="true"
 661   elif test "x$enable_cds_archive" = "xno"; then
 662     AC_MSG_RESULT([no, forced])
 663     BUILD_CDS_ARCHIVE="false"
 664   else
 665     AC_MSG_RESULT([no])
 666     AC_MSG_ERROR([--enable-cds_archive can only be yes/no or empty])
 667   fi
 668 
 669   AC_SUBST(BUILD_CDS_ARCHIVE)
 670 ])