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