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