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