1 #
   2 # Copyright (c) 2011, 2020, 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 AC_DEFUN_ONCE([HELP_SETUP_DEPENDENCY_HELP],
  27 [
  28   AC_CHECK_PROGS(PKGHANDLER, zypper apt-get yum brew port pkgutil pkgadd)
  29 ])
  30 
  31 AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY],
  32 [
  33   # Print a helpful message on how to acquire the necessary build dependency.
  34   # $1 is the help tag: cups, alsa etc
  35   MISSING_DEPENDENCY=$1
  36 
  37   if test "x$MISSING_DEPENDENCY" = "xopenjdk"; then
  38     HELP_MSG="OpenJDK distributions are available at http://jdk.java.net/."
  39   elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
  40     cygwin_help $MISSING_DEPENDENCY
  41   elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
  42     msys_help $MISSING_DEPENDENCY
  43   else
  44     PKGHANDLER_COMMAND=
  45 
  46     case $PKGHANDLER in
  47       apt-get)
  48         apt_help     $MISSING_DEPENDENCY ;;
  49       yum)
  50         yum_help     $MISSING_DEPENDENCY ;;
  51       brew)
  52         brew_help    $MISSING_DEPENDENCY ;;
  53       port)
  54         port_help    $MISSING_DEPENDENCY ;;
  55       pkgutil)
  56         pkgutil_help $MISSING_DEPENDENCY ;;
  57       pkgadd)
  58         pkgadd_help  $MISSING_DEPENDENCY ;;
  59       zypper)
  60         zypper_help  $MISSING_DEPENDENCY ;;
  61     esac
  62 
  63     if test "x$PKGHANDLER_COMMAND" != x; then
  64       HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
  65     fi
  66   fi
  67 ])
  68 
  69 cygwin_help() {
  70   case $1 in
  71     unzip)
  72       PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P unzip )"
  73       HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
  74       ;;
  75     zip)
  76       PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P zip )"
  77       HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
  78       ;;
  79     make)
  80       PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P make )"
  81       HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
  82       ;;
  83   esac
  84 }
  85 
  86 msys_help() {
  87   PKGHANDLER_COMMAND=""
  88 }
  89 
  90 apt_help() {
  91   case $1 in
  92     reduced)
  93       PKGHANDLER_COMMAND="sudo apt-get install gcc-multilib g++-multilib" ;;
  94     devkit)
  95       PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;;
  96     alsa)
  97       PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;;
  98     cups)
  99       PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;;
 100     fontconfig)
 101       PKGHANDLER_COMMAND="sudo apt-get install libfontconfig1-dev" ;;
 102     freetype)
 103       PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;;
 104     ffi)
 105       PKGHANDLER_COMMAND="sudo apt-get install libffi-dev" ;;
 106     x11)
 107       PKGHANDLER_COMMAND="sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev" ;;
 108     ccache)
 109       PKGHANDLER_COMMAND="sudo apt-get install ccache" ;;
 110     dtrace)
 111       PKGHANDLER_COMMAND="sudo apt-get install systemtap-sdt-dev" ;;
 112   esac
 113 }
 114 
 115 zypper_help() {
 116   case $1 in
 117     devkit)
 118       PKGHANDLER_COMMAND="sudo zypper install gcc gcc-c++" ;;
 119     alsa)
 120       PKGHANDLER_COMMAND="sudo zypper install alsa-devel" ;;
 121     cups)
 122       PKGHANDLER_COMMAND="sudo zypper install cups-devel" ;;
 123     fontconfig)
 124       PKGHANDLER_COMMAND="sudo zypper install fontconfig-devel" ;;
 125     freetype)
 126       PKGHANDLER_COMMAND="sudo zypper install freetype-devel" ;;
 127     x11)
 128       PKGHANDLER_COMMAND="sudo zypper install libX11-devel libXext-devel libXrender-devel libXrandr-devel libXtst-devel libXt-devel libXi-devel" ;;
 129     ccache)
 130       PKGHANDLER_COMMAND="sudo zypper install ccache" ;;
 131   esac
 132 }
 133 
 134 yum_help() {
 135   case $1 in
 136     devkit)
 137       PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;;
 138     alsa)
 139       PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;;
 140     cups)
 141       PKGHANDLER_COMMAND="sudo yum install cups-devel" ;;
 142     fontconfig)
 143       PKGHANDLER_COMMAND="sudo yum install fontconfig-devel" ;;
 144     freetype)
 145       PKGHANDLER_COMMAND="sudo yum install freetype-devel" ;;
 146     x11)
 147       PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel" ;;
 148     ccache)
 149       PKGHANDLER_COMMAND="sudo yum install ccache" ;;
 150   esac
 151 }
 152 
 153 brew_help() {
 154   case $1 in
 155     freetype)
 156       PKGHANDLER_COMMAND="brew install freetype" ;;
 157     ccache)
 158       PKGHANDLER_COMMAND="brew install ccache" ;;
 159   esac
 160 }
 161 
 162 port_help() {
 163   PKGHANDLER_COMMAND=""
 164 }
 165 
 166 pkgutil_help() {
 167   PKGHANDLER_COMMAND=""
 168 }
 169 
 170 pkgadd_help() {
 171   PKGHANDLER_COMMAND=""
 172 }
 173 
 174 # This function will check if we're called from the "configure" wrapper while
 175 # printing --help. If so, we will print out additional information that can
 176 # only be extracted within the autoconf script, and then exit. This must be
 177 # called at the very beginning in configure.ac.
 178 AC_DEFUN_ONCE([HELP_PRINT_ADDITIONAL_HELP_AND_EXIT],
 179 [
 180   if test "x$CONFIGURE_PRINT_ADDITIONAL_HELP" != x; then
 181 
 182     # Print available toolchains
 183     $PRINTF "The following toolchains are valid as arguments to --with-toolchain-type.\n"
 184     $PRINTF "Which are available to use depends on the build platform.\n"
 185     for toolchain in $VALID_TOOLCHAINS_all; do
 186       # Use indirect variable referencing
 187       toolchain_var_name=TOOLCHAIN_DESCRIPTION_$toolchain
 188       TOOLCHAIN_DESCRIPTION=${!toolchain_var_name}
 189       $PRINTF "  %-22s  %s\n" $toolchain "$TOOLCHAIN_DESCRIPTION"
 190     done
 191     $PRINTF "\n"
 192 
 193     # Print available JVM features
 194     $PRINTF "The following JVM features are valid as arguments to --with-jvm-features.\n"
 195     $PRINTF "Which are available to use depends on the environment and JVM variant.\n"
 196     m4_foreach(FEATURE, m4_split(jvm_features_valid), [
 197       # Create an m4 variable containing the description for FEATURE.
 198       m4_define(FEATURE_DESCRIPTION, [jvm_feature_desc_]m4_translit(FEATURE, -, _))
 199       $PRINTF "  %-22s  %s\n" FEATURE "FEATURE_DESCRIPTION"
 200       m4_undefine([FEATURE_DESCRIPTION])
 201     ])
 202 
 203     # And now exit directly
 204     exit 0
 205   fi
 206 ])
 207 
 208 AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS],
 209 [
 210   # Finally output some useful information to the user
 211 
 212   printf "\n"
 213   printf "====================================================\n"
 214   if test "x$no_create" != "xyes"; then
 215     if test "x$IS_RECONFIGURE" != "xyes"; then
 216       printf "A new configuration has been successfully created in\n%s\n" "$OUTPUTDIR"
 217     else
 218       printf "The existing configuration has been successfully updated in\n%s\n" "$OUTPUTDIR"
 219     fi
 220   else
 221     if test "x$IS_RECONFIGURE" != "xyes"; then
 222       printf "A configuration has been successfully checked but not created\n"
 223     else
 224       printf "The existing configuration has been successfully checked in\n%s\n" "$OUTPUTDIR"
 225     fi
 226   fi
 227   if test "x$CONFIGURE_COMMAND_LINE" != x; then
 228     printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n"
 229   else
 230     printf "using default settings.\n"
 231   fi
 232 
 233   printf "\n"
 234   printf "Configuration summary:\n"
 235   printf "* Debug level:    $DEBUG_LEVEL\n"
 236   printf "* HS debug level: $HOTSPOT_DEBUG_LEVEL\n"
 237   printf "* JVM variants:   $JVM_VARIANTS\n"
 238   printf "* JVM features:   "
 239 
 240   for variant in $JVM_VARIANTS; do
 241     features_var_name=JVM_FEATURES_$variant
 242     JVM_FEATURES_FOR_VARIANT=${!features_var_name}
 243     printf "$variant: \'$JVM_FEATURES_FOR_VARIANT\' "
 244   done
 245   printf "\n"
 246 
 247   printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n"
 248   printf "* Version string: $VERSION_STRING ($VERSION_SHORT)\n"
 249 
 250   printf "\n"
 251   printf "Tools summary:\n"
 252   if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
 253     printf "* Environment:    $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION. Windows version $WINDOWS_VERSION"
 254     if test "x$WINDOWS_ENV_ROOT_PATH" != "x"; then
 255       printf ". Root at $WINDOWS_ENV_ROOT_PATH"
 256     fi
 257     printf "\n"
 258   fi
 259   printf "* Boot JDK:       $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
 260   printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
 261   printf "* C Compiler:     Version $CC_VERSION_NUMBER (at $CC)\n"
 262   printf "* C++ Compiler:   Version $CXX_VERSION_NUMBER (at $CXX)\n"
 263 
 264   printf "\n"
 265   printf "Build performance summary:\n"
 266   printf "* Cores to use:   $JOBS\n"
 267   printf "* Memory limit:   $MEMORY_SIZE MB\n"
 268   if test "x$CCACHE_STATUS" != "x"; then
 269     printf "* ccache status:  $CCACHE_STATUS\n"
 270   fi
 271   printf "\n"
 272 
 273   if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xtrue"; then
 274     printf "NOTE: You have requested to build more than one version of the JVM, which\n"
 275     printf "will result in longer build times.\n"
 276     printf "\n"
 277   fi
 278 
 279   if test "x$FOUND_ALT_VARIABLES" != "x"; then
 280     printf "WARNING: You have old-style ALT_ environment variables set.\n"
 281     printf "These are not respected, and will be ignored. It is recommended\n"
 282     printf "that you clean your environment. The following variables are set:\n"
 283     printf "$FOUND_ALT_VARIABLES\n"
 284     printf "\n"
 285   fi
 286 
 287   if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then
 288     printf "WARNING: Your build output directory is not on a local disk.\n"
 289     printf "This will severely degrade build performance!\n"
 290     printf "It is recommended that you create an output directory on a local disk,\n"
 291     printf "and run the configure script again from that directory.\n"
 292     printf "\n"
 293   fi
 294 
 295   if test "x$IS_RECONFIGURE" = "xyes" && test "x$no_create" != "xyes"; then
 296     printf "WARNING: The result of this configuration has overridden an older\n"
 297     printf "configuration. You *should* run 'make clean' to make sure you get a\n"
 298     printf "proper build. Failure to do so might result in strange build problems.\n"
 299     printf "\n"
 300   fi
 301 
 302   if test "x$IS_RECONFIGURE" != "xyes" && test "x$no_create" = "xyes"; then
 303     printf "WARNING: The result of this configuration was not saved.\n"
 304     printf "You should run without '--no-create | -n' to create the configuration.\n"
 305     printf "\n"
 306   fi
 307 
 308   if test "x$UNSUPPORTED_TOOLCHAIN_VERSION" = "xyes"; then
 309     printf "WARNING: The toolchain version used is known to have issues. Please\n"
 310     printf "consider using a supported version unless you know what you are doing.\n"
 311     printf "\n"
 312   fi
 313 ])
 314 
 315 AC_DEFUN_ONCE([HELP_REPEAT_WARNINGS],
 316 [
 317   # Locate config.log.
 318   if test -e "$CONFIGURESUPPORT_OUTPUTDIR/config.log"; then
 319     CONFIG_LOG_PATH="$CONFIGURESUPPORT_OUTPUTDIR"
 320   elif test -e "./config.log"; then
 321     CONFIG_LOG_PATH="."
 322   fi
 323 
 324   if test -e "$CONFIG_LOG_PATH/config.log"; then
 325     $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" > /dev/null 2>&1
 326     if test $? -eq 0; then
 327       printf "The following warnings were produced. Repeated here for convenience:\n"
 328       # We must quote sed expression (using []) to stop m4 from eating the [].
 329       $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" | $SED -e [ 's/^configure:[0-9]*: //' ]
 330       printf "\n"
 331     fi
 332   fi
 333 ])