configure revision 975:b18872ff5379
184309Sluigi#!/bin/bash 284309Sluigi# 384309Sluigi# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. 484309Sluigi# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 584309Sluigi# 684309Sluigi# This code is free software; you can redistribute it and/or modify it 784309Sluigi# under the terms of the GNU General Public License version 2 only, as 884309Sluigi# published by the Free Software Foundation. 984309Sluigi# 1084309Sluigi# This code is distributed in the hope that it will be useful, but WITHOUT 1184309Sluigi# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1284309Sluigi# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1384309Sluigi# version 2 for more details (a copy is included in the LICENSE file that 1484309Sluigi# accompanied this code). 1584309Sluigi# 1684309Sluigi# You should have received a copy of the GNU General Public License version 1784309Sluigi# 2 along with this work; if not, write to the Free Software Foundation, 1884309Sluigi# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1984309Sluigi# 2084309Sluigi# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2184309Sluigi# or visit www.oracle.com if you need additional information or have any 2284309Sluigi# questions. 2384309Sluigi# 2484309Sluigi 2584309Sluigiif test "x$BASH_VERSION" = x; then 2684309Sluigi echo This script needs bash to run. 2784309Sluigi echo It is recommended to use the configure script in the source tree root instead. 2884309Sluigi exit 1 2984309Sluigifi 3084309Sluigi 3184309Sluigiconf_script_dir=`dirname $0` 3284309Sluigi 3384309Sluigiif [ "$CUSTOM_CONFIG_DIR" = "" ]; then 3484309Sluigi conf_custom_script_dir="$conf_script_dir/../../closed/autoconf" 3584309Sluigielse 3684309Sluigi conf_custom_script_dir=$CUSTOM_CONFIG_DIR 3784309Sluigifi 3884309Sluigi 3984309Sluigi### 4084309Sluigi### Test that the generated configure is up-to-date 4184309Sluigi### 4284309Sluigi 4384309Sluigirun_autogen_or_fail() { 4484309Sluigi if test "x`which autoconf 2> /dev/null`" = x; then 4584605Sluigi echo "Cannot locate autoconf, unable to correct situation." 4684309Sluigi echo "Please install autoconf and run 'bash autogen.sh' to update the generated files." 4784309Sluigi echo "Error: Cannot continue" 1>&2 4884309Sluigi exit 1 4984309Sluigi else 5084309Sluigi echo "Running autogen.sh to correct the situation" 5184309Sluigi bash $conf_script_dir/autogen.sh 5284309Sluigi fi 5384309Sluigi} 5484309Sluigi 5584309Sluigicheck_autoconf_timestamps() { 5684309Sluigi for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do 5784309Sluigi if test $file -nt $conf_script_dir/generated-configure.sh; then 5884309Sluigi echo "Warning: The configure source files is newer than the generated files." 5984309Sluigi run_autogen_or_fail 6084309Sluigi fi 6184309Sluigi done 6284309Sluigi 6384309Sluigi if test -e $conf_custom_script_dir/generated-configure.sh; then 6484309Sluigi # If custom source configure is available, make sure it is up-to-date as well. 6584309Sluigi for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $conf_custom_script_dir/*.m4; do 6684309Sluigi if test $file -nt $conf_custom_script_dir/generated-configure.sh; then 6784309Sluigi echo "Warning: The configure source files is newer than the custom generated files." 6884309Sluigi run_autogen_or_fail 6984309Sluigi fi 7084309Sluigi done 7184309Sluigi fi 7284309Sluigi} 7384309Sluigi 7484309Sluigicheck_hg_updates() { 7584309Sluigi if test "x`which hg 2> /dev/null`" != x; then 7684309Sluigi conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf` 7784309Sluigi if test "x$conf_updated_autoconf_files" != x; then 7884309Sluigi echo "Configure source code has been updated, checking time stamps" 79203876Sluigi check_autoconf_timestamps 8084309Sluigi fi 8184309Sluigi 8284309Sluigi if test -e $conf_custom_script_dir; then 8394201Sru # If custom source configure is available, make sure it is up-to-date as well. 8484309Sluigi conf_custom_updated_autoconf_files=`cd $conf_custom_script_dir && hg status -mard 2> /dev/null | grep autoconf` 8584309Sluigi if test "x$conf_custom_updated_autoconf_files" != x; then 8684309Sluigi echo "Configure custom source code has been updated, checking time stamps" 8784309Sluigi check_autoconf_timestamps 8884309Sluigi fi 89104744Salfred fi 90104744Salfred fi 91104744Salfred} 92104744Salfred 93104744Salfred# Check for local changes 94104744Salfredcheck_hg_updates 95104744Salfred 96104744Salfredif test -e $conf_custom_script_dir/generated-configure.sh; then 97104744Salfred # Test if open configure is newer than custom configure, if so, custom needs to 98104744Salfred # be regenerated. This test is required to ensure consistency with custom source. 99104744Salfred conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh | cut -d"=" -f 2` 100104744Salfred conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_custom_script_dir/generated-configure.sh | cut -d"=" -f 2` 101104744Salfred if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then 10284309Sluigi echo "Warning: The generated configure file contains changes not present in the custom generated file." 10384309Sluigi run_autogen_or_fail 104104744Salfred fi 105104744Salfredfi 106104744Salfred 10784309Sluigi# Autoconf calls the configure script recursively sometimes. 10884309Sluigi# Don't start logging twice in that case 10984309Sluigiif test "x$conf_debug_configure" = xtrue; then 11084309Sluigi conf_debug_configure=recursive 11184309Sluigifi 11284309Sluigi 11384309Sluigi### 11484309Sluigi### Process command-line arguments 11584309Sluigi### 11684309Sluigi 11784309Sluigi# Returns a shell-escaped version of the argument given. 11884309Sluigifunction shell_quote() { 11984309Sluigi if [[ -n "$1" ]]; then 12084309Sluigi # Uses only shell-safe characters? No quoting needed. 121104744Salfred # '=' is a zsh meta-character, but only in word-initial position. 122104744Salfred if [[ "$1" =~ ^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.:,%/+=_-]+$ && ! "$1" =~ ^= ]]; then 12384309Sluigi quoted="$1" 12484309Sluigi else 12584309Sluigi if [[ "$1" =~ [\'!] ]]; then 12684309Sluigi # csh does history expansion within single quotes, but not 12784309Sluigi # when backslash-escaped! 12884309Sluigi local quoted_quote="'\\''" quoted_exclam="'\\!'" 12984309Sluigi word="${1//\'/${quoted_quote}}" 13084309Sluigi word="${1//\!/${quoted_exclam}}" 13184309Sluigi fi 13284309Sluigi quoted="'$1'" 13384309Sluigi fi 13484309Sluigi echo "$quoted" 13584309Sluigi fi 13684309Sluigi} 13784309Sluigi 13884309Sluigiconf_processed_arguments=() 13984309Sluigiconf_quoted_arguments=() 14084309Sluigiconf_openjdk_target= 14194203Sru 14294203Srufor conf_option 14384309Sluigido 14484309Sluigi 14584309Sluigi # Process (and remove) our own extensions that will not be passed to autoconf 14684309Sluigi case $conf_option in 14784309Sluigi --openjdk-target=*) 14884309Sluigi conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` 14984309Sluigi ;; 15084309Sluigi --debug-configure) 15184309Sluigi if test "x$conf_debug_configure" != xrecursive; then 15284309Sluigi conf_debug_configure=true 153203876Sluigi export conf_debug_configure 15484309Sluigi fi 15584309Sluigi ;; 15684309Sluigi *) 157239991Sed conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") 15884309Sluigi ;; 15984309Sluigi esac 16084309Sluigi 16184309Sluigi # Store all variables overridden on the command line 16284309Sluigi case $conf_option in 16394203Sru [^-]*=*) 16484309Sluigi # Add name of variable to CONFIGURE_OVERRIDDEN_VARIABLES list inside !...!. 165203876Sluigi conf_env_var=`expr "x$conf_option" : 'x\([^=]*\)='` 166203876Sluigi CONFIGURE_OVERRIDDEN_VARIABLES="$CONFIGURE_OVERRIDDEN_VARIABLES!$conf_env_var!" 16784309Sluigi ;; 16884309Sluigi esac 16984309Sluigi 17084309Sluigi # Save the arguments, intelligently quoted for CONFIGURE_COMMAND_LINE. 17184309Sluigi case $conf_option in 17284309Sluigi *=*) 17384309Sluigi conf_option_name=`expr "x$conf_option" : 'x\([^=]*\)='` 17484309Sluigi conf_option_name=$(shell_quote "$conf_option_name") 17584309Sluigi conf_option_value=`expr "x$conf_option" : 'x[^=]*=\(.*\)'` 17684309Sluigi conf_option_value=$(shell_quote "$conf_option_value") 17784309Sluigi conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$conf_option_name=$conf_option_value") 17884309Sluigi ;; 17984309Sluigi *) 18084309Sluigi conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$(shell_quote "$conf_option")") 18184309Sluigi ;; 18284309Sluigi esac 18384309Sluigi 18484309Sluigi # Check for certain autoconf options that require extra action 18584309Sluigi case $conf_option in 18684309Sluigi -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*) 18784309Sluigi conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 18884309Sluigi -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) 18984309Sluigi conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 19084309Sluigi -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*) 19184309Sluigi conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; 19284309Sluigi -help | --help | --hel | --he | -h) 19384309Sluigi conf_print_help=true ;; 19484309Sluigi esac 19584309Sluigidone 19684309Sluigi 19784309Sluigi# Save the quoted command line 19884309SluigiCONFIGURE_COMMAND_LINE="${conf_quoted_arguments[@]}" 19984309Sluigi 20084309Sluigiif test "x$conf_legacy_crosscompile" != "x"; then 20184309Sluigi if test "x$conf_openjdk_target" != "x"; then 20284309Sluigi echo "Error: Specifying --openjdk-target together with autoconf" 20384309Sluigi echo "legacy cross-compilation flags is not supported." 20484309Sluigi echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile." 20584309Sluigi echo "The recommended use is just --openjdk-target." 20684309Sluigi exit 1 20784309Sluigi else 20884309Sluigi echo "Warning: You are using legacy autoconf cross-compilation flags." 20984309Sluigi echo "It is recommended that you use --openjdk-target instead." 21084309Sluigi echo "" 21184309Sluigi fi 21284309Sluigifi 21384309Sluigi 21484309Sluigiif test "x$conf_openjdk_target" != "x"; then 21584309Sluigi conf_build_platform=`sh $conf_script_dir/build-aux/config.guess` 21684309Sluigi conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}") 21784309Sluigifi 21884309Sluigi 21984309Sluigi# Make configure exit with error on invalid options as default. 22084309Sluigi# Can be overridden by --disable-option-checking, since we prepend our argument 22184309Sluigi# and later options override earlier. 22284309Sluigiconf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}") 22384309Sluigi 22484309Sluigi### 22584309Sluigi### Call the configure script 22684309Sluigi### 22784309Sluigiif test -e $conf_custom_script_dir/generated-configure.sh; then 22884309Sluigi # Custom source configure available; run that instead 22984309Sluigi echo Running custom generated-configure.sh 23084309Sluigi conf_script_to_run=$conf_custom_script_dir/generated-configure.sh 23184309Sluigielse 232146187Sume echo Running generated-configure.sh 23384309Sluigi conf_script_to_run=$conf_script_dir/generated-configure.sh 23484309Sluigifi 23584309Sluigi 23684309Sluigiif test "x$conf_debug_configure" != x; then 23784309Sluigi # Turn on shell debug output if requested (initial or recursive) 23884309Sluigi set -x 23984309Sluigifi 24084309Sluigi 24184309Sluigiif test "x$conf_debug_configure" = xtrue; then 24284309Sluigi # Turn on logging, but don't turn on twice when called recursive 24384309Sluigi conf_debug_logfile=./debug-configure.log 24484309Sluigi (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 24584309Sluigielse 24684309Sluigi ( . $conf_script_to_run "${conf_processed_arguments[@]}" ) 24784309Sluigifi 24884309Sluigi 24984309Sluigiconf_result_code=$? 25084309Sluigi### 25184309Sluigi### Post-processing 25284309Sluigi### 25384309Sluigi 25484309Sluigiif test $conf_result_code -eq 0; then 25584309Sluigi if test "x$conf_print_help" = xtrue; then 25684309Sluigi cat <<EOT 25784309Sluigi 25884309SluigiAdditional (non-autoconf) OpenJDK Options: 25984309Sluigi --openjdk-target=TARGET cross-compile with TARGET as target platform 26084309Sluigi (i.e. the one you will run the resulting binary on). 26184309Sluigi Equivalent to --host=TARGET --target=TARGET 26284309Sluigi --build=<current platform> 26384309Sluigi --debug-configure Run the configure script with additional debug 26484309Sluigi logging enabled. 26584309Sluigi 26684309SluigiEOT 26784309Sluigi 26884309Sluigi # Print list of toolchains. This must be done by the autoconf script. 26984309Sluigi ( CONFIGURE_PRINT_TOOLCHAIN_LIST=true . $conf_script_to_run PRINTF=printf ) 27084309Sluigi 27184309Sluigi cat <<EOT 27284309Sluigi 27384309SluigiPlease be aware that, when cross-compiling, the OpenJDK configure script will 27484309Sluigigenerally use 'target' where autoconf traditionally uses 'host'. 27584309Sluigi 27684309SluigiAlso note that variables must be passed on the command line. Variables in the 27784309Sluigienvironment will generally be ignored, unlike traditional autoconf scripts. 27884309SluigiEOT 27984309Sluigi fi 28084309Sluigielse 281211079Sgavin echo configure exiting with result code $conf_result_code 282211079Sgavinfi 28384309Sluigi 28484309Sluigiexit $conf_result_code 28584309Sluigi