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