configure revision 979:e7872d8abd12
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 39conf_script_dir="$TOPDIR/common/autoconf" 40 41if [ "$CUSTOM_CONFIG_DIR" = "" ]; then 42 conf_custom_script_dir="$TOPDIR/closed/autoconf" 43else 44 conf_custom_script_dir="$CUSTOM_CONFIG_DIR" 45fi 46 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