configure revision 979:e7872d8abd12
1146773Ssam#!/bin/bash 2146773Ssam# 3146773Ssam# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. 4146773Ssam# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5146773Ssam# 6146773Ssam# This code is free software; you can redistribute it and/or modify it 7146773Ssam# under the terms of the GNU General Public License version 2 only, as 8146773Ssam# published by the Free Software Foundation. 9146773Ssam# 10146773Ssam# This code is distributed in the hope that it will be useful, but WITHOUT 11146773Ssam# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12146773Ssam# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13146773Ssam# version 2 for more details (a copy is included in the LICENSE file that 14146773Ssam# accompanied this code). 15146773Ssam# 16146773Ssam# You should have received a copy of the GNU General Public License version 17146773Ssam# 2 along with this work; if not, write to the Free Software Foundation, 18190207Srpaulo# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19146773Ssam# 20146773Ssam# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21146773Ssam# or visit www.oracle.com if you need additional information or have any 22146773Ssam# questions. 23146773Ssam# 24146773Ssam 25146773Ssamif test "x$1" != xCHECKME; then 26146773Ssam echo "WARNING: Calling the wrapper script directly is deprecated and unsupported." 27146773Ssam echo "Not all features of configure will be available." 28146773Ssam echo "Use the 'configure' script in the top-level directory instead." 29214478Srpaulo TOPDIR=$(cd $(dirname $0)/../.. > /dev/null && pwd) 30146773Ssamelse 31146773Ssam # Now the next argument is the absolute top-level directory path. 32146773Ssam # The TOPDIR variable is passed on to configure.ac. 33146773Ssam TOPDIR="$2" 34146773Ssam # Remove these two arguments to get to the user supplied arguments 35146773Ssam shift 36146773Ssam shift 37146773Ssamfi 38146773Ssam 39251158Sdelphijconf_script_dir="$TOPDIR/common/autoconf" 40146773Ssam 41146773Ssamif [ "$CUSTOM_CONFIG_DIR" = "" ]; then 42146773Ssam conf_custom_script_dir="$TOPDIR/closed/autoconf" 43146773Ssamelse 44146773Ssam conf_custom_script_dir="$CUSTOM_CONFIG_DIR" 45146773Ssamfi 46146773Ssam 47### 48### Test that the generated configure is up-to-date 49### 50 51run_autogen_or_fail() { 52 if test "x`which autoconf 2> /dev/null`" = x; then 53 echo "Cannot locate autoconf, unable to correct situation." 54 echo "Please install autoconf and run 'bash autogen.sh' to update the generated files." 55 echo "Error: Cannot continue" 1>&2 56 exit 1 57 else 58 echo "Running autogen.sh to correct the situation" 59 bash $conf_script_dir/autogen.sh 60 fi 61} 62 63check_autoconf_timestamps() { 64 for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do 65 if test $file -nt $conf_script_dir/generated-configure.sh; then 66 echo "Warning: The configure source files is newer than the generated files." 67 run_autogen_or_fail 68 fi 69 done 70 71 if test -e $conf_custom_script_dir/generated-configure.sh; then 72 # If custom source configure is available, make sure it is up-to-date as well. 73 for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $conf_custom_script_dir/*.m4; do 74 if test $file -nt $conf_custom_script_dir/generated-configure.sh; then 75 echo "Warning: The configure source files is newer than the custom generated files." 76 run_autogen_or_fail 77 fi 78 done 79 fi 80} 81 82check_hg_updates() { 83 if test "x`which hg 2> /dev/null`" != x; then 84 conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf` 85 if test "x$conf_updated_autoconf_files" != x; then 86 echo "Configure source code has been updated, checking time stamps" 87 check_autoconf_timestamps 88 fi 89 90 if test -e $conf_custom_script_dir; then 91 # If custom source configure is available, make sure it is up-to-date as well. 92 conf_custom_updated_autoconf_files=`cd $conf_custom_script_dir && hg status -mard 2> /dev/null | grep autoconf` 93 if test "x$conf_custom_updated_autoconf_files" != x; then 94 echo "Configure custom source code has been updated, checking time stamps" 95 check_autoconf_timestamps 96 fi 97 fi 98 fi 99} 100 101# Check for local changes 102check_hg_updates 103 104if test -e $conf_custom_script_dir/generated-configure.sh; then 105 # Test if open configure is newer than custom configure, if so, custom needs to 106 # be regenerated. This test is required to ensure consistency with custom source. 107 conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh | cut -d"=" -f 2` 108 conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_custom_script_dir/generated-configure.sh | cut -d"=" -f 2` 109 if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then 110 echo "Warning: The generated configure file contains changes not present in the custom generated file." 111 run_autogen_or_fail 112 fi 113fi 114 115# Autoconf calls the configure script recursively sometimes. 116# Don't start logging twice in that case 117if test "x$conf_debug_configure" = xtrue; then 118 conf_debug_configure=recursive 119fi 120 121### 122### Process command-line arguments 123### 124 125# Returns a shell-escaped version of the argument given. 126function shell_quote() { 127 if [[ -n "$1" ]]; then 128 # Uses only shell-safe characters? No quoting needed. 129 # '=' is a zsh meta-character, but only in word-initial position. 130 if [[ "$1" =~ ^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.:,%/+=_-]+$ && ! "$1" =~ ^= ]]; then 131 quoted="$1" 132 else 133 if [[ "$1" =~ [\'!] ]]; then 134 # csh does history expansion within single quotes, but not 135 # when backslash-escaped! 136 local quoted_quote="'\\''" quoted_exclam="'\\!'" 137 word="${1//\'/${quoted_quote}}" 138 word="${1//\!/${quoted_exclam}}" 139 fi 140 quoted="'$1'" 141 fi 142 echo "$quoted" 143 fi 144} 145 146conf_processed_arguments=() 147conf_quoted_arguments=() 148conf_openjdk_target= 149 150for conf_option 151do 152 153 # Process (and remove) our own extensions that will not be passed to autoconf 154 case $conf_option in 155 --openjdk-target=*) 156 conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` 157 ;; 158 --debug-configure) 159 if test "x$conf_debug_configure" != xrecursive; then 160 conf_debug_configure=true 161 export conf_debug_configure 162 fi 163 ;; 164 *) 165 conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") 166 ;; 167 esac 168 169 # Store all variables overridden on the command line 170 case $conf_option in 171 [^-]*=*) 172 # Add name of variable to CONFIGURE_OVERRIDDEN_VARIABLES list inside !...!. 173 conf_env_var=`expr "x$conf_option" : 'x\([^=]*\)='` 174 CONFIGURE_OVERRIDDEN_VARIABLES="$CONFIGURE_OVERRIDDEN_VARIABLES!$conf_env_var!" 175 ;; 176 esac 177 178 # Save the arguments, intelligently quoted for CONFIGURE_COMMAND_LINE. 179 case $conf_option in 180 *=*) 181 conf_option_name=`expr "x$conf_option" : 'x\([^=]*\)='` 182 conf_option_name=$(shell_quote "$conf_option_name") 183 conf_option_value=`expr "x$conf_option" : 'x[^=]*=\(.*\)'` 184 conf_option_value=$(shell_quote "$conf_option_value") 185 conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$conf_option_name=$conf_option_value") 186 ;; 187 *) 188 conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$(shell_quote "$conf_option")") 189 ;; 190 esac 191 192 # Check for certain autoconf options that require extra action 193 case $conf_option in 194 -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*) 195 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 196 -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) 197 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 198 -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*) 199 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 200 -help | --help | --hel | --he | -h) 201 conf_print_help=true ;; 202 esac 203done 204 205# Save the quoted command line 206CONFIGURE_COMMAND_LINE="${conf_quoted_arguments[@]}" 207 208if test "x$conf_legacy_crosscompile" != "x"; then 209 if test "x$conf_openjdk_target" != "x"; then 210 echo "Error: Specifying --openjdk-target together with autoconf" 211 echo "legacy cross-compilation flags is not supported." 212 echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile." 213 echo "The recommended use is just --openjdk-target." 214 exit 1 215 else 216 echo "Warning: You are using legacy autoconf cross-compilation flags." 217 echo "It is recommended that you use --openjdk-target instead." 218 echo "" 219 fi 220fi 221 222if test "x$conf_openjdk_target" != "x"; then 223 conf_build_platform=`sh $conf_script_dir/build-aux/config.guess` 224 conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}") 225fi 226 227# Make configure exit with error on invalid options as default. 228# Can be overridden by --disable-option-checking, since we prepend our argument 229# and later options override earlier. 230conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}") 231 232### 233### Call the configure script 234### 235if test -e $conf_custom_script_dir/generated-configure.sh; then 236 # Custom source configure available; run that instead 237 echo "Running custom generated-configure.sh" 238 conf_script_to_run=$conf_custom_script_dir/generated-configure.sh 239else 240 echo "Running generated-configure.sh" 241 conf_script_to_run=$conf_script_dir/generated-configure.sh 242fi 243 244if test "x$conf_debug_configure" != x; then 245 # Turn on shell debug output if requested (initial or recursive) 246 set -x 247fi 248 249if test "x$conf_debug_configure" = xtrue; then 250 # Turn on logging, but don't turn on twice when called recursive 251 conf_debug_logfile=./debug-configure.log 252 (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 253else 254 ( . $conf_script_to_run "${conf_processed_arguments[@]}" ) 255fi 256 257conf_result_code=$? 258### 259### Post-processing 260### 261 262if test $conf_result_code -eq 0; then 263 if test "x$conf_print_help" = xtrue; then 264 cat <<EOT 265 266Additional (non-autoconf) OpenJDK Options: 267 --openjdk-target=TARGET cross-compile with TARGET as target platform 268 (i.e. the one you will run the resulting binary on). 269 Equivalent to --host=TARGET --target=TARGET 270 --build=<current platform> 271 --debug-configure Run the configure script with additional debug 272 logging enabled. 273 274EOT 275 276 # Print list of toolchains. This must be done by the autoconf script. 277 ( CONFIGURE_PRINT_TOOLCHAIN_LIST=true . $conf_script_to_run PRINTF=printf ) 278 279 cat <<EOT 280 281Please be aware that, when cross-compiling, the OpenJDK configure script will 282generally use 'target' where autoconf traditionally uses 'host'. 283 284Also note that variables must be passed on the command line. Variables in the 285environment will generally be ignored, unlike traditional autoconf scripts. 286EOT 287 fi 288else 289 echo configure exiting with result code $conf_result_code 290fi 291 292exit $conf_result_code 293