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