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 
  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 CONFIGURE_COMMAND_LINE="$@"
  32 conf_script_dir=`dirname $0`
  33 
  34 if [ "$CUSTOM_CONFIG_DIR" = "" ]; then
  35   conf_custom_script_dir="$conf_script_dir/../../closed/autoconf"
  36 else
  37   conf_custom_script_dir=$CUSTOM_CONFIG_DIR
  38 fi
  39 
  40 ###
  41 ### Test that the generated configure is up-to-date
  42 ###
  43 
  44 run_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 
  56 check_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 
  75 check_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
  95 check_hg_updates
  96 
  97 if 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
 106 fi
 107 
 108 # Autoconf calls the configure script recursively sometimes.
 109 # Don't start logging twice in that case
 110 if test "x$conf_debug_configure" = xtrue; then
 111   conf_debug_configure=recursive
 112 fi
 113 ###
 114 ### Process command-line arguments
 115 ###
 116 conf_processed_arguments=()
 117 conf_openjdk_target=
 118 
 119 for conf_option
 120 do
 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
 153 done
 154 
 155 if 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
 167 fi
 168 
 169 if 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[@]}")
 172 fi
 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.
 177 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
 178 
 179 ###
 180 ### Call the configure script
 181 ###
 182 if 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
 186 else
 187   echo Running generated-configure.sh
 188   conf_script_to_run=$conf_script_dir/generated-configure.sh
 189 fi
 190 
 191 if test "x$conf_debug_configure" != x; then
 192   # Turn on shell debug output if requested (initial or recursive)
 193   set -x
 194 fi
 195 
 196 if 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
 200 else
 201   ( . $conf_script_to_run "${conf_processed_arguments[@]}" )
 202 fi
 203 
 204 conf_result_code=$?
 205 ###
 206 ### Post-processing
 207 ###
 208 
 209 if test $conf_result_code -eq 0; then
 210   if test "x$conf_print_help" = xtrue; then
 211     cat <<EOT
 212 
 213 Additional (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 
 221 Please be aware that, when cross-compiling, the OpenJDK configure script will
 222 generally use 'target' where autoconf traditionally uses 'host'.
 223 
 224 Also note that variables must be passed on the command line. Variables in the
 225 environment will generally be ignored, unlike traditional autoconf scripts.
 226 EOT
 227   fi
 228 else
 229   echo configure exiting with result code $conf_result_code
 230 fi
 231 
 232 exit $conf_result_code