1 #!/bin/bash
2 #
3 # Copyright (c) 2012, 2017, 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 #
26 echo "ERROR: Calling this wrapper script directly is not supported."
27 echo "Use the 'configure' script in the top-level directory instead."
28 exit 1
29 fi
30
31 # 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
38 if test "x$BASH" = x; then
39 echo "Error: This script must be run using bash." 1>&2
40 exit 1
41 fi
42 # Force autoconf to use bash. This also means we must disable autoconf re-exec.
43 export CONFIG_SHELL=$BASH
44 export _as_can_reexec=no
45
46 conf_script_dir="$TOPDIR/make/autoconf"
47
48 if test "x$CUSTOM_CONFIG_DIR" != x; then
49 if test ! -e $CUSTOM_CONFIG_DIR/generated-configure.sh; then
50 echo "CUSTOM_CONFIG_DIR not pointing to a proper custom config dir."
51 echo "Error: Cannot continue" 1>&2
52 exit 1
53 fi
54 fi
55
56 ###
57 ### Test that the generated configure is up-to-date
58 ###
59
60 run_autogen_or_fail() {
61 if test "x`which autoconf 2> /dev/null | grep -v '^no autoconf in'`" = x; then
62 echo "Cannot locate autoconf, unable to correct situation."
63 echo "Please install autoconf and run 'bash autogen.sh' to update the generated files."
64 echo "Error: Cannot continue" 1>&2
65 exit 1
66 else
67 echo "Running autogen.sh to correct the situation"
68 bash $conf_script_dir/autogen.sh
69 fi
70 }
71
72 check_autoconf_timestamps() {
73 for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do
74 if test $file -nt $conf_script_dir/generated-configure.sh; then
75 echo "Warning: The configure source files is newer than the generated files."
76 run_autogen_or_fail
77 fi
78 done
79
80 if test "x$CUSTOM_CONFIG_DIR" != x; then
81 # If custom source configure is available, make sure it is up-to-date as well.
82 for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $CUSTOM_CONFIG_DIR/*.m4; do
83 if test $file -nt $CUSTOM_CONFIG_DIR/generated-configure.sh; then
84 echo "Warning: The configure source files is newer than the custom generated files."
85 run_autogen_or_fail
86 fi
87 done
88 fi
89 }
90
91 check_hg_updates() {
92 if test "x`which hg 2> /dev/null | grep -v '^no hg in'`" != x; then
93 conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard . 2> /dev/null`
94 if test "x$conf_updated_autoconf_files" != x; then
95 echo "Configure source code has been updated, checking time stamps"
96 check_autoconf_timestamps
97 elif test "x$CUSTOM_CONFIG_DIR" != x; then
98 # If custom source configure is available, make sure it is up-to-date as well.
99 conf_custom_updated_autoconf_files=`cd $CUSTOM_CONFIG_DIR && hg status -mard . 2> /dev/null`
100 if test "x$conf_custom_updated_autoconf_files" != x; then
101 echo "Configure custom source code has been updated, checking time stamps"
102 check_autoconf_timestamps
103 fi
104 fi
105 fi
106 }
107
108 # Check for local changes
109 check_hg_updates
110
111 if test "x$CUSTOM_CONFIG_DIR" != x; then
112 # Test if open configure is newer than custom configure, if so, custom needs to
113 # be regenerated. This test is required to ensure consistency with custom source.
114 conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh | cut -d"=" -f 2`
115 conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $CUSTOM_CONFIG_DIR/generated-configure.sh | cut -d"=" -f 2`
116 if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then
117 echo "Warning: The generated configure file contains changes not present in the custom generated file."
118 run_autogen_or_fail
119 fi
120 fi
121
122 # Autoconf calls the configure script recursively sometimes.
123 # Don't start logging twice in that case
124 if test "x$conf_debug_configure" = xtrue; then
125 conf_debug_configure=recursive
126 fi
127
128 ###
129 ### Process command-line arguments
130 ###
131
132 # Returns a shell-escaped version of the argument given.
133 function shell_quote() {
134 if [[ -n "$1" ]]; then
135 # Uses only shell-safe characters? No quoting needed.
136 # '=' is a zsh meta-character, but only in word-initial position.
137 if echo "$1" | grep '^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\.:,%/+=_-]\{1,\}$' > /dev/null \
138 && ! echo "$1" | grep '^=' > /dev/null; then
139 quoted="$1"
140 else
141 if echo "$1" | grep "[\'!]" > /dev/null; then
223 else
224 echo "Warning: You are using legacy autoconf cross-compilation flags."
225 echo "It is recommended that you use --openjdk-target instead."
226 echo ""
227 fi
228 fi
229
230 if test "x$conf_openjdk_target" != "x"; then
231 conf_build_platform=`sh $conf_script_dir/build-aux/config.guess`
232 conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}")
233 fi
234
235 # Make configure exit with error on invalid options as default.
236 # Can be overridden by --disable-option-checking, since we prepend our argument
237 # and later options override earlier.
238 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
239
240 ###
241 ### Call the configure script
242 ###
243 if test "x$CUSTOM_CONFIG_DIR" != x; then
244 # Custom source configure available; run that instead
245 echo "Running custom generated-configure.sh"
246 conf_script_to_run=$CUSTOM_CONFIG_DIR/generated-configure.sh
247 else
248 echo "Running generated-configure.sh"
249 conf_script_to_run=$conf_script_dir/generated-configure.sh
250 fi
251
252 if test "x$conf_debug_configure" != x; then
253 # Turn on shell debug output if requested (initial or recursive)
254 set -x
255 fi
256
257 # Now transfer control to the script generated by autoconf. This is where the
258 # main work is done.
259 RCDIR=`mktemp -dt jdk-build-configure.tmp.XXXXXX` || exit $?
260 trap "rm -rf \"$RCDIR\"" EXIT
261 conf_logfile=./configure.log
262 (exec 3>&1 ; ((. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) \
263 ; echo $? > "$RCDIR/rc" ) \
264 | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile
265
266 conf_result_code=`cat "$RCDIR/rc"`
267 ###
268 ### Post-processing
269 ###
270
271 if test $conf_result_code -eq 0; then
272 if test "x$conf_print_help" = xtrue; then
273 cat <<EOT
274
275 Additional (non-autoconf) OpenJDK Options:
276 --openjdk-target=TARGET cross-compile with TARGET as target platform
277 (i.e. the one you will run the resulting binary on).
278 Equivalent to --host=TARGET --target=TARGET
279 --build=<current platform>
280 --debug-configure Run the configure script with additional debug
281 logging enabled.
282
283 EOT
284
285 # Print additional help, e.g. a list of toolchains and JVM features.
286 # This must be done by the autoconf script.
287 ( CONFIGURE_PRINT_ADDITIONAL_HELP=true . $conf_script_to_run PRINTF=printf )
288
289 cat <<EOT
290
291 Please be aware that, when cross-compiling, the OpenJDK configure script will
292 generally use 'target' where autoconf traditionally uses 'host'.
293
294 Also note that variables must be passed on the command line. Variables in the
295 environment will generally be ignored, unlike traditional autoconf scripts.
296 EOT
297 fi
298 else
299 echo configure exiting with result code $conf_result_code
300 fi
301
302 exit $conf_result_code
|
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 #
26 echo "ERROR: Calling this wrapper script directly is not supported."
27 echo "Use the 'configure' script in the top-level directory instead."
28 exit 1
29 fi
30
31 # 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
38 if test "x$BASH" = x; then
39 echo "Error: This script must be run using bash." 1>&2
40 exit 1
41 fi
42 # Force autoconf to use bash. This also means we must disable autoconf re-exec.
43 export CONFIG_SHELL=$BASH
44 export _as_can_reexec=no
45
46 if test "x$CUSTOM_CONFIG_DIR" != x; then
47 custom_hook=$CUSTOM_CONFIG_DIR/custom-hook.m4
48 if test ! -e $custom_hook; then
49 echo "CUSTOM_CONFIG_DIR not pointing to a proper custom config dir."
50 echo "Error: Cannot continue" 1>&2
51 exit 1
52 fi
53 build_support_dir="$CUSTOM_ROOT/.build"
54 else
55 build_support_dir="$TOPDIR/.build"
56 fi
57
58 conf_script_dir="$TOPDIR/make/autoconf"
59 generated_script="$build_support_dir/generated-configure.sh"
60
61 ###
62 ### Use autoconf to create a runnable configure script, if needed
63 ###
64
65 autoconf_missing_help() {
66 APT_GET="`which apt-get 2> /dev/null | grep -v '^no apt-get in'`"
67 YUM="`which yum 2> /dev/null | grep -v '^no yum in'`"
68 BREW="`which brew 2> /dev/null | grep -v '^no brew in'`"
69 CYGWIN="`which cygpath 2> /dev/null | grep -v '^no cygpath in'`"
70
71 if test "x$APT_GET" != x; then
72 PKGHANDLER_COMMAND="sudo apt-get install autoconf"
73 elif test "x$YUM" != x; then
74 PKGHANDLER_COMMAND="sudo yum install autoconf"
75 elif test "x$BREW" != x; then
76 PKGHANDLER_COMMAND="brew install autoconf"
77 elif test "x$CYGWIN" != x; then
78 PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P autoconf )"
79 fi
80
81 if test "x$PKGHANDLER_COMMAND" != x; then
82 echo "You might be able to fix this by running '$PKGHANDLER_COMMAND'."
83 fi
84 }
85
86 generate_configure_script() {
87 if test "x$AUTOCONF" != x; then
88 if test ! -x "$AUTOCONF"; then
89 echo
90 echo "The specified AUTOCONF variable does not point to a valid autoconf executable:"
91 echo "AUTOCONF=$AUTOCONF"
92 echo "Error: Cannot continue" 1>&2
93 exit 1
94 fi
95 else
96 AUTOCONF="`which autoconf 2> /dev/null | grep -v '^no autoconf in'`"
97 if test "x$AUTOCONF" = x; then
98 echo
99 echo "Autoconf is not found on the PATH, and AUTOCONF is not set."
100 echo "You need autoconf to be able to generate a runnable configure script."
101 autoconf_missing_help
102 echo "Error: Cannot find autoconf" 1>&2
103 exit 1
104 fi
105 fi
106
107 autoconf_version=`$AUTOCONF --version | head -1`
108 echo "Using autoconf at ${AUTOCONF} [$autoconf_version]"
109
110 if test "x$CUSTOM_CONFIG_DIR" != x; then
111 # Generate configure script with custom hooks compiled in.
112 custom_patcher='sed -e "s|#CUSTOM_AUTOCONF_INCLUDE|m4_include([$custom_hook])|"'
113 else
114 custom_patcher='cat'
115 fi
116
117 mkdir -p `dirname $generated_script`
118 # Call autoconf but replace the "magic" variable in configure.ac if requested.
119 cat $conf_script_dir/configure.ac | eval $custom_patcher | \
120 ${AUTOCONF} -W all -I$conf_script_dir - > $generated_script
121 rm -rf autom4te.cache
122
123 # Sanity check
124 if test ! -s $generated_script; then
125 echo "Error: Failed to generate runnable configure script" 1>&2
126 rm -f $generated_script
127 exit 1
128 fi
129 }
130
131 test_generated_up_to_date() {
132 if test "x`which hg 2> /dev/null | grep -v '^no hg in'`" != x; then
133 conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard . 2> /dev/null`
134 conf_source_files="$conf_script_dir/configure.ac $conf_script_dir/*.m4"
135 if test "x$CUSTOM_CONFIG_DIR" != x; then
136 conf_custom_updated_autoconf_files=`cd $CUSTOM_CONFIG_DIR && hg status -mard . 2> /dev/null`
137 conf_custom_source_files="$CUSTOM_CONFIG_DIR/*.m4"
138 else
139 conf_custom_updated_autoconf_files=""
140 conf_custom_source_files=""
141 fi
142
143 if test "x${conf_updated_autoconf_files}${conf_custom_updated_autoconf_files}" != x; then
144 for file in $conf_source_files $conf_custom_source_files ; do
145 if test $file -nt $generated_script; then
146 return 0
147 fi
148 done
149 fi
150 fi
151 return 1
152 }
153
154 run_autoconf=false
155 if test "x$1" = xautogen; then
156 # User called us as "configure autogen", so force regeneration
157 run_autoconf=true
158 shift
159 fi
160
161 if test ! -s $generated_script; then
162 # Generated script is missing, so we need to create it
163 echo "Runnable configure script is not present"
164 run_autoconf=true
165 else
166 # File is present, but is it up to date?
167 if test_generated_up_to_date; then
168 echo "Runnable configure script is not up to date"
169 run_autoconf=true
170 fi
171 fi
172
173 if test "x$run_autoconf" = xtrue; then
174 echo "Generating runnable configure script"
175 generate_configure_script
176 fi
177
178 # Autoconf calls the configure script recursively sometimes.
179 # Don't start logging twice in that case
180 if test "x$conf_debug_configure" = xtrue; then
181 conf_debug_configure=recursive
182 fi
183
184 ###
185 ### Process command-line arguments
186 ###
187
188 # Returns a shell-escaped version of the argument given.
189 function shell_quote() {
190 if [[ -n "$1" ]]; then
191 # Uses only shell-safe characters? No quoting needed.
192 # '=' is a zsh meta-character, but only in word-initial position.
193 if echo "$1" | grep '^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\.:,%/+=_-]\{1,\}$' > /dev/null \
194 && ! echo "$1" | grep '^=' > /dev/null; then
195 quoted="$1"
196 else
197 if echo "$1" | grep "[\'!]" > /dev/null; then
279 else
280 echo "Warning: You are using legacy autoconf cross-compilation flags."
281 echo "It is recommended that you use --openjdk-target instead."
282 echo ""
283 fi
284 fi
285
286 if test "x$conf_openjdk_target" != "x"; then
287 conf_build_platform=`sh $conf_script_dir/build-aux/config.guess`
288 conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}")
289 fi
290
291 # Make configure exit with error on invalid options as default.
292 # Can be overridden by --disable-option-checking, since we prepend our argument
293 # and later options override earlier.
294 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
295
296 ###
297 ### Call the configure script
298 ###
299 if test "x$conf_debug_configure" != x; then
300 # Turn on shell debug output if requested (initial or recursive)
301 set -x
302 fi
303
304 # Now transfer control to the script generated by autoconf. This is where the
305 # main work is done.
306 RCDIR=`mktemp -dt jdk-build-configure.tmp.XXXXXX` || exit $?
307 trap "rm -rf \"$RCDIR\"" EXIT
308 conf_logfile=./configure.log
309 (exec 3>&1 ; ((. $generated_script "${conf_processed_arguments[@]}" 2>&1 1>&3 ) \
310 ; echo $? > "$RCDIR/rc" ) \
311 | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile
312
313 conf_result_code=`cat "$RCDIR/rc"`
314 ###
315 ### Post-processing
316 ###
317
318 if test $conf_result_code -eq 0; then
319 if test "x$conf_print_help" = xtrue; then
320 cat <<EOT
321
322 Additional (non-autoconf) OpenJDK Options:
323 --openjdk-target=TARGET cross-compile with TARGET as target platform
324 (i.e. the one you will run the resulting binary on).
325 Equivalent to --host=TARGET --target=TARGET
326 --build=<current platform>
327 --debug-configure Run the configure script with additional debug
328 logging enabled.
329
330 EOT
331
332 # Print additional help, e.g. a list of toolchains and JVM features.
333 # This must be done by the autoconf script.
334 ( CONFIGURE_PRINT_ADDITIONAL_HELP=true . $generated_script PRINTF=printf )
335
336 cat <<EOT
337
338 Please be aware that, when cross-compiling, the OpenJDK configure script will
339 generally use 'target' where autoconf traditionally uses 'host'.
340
341 Also note that variables must be passed on the command line. Variables in the
342 environment will generally be ignored, unlike traditional autoconf scripts.
343 EOT
344 fi
345 else
346 echo configure exiting with result code $conf_result_code
347 fi
348
349 exit $conf_result_code
|