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