Wed, 05 Dec 2018 20:04:21 -0800
Added tag jdk8u202-b06 for changeset 10c71c9fba23
1 #!/bin/bash
2 #
3 # Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 #
6 # This code is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License version 2 only, as
8 # published by the Free Software Foundation.
9 #
10 # This code is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 # version 2 for more details (a copy is included in the LICENSE file that
14 # accompanied this code).
15 #
16 # You should have received a copy of the GNU General Public License version
17 # 2 along with this work; if not, write to the Free Software Foundation,
18 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 #
20 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 # or visit www.oracle.com if you need additional information or have any
22 # questions.
23 #
25 if test "x$1" != xCHECKME; then
26 echo "WARNING: Calling the wrapper script directly is deprecated and unsupported."
27 echo "Not all features of configure will be available."
28 echo "Use the 'configure' script in the top-level directory instead."
29 TOPDIR=$(cd $(dirname $0)/../.. > /dev/null && pwd)
30 else
31 # Now the next argument is the absolute top-level directory path.
32 # The TOPDIR variable is passed on to configure.ac.
33 TOPDIR="$2"
34 # Remove these two arguments to get to the user supplied arguments
35 shift
36 shift
37 fi
39 # Force autoconf to use bash. This also means we must disable autoconf re-exec.
40 export CONFIG_SHELL=$BASH
41 export _as_can_reexec=no
43 conf_script_dir="$TOPDIR/common/autoconf"
45 if [ "$CUSTOM_CONFIG_DIR" = "" ]; then
46 conf_custom_script_dir="$TOPDIR/jdk/make/closed/autoconf"
47 else
48 conf_custom_script_dir="$CUSTOM_CONFIG_DIR"
49 fi
51 ###
52 ### Test that the generated configure is up-to-date
53 ###
55 run_autogen_or_fail() {
56 if test "x`which autoconf 2> /dev/null`" = x; then
57 echo "Cannot locate autoconf, unable to correct situation."
58 echo "Please install autoconf and run 'bash autogen.sh' to update the generated files."
59 echo "Error: Cannot continue" 1>&2
60 exit 1
61 else
62 echo "Running autogen.sh to correct the situation"
63 bash $conf_script_dir/autogen.sh
64 fi
65 }
67 check_autoconf_timestamps() {
68 for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do
69 if test $file -nt $conf_script_dir/generated-configure.sh; then
70 echo "Warning: The configure source files is newer than the generated files."
71 run_autogen_or_fail
72 fi
73 done
75 if test -e $conf_custom_script_dir/generated-configure.sh; then
76 # If custom source configure is available, make sure it is up-to-date as well.
77 for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $conf_custom_script_dir/*.m4; do
78 if test $file -nt $conf_custom_script_dir/generated-configure.sh; then
79 echo "Warning: The configure source files is newer than the custom generated files."
80 run_autogen_or_fail
81 fi
82 done
83 fi
84 }
86 check_hg_updates() {
87 if test "x`which hg 2> /dev/null`" != x; then
88 conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf`
89 if test "x$conf_updated_autoconf_files" != x; then
90 echo "Configure source code has been updated, checking time stamps"
91 check_autoconf_timestamps
92 fi
94 if test -e $conf_custom_script_dir; then
95 # If custom source configure is available, make sure it is up-to-date as well.
96 conf_custom_updated_autoconf_files=`cd $conf_custom_script_dir && hg status -mard 2> /dev/null | grep autoconf`
97 if test "x$conf_custom_updated_autoconf_files" != x; then
98 echo "Configure custom source code has been updated, checking time stamps"
99 check_autoconf_timestamps
100 fi
101 fi
102 fi
103 }
105 # Check for local changes
106 check_hg_updates
108 if test -e $conf_custom_script_dir/generated-configure.sh; then
109 # Test if open configure is newer than custom configure, if so, custom needs to
110 # be regenerated. This test is required to ensure consistency with custom source.
111 conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh | cut -d"=" -f 2`
112 conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_custom_script_dir/generated-configure.sh | cut -d"=" -f 2`
113 if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then
114 echo "Warning: The generated configure file contains changes not present in the custom generated file."
115 run_autogen_or_fail
116 fi
117 fi
119 # Autoconf calls the configure script recursively sometimes.
120 # Don't start logging twice in that case
121 if test "x$conf_debug_configure" = xtrue; then
122 conf_debug_configure=recursive
123 fi
125 ###
126 ### Process command-line arguments
127 ###
129 # Returns a shell-escaped version of the argument given.
130 function shell_quote() {
131 if [[ -n "$1" ]]; then
132 # Uses only shell-safe characters? No quoting needed.
133 # '=' is a zsh meta-character, but only in word-initial position.
134 if [[ "$1" =~ ^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.:,%/+=_-]+$ && ! "$1" =~ ^= ]]; then
135 quoted="$1"
136 else
137 if [[ "$1" =~ [\'!] ]]; then
138 # csh does history expansion within single quotes, but not
139 # when backslash-escaped!
140 local quoted_quote="'\\''" quoted_exclam="'\\!'"
141 word="${1//\'/${quoted_quote}}"
142 word="${1//\!/${quoted_exclam}}"
143 fi
144 quoted="'$1'"
145 fi
146 echo "$quoted"
147 fi
148 }
150 conf_processed_arguments=()
151 conf_quoted_arguments=()
152 conf_openjdk_target=
154 for conf_option
155 do
157 # Process (and remove) our own extensions that will not be passed to autoconf
158 case $conf_option in
159 --openjdk-target=*)
160 conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'`
161 ;;
162 --debug-configure)
163 if test "x$conf_debug_configure" != xrecursive; then
164 conf_debug_configure=true
165 export conf_debug_configure
166 fi
167 ;;
168 *)
169 conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option")
170 ;;
171 esac
173 # Store all variables overridden on the command line
174 case $conf_option in
175 [^-]*=*)
176 # Add name of variable to CONFIGURE_OVERRIDDEN_VARIABLES list inside !...!.
177 conf_env_var=`expr "x$conf_option" : 'x\([^=]*\)='`
178 CONFIGURE_OVERRIDDEN_VARIABLES="$CONFIGURE_OVERRIDDEN_VARIABLES!$conf_env_var!"
179 ;;
180 esac
182 # Save the arguments, intelligently quoted for CONFIGURE_COMMAND_LINE.
183 case $conf_option in
184 *=*)
185 conf_option_name=`expr "x$conf_option" : 'x\([^=]*\)='`
186 conf_option_name=$(shell_quote "$conf_option_name")
187 conf_option_value=`expr "x$conf_option" : 'x[^=]*=\(.*\)'`
188 conf_option_value=$(shell_quote "$conf_option_value")
189 conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$conf_option_name=$conf_option_value")
190 ;;
191 *)
192 conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$(shell_quote "$conf_option")")
193 ;;
194 esac
196 # Check for certain autoconf options that require extra action
197 case $conf_option in
198 -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*)
199 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
200 -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
201 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
202 -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*)
203 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
204 -help | --help | --hel | --he | -h)
205 conf_print_help=true ;;
206 esac
207 done
209 # Save the quoted command line
210 CONFIGURE_COMMAND_LINE="${conf_quoted_arguments[@]}"
212 if test "x$conf_legacy_crosscompile" != "x"; then
213 if test "x$conf_openjdk_target" != "x"; then
214 echo "Error: Specifying --openjdk-target together with autoconf"
215 echo "legacy cross-compilation flags is not supported."
216 echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile."
217 echo "The recommended use is just --openjdk-target."
218 exit 1
219 else
220 echo "Warning: You are using legacy autoconf cross-compilation flags."
221 echo "It is recommended that you use --openjdk-target instead."
222 echo ""
223 fi
224 fi
226 if test "x$conf_openjdk_target" != "x"; then
227 conf_build_platform=`sh $conf_script_dir/build-aux/config.guess`
228 conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}")
229 fi
231 # Make configure exit with error on invalid options as default.
232 # Can be overridden by --disable-option-checking, since we prepend our argument
233 # and later options override earlier.
234 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
236 ###
237 ### Call the configure script
238 ###
239 if test -e $conf_custom_script_dir/generated-configure.sh; then
240 # Custom source configure available; run that instead
241 echo "Running custom generated-configure.sh"
242 conf_script_to_run=$conf_custom_script_dir/generated-configure.sh
243 else
244 echo "Running generated-configure.sh"
245 conf_script_to_run=$conf_script_dir/generated-configure.sh
246 fi
248 if test "x$conf_debug_configure" != x; then
249 # Turn on shell debug output if requested (initial or recursive)
250 set -x
251 fi
253 if test "x$conf_debug_configure" = xtrue; then
254 # Turn on logging, but don't turn on twice when called recursive
255 conf_debug_logfile=./debug-configure.log
256 (exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile
257 else
258 ( . $conf_script_to_run "${conf_processed_arguments[@]}" )
259 fi
261 conf_result_code=$?
262 ###
263 ### Post-processing
264 ###
266 if test $conf_result_code -eq 0; then
267 if test "x$conf_print_help" = xtrue; then
268 cat <<EOT
270 Additional (non-autoconf) OpenJDK Options:
271 --openjdk-target=TARGET cross-compile with TARGET as target platform
272 (i.e. the one you will run the resulting binary on).
273 Equivalent to --host=TARGET --target=TARGET
274 --build=<current platform>
275 --debug-configure Run the configure script with additional debug
276 logging enabled.
278 EOT
280 # Print list of toolchains. This must be done by the autoconf script.
281 ( CONFIGURE_PRINT_TOOLCHAIN_LIST=true . $conf_script_to_run PRINTF=printf )
283 cat <<EOT
285 Please be aware that, when cross-compiling, the OpenJDK configure script will
286 generally use 'target' where autoconf traditionally uses 'host'.
288 Also note that variables must be passed on the command line. Variables in the
289 environment will generally be ignored, unlike traditional autoconf scripts.
290 EOT
291 fi
292 else
293 echo configure exiting with result code $conf_result_code
294 fi
296 exit $conf_result_code