configure 8.1 KB
Newer Older
O
ohair 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#!/bin/bash
#
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

if test "x$BASH_VERSION" = x; then
  echo This script needs bash to run.
  echo It is recommended to use the configure script in the source tree root instead.
  exit 1
fi
30

31 32
CONFIGURE_COMMAND_LINE="$@"
conf_script_dir=`dirname $0`
33 34 35 36 37 38

if [ "$CUSTOM_CONFIG_DIR" = "" ]; then
  conf_custom_script_dir="$conf_script_dir/../../jdk/make/closed/autoconf"
else
  conf_custom_script_dir=$CUSTOM_CONFIG_DIR
fi
39

40 41 42
###
### Test that the generated configure is up-to-date
###
43

O
ohair 已提交
44 45 46 47 48
run_autogen_or_fail() {
  if test "x`which autoconf 2> /dev/null`" = x; then
    echo "Cannot locate autoconf, unable to correct situation."
    echo "Please install autoconf and run 'bash autogen.sh' to update the generated files."
    echo "Error: Cannot continue" 1>&2
49
    exit 1
O
ohair 已提交
50 51 52
  else
    echo "Running autogen.sh to correct the situation"
    bash $conf_script_dir/autogen.sh
53
  fi
O
ohair 已提交
54
}
55

O
ohair 已提交
56 57 58 59 60
check_autoconf_timestamps() {
  for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do
    if test $file -nt $conf_script_dir/generated-configure.sh; then
      echo "Warning: The configure source files is newer than the generated files."
      run_autogen_or_fail
61
    fi
62 63
  done

O
ohair 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
  if test -e $conf_custom_script_dir/generated-configure.sh; then
    # If custom source configure is available, make sure it is up-to-date as well.
    for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $conf_custom_script_dir/*.m4; do
      if test $file -nt $conf_custom_script_dir/generated-configure.sh; then
        echo "Warning: The configure source files is newer than the custom generated files."
        run_autogen_or_fail
      fi
    done
  fi
}

check_hg_updates() {
  if test "x`which hg 2> /dev/null`" != x; then
    conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf`
    if test "x$conf_updated_autoconf_files" != x; then
      echo "Configure source code has been updated, checking time stamps"
      check_autoconf_timestamps
    fi

    if test -e $conf_custom_script_dir; then
      # If custom source configure is available, make sure it is up-to-date as well.
      conf_custom_updated_autoconf_files=`cd $conf_custom_script_dir && hg status -mard 2> /dev/null | grep autoconf`
      if test "x$conf_custom_updated_autoconf_files" != x; then
        echo "Configure custom source code has been updated, checking time stamps"
        check_autoconf_timestamps
      fi
    fi
    
  fi
}

# Check for local changes
check_hg_updates

if test -e $conf_custom_script_dir/generated-configure.sh; then
99 100
  # Test if open configure is newer than custom configure, if so, custom needs to
  # be regenerated. This test is required to ensure consistency with custom source.
O
ohair 已提交
101 102 103 104 105
  conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh  | cut -d"=" -f 2`
  conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_custom_script_dir/generated-configure.sh  | cut -d"=" -f 2`
  if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then
    echo "Warning: The generated configure file contains changes not present in the custom generated file."
    run_autogen_or_fail
106 107 108
  fi
fi

109 110
# Autoconf calls the configure script recursively sometimes. 
# Don't start logging twice in that case
O
ohair 已提交
111
if test "x$conf_debug_configure" = xtrue; then
112 113
  conf_debug_configure=recursive
fi
114 115 116
###
### Process command-line arguments
###
O
ohair 已提交
117
conf_processed_arguments=()
118
conf_openjdk_target=
119

120
for conf_option
121
do
122 123 124 125
  case $conf_option in
  --openjdk-target=*)
    conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'`
    continue ;;
126
  --debug-configure)
O
ohair 已提交
127
    if test "x$conf_debug_configure" != xrecursive; then
128 129 130 131
      conf_debug_configure=true
      export conf_debug_configure
    fi
    continue ;;
132
  *)
O
ohair 已提交
133
    conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") ;;
134 135
  esac

136 137 138 139 140 141 142
  case $conf_option in
  -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*)
    conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
  -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
    conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
  -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*)
    conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
O
ohair 已提交
143 144
  -help | --help | --hel | --he | -h)
    conf_print_help=true ;;
145 146 147
  esac
done

O
ohair 已提交
148 149
if test "x$conf_legacy_crosscompile" != "x"; then
  if test "x$conf_openjdk_target" != "x"; then
150 151 152 153 154
    echo "Error: Specifying --openjdk-target together with autoconf"
    echo "legacy cross-compilation flags is not supported."
    echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile."
    echo "The recommended use is just --openjdk-target."
    exit 1
155
  else
156 157 158
    echo "Warning: You are using legacy autoconf cross-compilation flags."
    echo "It is recommended that you use --openjdk-target instead."
    echo ""
159 160 161
  fi
fi

O
ohair 已提交
162
if test "x$conf_openjdk_target" != "x"; then
163
  conf_build_platform=`sh $conf_script_dir/build-aux/config.guess`
O
ohair 已提交
164
  conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}")
165 166
fi

167 168 169
# Make configure exit with error on invalid options as default.
# Can be overridden by --disable-option-checking, since we prepend our argument
# and later options override earlier.
O
ohair 已提交
170
conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
171

172 173 174
###
### Call the configure script
###
O
ohair 已提交
175
if test -e $conf_custom_script_dir/generated-configure.sh; then
176 177 178 179 180 181 182 183
  # Custom source configure available; run that instead
  echo Running custom generated-configure.sh
  conf_script_to_run=$conf_custom_script_dir/generated-configure.sh
else
  echo Running generated-configure.sh
  conf_script_to_run=$conf_script_dir/generated-configure.sh
fi  

O
ohair 已提交
184
if test "x$conf_debug_configure" != x; then
185 186 187 188
  # Turn on shell debug output if requested (initial or recursive)
  set -x
fi

O
ohair 已提交
189
if test "x$conf_debug_configure" = xtrue; then
190 191
  # Turn on logging, but don't turn on twice when called recursive
  conf_debug_logfile=./debug-configure.log
O
ohair 已提交
192
  (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
193
else
O
ohair 已提交
194
  ( . $conf_script_to_run "${conf_processed_arguments[@]}" )
195 196
fi

197
conf_result_code=$?
198 199 200
###
### Post-processing
###
201

O
ohair 已提交
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
if test $conf_result_code -eq 0; then
  if test "x$conf_print_help" = xtrue; then
    cat <<EOT

Additional (non-autoconf) OpenJDK Options:
  --openjdk-target=TARGET cross-compile with TARGET as target platform
                          (i.e. the one you will run the resulting binary on).
                          Equivalent to --host=TARGET --target=TARGET
                          --build=<current platform>
  --debug-configure       Run the configure script with additional debug
                          logging enabled.

Please be aware that, when cross-compiling, the OpenJDK configure script will
generally use 'target' where autoconf traditionally uses 'host'.
EOT
  fi
else
  echo configure exiting with result code $conf_result_code
fi

222
exit $conf_result_code