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