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