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