configure revision 981:ee306f131815
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 echo "$1" | grep -qE '^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.:,%/+=_-]+$' \ 131 && ! echo "$1" | grep -qE '^='; then 132 quoted="$1" 133 else 134 if echo "$1" | grep -qE "[\'!]"; then 135 # csh does history expansion within single quotes, but not 136 # when backslash-escaped! 137 local quoted_quote="'\\''" quoted_exclam="'\\!'" 138 word="${1//\'/${quoted_quote}}" 139 word="${1//\!/${quoted_exclam}}" 140 fi 141 quoted="'$1'" 142 fi 143 echo "$quoted" 144 fi 145} 146 147conf_processed_arguments=() 148conf_quoted_arguments=() 149conf_openjdk_target= 150 151for conf_option 152do 153 154 # Process (and remove) our own extensions that will not be passed to autoconf 155 case $conf_option in 156 --openjdk-target=*) 157 conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` 158 ;; 159 --debug-configure) 160 if test "x$conf_debug_configure" != xrecursive; then 161 conf_debug_configure=true 162 export conf_debug_configure 163 fi 164 ;; 165 *) 166 conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") 167 ;; 168 esac 169 170 # Store all variables overridden on the command line 171 case $conf_option in 172 [^-]*=*) 173 # Add name of variable to CONFIGURE_OVERRIDDEN_VARIABLES list inside !...!. 174 conf_env_var=`expr "x$conf_option" : 'x\([^=]*\)='` 175 CONFIGURE_OVERRIDDEN_VARIABLES="$CONFIGURE_OVERRIDDEN_VARIABLES!$conf_env_var!" 176 ;; 177 esac 178 179 # Save the arguments, intelligently quoted for CONFIGURE_COMMAND_LINE. 180 case $conf_option in 181 *=*) 182 conf_option_name=`expr "x$conf_option" : 'x\([^=]*\)='` 183 conf_option_name=$(shell_quote "$conf_option_name") 184 conf_option_value=`expr "x$conf_option" : 'x[^=]*=\(.*\)'` 185 conf_option_value=$(shell_quote "$conf_option_value") 186 conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$conf_option_name=$conf_option_value") 187 ;; 188 *) 189 conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$(shell_quote "$conf_option")") 190 ;; 191 esac 192 193 # Check for certain autoconf options that require extra action 194 case $conf_option in 195 -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*) 196 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 197 -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) 198 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 199 -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*) 200 conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 201 -help | --help | --hel | --he | -h) 202 conf_print_help=true ;; 203 esac 204done 205 206# Save the quoted command line 207CONFIGURE_COMMAND_LINE="${conf_quoted_arguments[@]}" 208 209if test "x$conf_legacy_crosscompile" != "x"; then 210 if test "x$conf_openjdk_target" != "x"; then 211 echo "Error: Specifying --openjdk-target together with autoconf" 212 echo "legacy cross-compilation flags is not supported." 213 echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile." 214 echo "The recommended use is just --openjdk-target." 215 exit 1 216 else 217 echo "Warning: You are using legacy autoconf cross-compilation flags." 218 echo "It is recommended that you use --openjdk-target instead." 219 echo "" 220 fi 221fi 222 223if test "x$conf_openjdk_target" != "x"; then 224 conf_build_platform=`sh $conf_script_dir/build-aux/config.guess` 225 conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}") 226fi 227 228# Make configure exit with error on invalid options as default. 229# Can be overridden by --disable-option-checking, since we prepend our argument 230# and later options override earlier. 231conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}") 232 233### 234### Call the configure script 235### 236if test -e $conf_custom_script_dir/generated-configure.sh; then 237 # Custom source configure available; run that instead 238 echo "Running custom generated-configure.sh" 239 conf_script_to_run=$conf_custom_script_dir/generated-configure.sh 240else 241 echo "Running generated-configure.sh" 242 conf_script_to_run=$conf_script_dir/generated-configure.sh 243fi 244 245if test "x$conf_debug_configure" != x; then 246 # Turn on shell debug output if requested (initial or recursive) 247 set -x 248fi 249 250if test "x$conf_debug_configure" = xtrue; then 251 # Turn on logging, but don't turn on twice when called recursive 252 conf_debug_logfile=./debug-configure.log 253 (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 254else 255 ( . $conf_script_to_run "${conf_processed_arguments[@]}" ) 256fi 257 258conf_result_code=$? 259### 260### Post-processing 261### 262 263if test $conf_result_code -eq 0; then 264 if test "x$conf_print_help" = xtrue; then 265 cat <<EOT 266 267Additional (non-autoconf) OpenJDK Options: 268 --openjdk-target=TARGET cross-compile with TARGET as target platform 269 (i.e. the one you will run the resulting binary on). 270 Equivalent to --host=TARGET --target=TARGET 271 --build=<current platform> 272 --debug-configure Run the configure script with additional debug 273 logging enabled. 274 275EOT 276 277 # Print list of toolchains. This must be done by the autoconf script. 278 ( CONFIGURE_PRINT_TOOLCHAIN_LIST=true . $conf_script_to_run PRINTF=printf ) 279 280 cat <<EOT 281 282Please be aware that, when cross-compiling, the OpenJDK configure script will 283generally use 'target' where autoconf traditionally uses 'host'. 284 285Also note that variables must be passed on the command line. Variables in the 286environment will generally be ignored, unlike traditional autoconf scripts. 287EOT 288 fi 289else 290 echo configure exiting with result code $conf_result_code 291fi 292 293exit $conf_result_code 294