configure revision 970:26ce5b43f3de
1#!/bin/bash
2#
3# Copyright (c) 2012, 2014, 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#
24
25if test "x$BASH_VERSION" = x; then
26  echo This script needs bash to run.
27  echo It is recommended to use the configure script in the source tree root instead.
28  exit 1
29fi
30
31conf_script_dir=`dirname $0`
32
33if [ "$CUSTOM_CONFIG_DIR" = "" ]; then
34  conf_custom_script_dir="$conf_script_dir/../../closed/autoconf"
35else
36  conf_custom_script_dir=$CUSTOM_CONFIG_DIR
37fi
38
39###
40### Test that the generated configure is up-to-date
41###
42
43run_autogen_or_fail() {
44  if test "x`which autoconf 2> /dev/null`" = x; then
45    echo "Cannot locate autoconf, unable to correct situation."
46    echo "Please install autoconf and run 'bash autogen.sh' to update the generated files."
47    echo "Error: Cannot continue" 1>&2
48    exit 1
49  else
50    echo "Running autogen.sh to correct the situation"
51    bash $conf_script_dir/autogen.sh
52  fi
53}
54
55check_autoconf_timestamps() {
56  for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do
57    if test $file -nt $conf_script_dir/generated-configure.sh; then
58      echo "Warning: The configure source files is newer than the generated files."
59      run_autogen_or_fail
60    fi
61  done
62
63  if test -e $conf_custom_script_dir/generated-configure.sh; then
64    # If custom source configure is available, make sure it is up-to-date as well.
65    for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $conf_custom_script_dir/*.m4; do
66      if test $file -nt $conf_custom_script_dir/generated-configure.sh; then
67        echo "Warning: The configure source files is newer than the custom generated files."
68        run_autogen_or_fail
69      fi
70    done
71  fi
72}
73
74check_hg_updates() {
75  if test "x`which hg 2> /dev/null`" != x; then
76    conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf`
77    if test "x$conf_updated_autoconf_files" != x; then
78      echo "Configure source code has been updated, checking time stamps"
79      check_autoconf_timestamps
80    fi
81
82    if test -e $conf_custom_script_dir; then
83      # If custom source configure is available, make sure it is up-to-date as well.
84      conf_custom_updated_autoconf_files=`cd $conf_custom_script_dir && hg status -mard 2> /dev/null | grep autoconf`
85      if test "x$conf_custom_updated_autoconf_files" != x; then
86        echo "Configure custom source code has been updated, checking time stamps"
87        check_autoconf_timestamps
88      fi
89    fi
90  fi
91}
92
93# Check for local changes
94check_hg_updates
95
96if test -e $conf_custom_script_dir/generated-configure.sh; then
97  # Test if open configure is newer than custom configure, if so, custom needs to
98  # be regenerated. This test is required to ensure consistency with custom source.
99  conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh  | cut -d"=" -f 2`
100  conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_custom_script_dir/generated-configure.sh  | cut -d"=" -f 2`
101  if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then
102    echo "Warning: The generated configure file contains changes not present in the custom generated file."
103    run_autogen_or_fail
104  fi
105fi
106
107# Autoconf calls the configure script recursively sometimes.
108# Don't start logging twice in that case
109if test "x$conf_debug_configure" = xtrue; then
110  conf_debug_configure=recursive
111fi
112
113###
114### Process command-line arguments
115###
116
117# Returns a shell-escaped version of the argument given.
118function shell_quote() {
119  if [[ -n "$1" ]]; then
120    # Uses only shell-safe characters?  No quoting needed.
121    # '=' is a zsh meta-character, but only in word-initial position.
122    if [[ "$1" =~ ^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.:,%/+=_-]+$ && ! "$1" =~ ^= ]]; then
123      quoted="$1"
124    else
125      if [[ "$1" =~ [\'!] ]]; then
126        # csh does history expansion within single quotes, but not
127        # when backslash-escaped!
128        local quoted_quote="'\\''" quoted_exclam="'\\!'"
129        word="${1//\'/${quoted_quote}}"
130        word="${1//\!/${quoted_exclam}}"
131      fi
132      quoted="'$1'"
133    fi
134    echo "$quoted"
135  fi
136}
137
138conf_processed_arguments=()
139conf_quoted_arguments=()
140conf_openjdk_target=
141
142for conf_option
143do
144
145  # Process (and remove) our own extensions that will not be passed to autoconf
146  case $conf_option in
147    --openjdk-target=*)
148      conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'`
149      ;;
150    --debug-configure)
151      if test "x$conf_debug_configure" != xrecursive; then
152        conf_debug_configure=true
153        export conf_debug_configure
154      fi
155      ;;
156    *)
157      conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option")
158      ;;
159  esac
160
161  # Store all variables overridden on the command line
162  case $conf_option in
163    [^-]*=*)
164      # Add name of variable to CONFIGURE_OVERRIDDEN_VARIABLES list inside !...!.
165      conf_env_var=`expr "x$conf_option" : 'x\([^=]*\)='`
166      CONFIGURE_OVERRIDDEN_VARIABLES="$CONFIGURE_OVERRIDDEN_VARIABLES!$conf_env_var!"
167      ;;
168  esac
169
170  # Save the arguments, intelligently quoted for CONFIGURE_COMMAND_LINE.
171  case $conf_option in
172    *=*)
173      conf_option_name=`expr "x$conf_option" : 'x\([^=]*\)='`
174      conf_option_name=$(shell_quote "$conf_option_name")
175      conf_option_value=`expr "x$conf_option" : 'x[^=]*=\(.*\)'`
176      conf_option_value=$(shell_quote "$conf_option_value")
177      conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$conf_option_name=$conf_option_value")
178      ;;
179    *)
180      conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$(shell_quote "$conf_option")")
181      ;;
182  esac
183
184  # Check for certain autoconf options that require extra action
185  case $conf_option in
186    -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*)
187      conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
188    -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
189      conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
190    -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*)
191      conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
192    -help | --help | --hel | --he | -h)
193      conf_print_help=true ;;
194  esac
195done
196
197# Save the quoted command line
198CONFIGURE_COMMAND_LINE="${conf_quoted_arguments[@]}"
199
200if test "x$conf_legacy_crosscompile" != "x"; then
201  if test "x$conf_openjdk_target" != "x"; then
202    echo "Error: Specifying --openjdk-target together with autoconf"
203    echo "legacy cross-compilation flags is not supported."
204    echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile."
205    echo "The recommended use is just --openjdk-target."
206    exit 1
207  else
208    echo "Warning: You are using legacy autoconf cross-compilation flags."
209    echo "It is recommended that you use --openjdk-target instead."
210    echo ""
211  fi
212fi
213
214if test "x$conf_openjdk_target" != "x"; then
215  conf_build_platform=`sh $conf_script_dir/build-aux/config.guess`
216  conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}")
217fi
218
219# Make configure exit with error on invalid options as default.
220# Can be overridden by --disable-option-checking, since we prepend our argument
221# and later options override earlier.
222conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
223
224###
225### Call the configure script
226###
227if test -e $conf_custom_script_dir/generated-configure.sh; then
228  # Custom source configure available; run that instead
229  echo Running custom generated-configure.sh
230  conf_script_to_run=$conf_custom_script_dir/generated-configure.sh
231else
232  echo Running generated-configure.sh
233  conf_script_to_run=$conf_script_dir/generated-configure.sh
234fi
235
236if test "x$conf_debug_configure" != x; then
237  # Turn on shell debug output if requested (initial or recursive)
238  set -x
239fi
240
241if test "x$conf_debug_configure" = xtrue; then
242  # Turn on logging, but don't turn on twice when called recursive
243  conf_debug_logfile=./debug-configure.log
244  (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
245else
246  ( . $conf_script_to_run "${conf_processed_arguments[@]}" )
247fi
248
249conf_result_code=$?
250###
251### Post-processing
252###
253
254if test $conf_result_code -eq 0; then
255  if test "x$conf_print_help" = xtrue; then
256    cat <<EOT
257
258Additional (non-autoconf) OpenJDK Options:
259  --openjdk-target=TARGET cross-compile with TARGET as target platform
260                          (i.e. the one you will run the resulting binary on).
261                          Equivalent to --host=TARGET --target=TARGET
262                          --build=<current platform>
263  --debug-configure       Run the configure script with additional debug
264                          logging enabled.
265
266Please be aware that, when cross-compiling, the OpenJDK configure script will
267generally use 'target' where autoconf traditionally uses 'host'.
268
269Also note that variables must be passed on the command line. Variables in the
270environment will generally be ignored, unlike traditional autoconf scripts.
271EOT
272  fi
273else
274  echo configure exiting with result code $conf_result_code
275fi
276
277exit $conf_result_code
278