common/autoconf/configure

Tue, 10 Apr 2018 07:46:25 -0700

author
kevinw
date
Tue, 10 Apr 2018 07:46:25 -0700
changeset 2211
2209644bcac4
parent 2206
7ba4e17574e0
child 2212
dd97daafa80b
permissions
-rw-r--r--

8034199: Add 'reconfigure' target for re-creating a configuration
Reviewed-by: ihse, erikj, tbell

     1 #!/bin/bash
     2 #
     3 # Copyright (c) 2012, 2018, 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 #
    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
    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
    35 conf_script_dir=`dirname $0`
    37 if [ "$CUSTOM_CONFIG_DIR" = "" ]; then
    38   conf_custom_script_dir="$conf_script_dir/../../jdk/make/closed/autoconf"
    39 else
    40   conf_custom_script_dir=$CUSTOM_CONFIG_DIR
    41 fi
    43 ###
    44 ### Test that the generated configure is up-to-date
    45 ###
    47 run_autogen_or_fail() {
    48   if test "x`which autoconf 2> /dev/null`" = x; then
    49     echo "Cannot locate autoconf, unable to correct situation."
    50     echo "Please install autoconf and run 'bash autogen.sh' to update the generated files."
    51     echo "Error: Cannot continue" 1>&2
    52     exit 1
    53   else
    54     echo "Running autogen.sh to correct the situation"
    55     bash $conf_script_dir/autogen.sh
    56   fi
    57 }
    59 check_autoconf_timestamps() {
    60   for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do
    61     if test $file -nt $conf_script_dir/generated-configure.sh; then
    62       echo "Warning: The configure source files is newer than the generated files."
    63       run_autogen_or_fail
    64     fi
    65   done
    67   if test -e $conf_custom_script_dir/generated-configure.sh; then
    68     # If custom source configure is available, make sure it is up-to-date as well.
    69     for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $conf_custom_script_dir/*.m4; do
    70       if test $file -nt $conf_custom_script_dir/generated-configure.sh; then
    71         echo "Warning: The configure source files is newer than the custom generated files."
    72         run_autogen_or_fail
    73       fi
    74     done
    75   fi
    76 }
    78 check_hg_updates() {
    79   if test "x`which hg 2> /dev/null`" != x; then
    80     conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf`
    81     if test "x$conf_updated_autoconf_files" != x; then
    82       echo "Configure source code has been updated, checking time stamps"
    83       check_autoconf_timestamps
    84     fi
    86     if test -e $conf_custom_script_dir; then
    87       # If custom source configure is available, make sure it is up-to-date as well.
    88       conf_custom_updated_autoconf_files=`cd $conf_custom_script_dir && hg status -mard 2> /dev/null | grep autoconf`
    89       if test "x$conf_custom_updated_autoconf_files" != x; then
    90         echo "Configure custom source code has been updated, checking time stamps"
    91         check_autoconf_timestamps
    92       fi
    93     fi
    94   fi
    95 }
    97 # Check for local changes
    98 check_hg_updates
   100 if test -e $conf_custom_script_dir/generated-configure.sh; then
   101   # Test if open configure is newer than custom configure, if so, custom needs to
   102   # be regenerated. This test is required to ensure consistency with custom source.
   103   conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh  | cut -d"=" -f 2`
   104   conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_custom_script_dir/generated-configure.sh  | cut -d"=" -f 2`
   105   if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then
   106     echo "Warning: The generated configure file contains changes not present in the custom generated file."
   107     run_autogen_or_fail
   108   fi
   109 fi
   111 # Autoconf calls the configure script recursively sometimes.
   112 # Don't start logging twice in that case
   113 if test "x$conf_debug_configure" = xtrue; then
   114   conf_debug_configure=recursive
   115 fi
   117 ###
   118 ### Process command-line arguments
   119 ###
   121 # Returns a shell-escaped version of the argument given.
   122 function shell_quote() {
   123   if [[ -n "$1" ]]; then
   124     # Uses only shell-safe characters?  No quoting needed.
   125     # '=' is a zsh meta-character, but only in word-initial position.
   126     if [[ "$1" =~ ^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.:,%/+=_-]+$ && ! "$1" =~ ^= ]]; then
   127       quoted="$1"
   128     else
   129       if [[ "$1" =~ [\'!] ]]; then
   130         # csh does history expansion within single quotes, but not
   131         # when backslash-escaped!
   132         local quoted_quote="'\\''" quoted_exclam="'\\!'"
   133         word="${1//\'/${quoted_quote}}"
   134         word="${1//\!/${quoted_exclam}}"
   135       fi
   136       quoted="'$1'"
   137     fi
   138     echo "$quoted"
   139   fi
   140 }
   142 conf_processed_arguments=()
   143 conf_quoted_arguments=()
   144 conf_openjdk_target=
   146 for conf_option
   147 do
   149   # Process (and remove) our own extensions that will not be passed to autoconf
   150   case $conf_option in
   151     --openjdk-target=*)
   152       conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'`
   153       ;;
   154     --debug-configure)
   155       if test "x$conf_debug_configure" != xrecursive; then
   156         conf_debug_configure=true
   157         export conf_debug_configure
   158       fi
   159       ;;
   160     *)
   161       conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option")
   162       ;;
   163   esac
   165   # Store all variables overridden on the command line
   166   case $conf_option in
   167     [^-]*=*)
   168       # Add name of variable to CONFIGURE_OVERRIDDEN_VARIABLES list inside !...!.
   169       conf_env_var=`expr "x$conf_option" : 'x\([^=]*\)='`
   170       CONFIGURE_OVERRIDDEN_VARIABLES="$CONFIGURE_OVERRIDDEN_VARIABLES!$conf_env_var!"
   171       ;;
   172   esac
   174   # Save the arguments, intelligently quoted for CONFIGURE_COMMAND_LINE.
   175   case $conf_option in
   176     *=*)
   177       conf_option_name=`expr "x$conf_option" : 'x\([^=]*\)='`
   178       conf_option_name=$(shell_quote "$conf_option_name")
   179       conf_option_value=`expr "x$conf_option" : 'x[^=]*=\(.*\)'`
   180       conf_option_value=$(shell_quote "$conf_option_value")
   181       conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$conf_option_name=$conf_option_value")
   182       ;;
   183     *)
   184       conf_quoted_arguments=("${conf_quoted_arguments[@]}" "$(shell_quote "$conf_option")")
   185       ;;
   186   esac
   188   # Check for certain autoconf options that require extra action
   189   case $conf_option in
   190     -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*)
   191       conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
   192     -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
   193       conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
   194     -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*)
   195       conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;;
   196     -help | --help | --hel | --he | -h)
   197       conf_print_help=true ;;
   198   esac
   199 done
   201 # Save the quoted command line
   202 CONFIGURE_COMMAND_LINE="${conf_quoted_arguments[@]}"
   204 if test "x$conf_legacy_crosscompile" != "x"; then
   205   if test "x$conf_openjdk_target" != "x"; then
   206     echo "Error: Specifying --openjdk-target together with autoconf"
   207     echo "legacy cross-compilation flags is not supported."
   208     echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile."
   209     echo "The recommended use is just --openjdk-target."
   210     exit 1
   211   else
   212     echo "Warning: You are using legacy autoconf cross-compilation flags."
   213     echo "It is recommended that you use --openjdk-target instead."
   214     echo ""
   215   fi
   216 fi
   218 if test "x$conf_openjdk_target" != "x"; then
   219   conf_build_platform=`sh $conf_script_dir/build-aux/config.guess`
   220   conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}")
   221 fi
   223 # Make configure exit with error on invalid options as default.
   224 # Can be overridden by --disable-option-checking, since we prepend our argument
   225 # and later options override earlier.
   226 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
   228 ###
   229 ### Call the configure script
   230 ###
   231 if test -e $conf_custom_script_dir/generated-configure.sh; then
   232   # Custom source configure available; run that instead
   233   echo Running custom generated-configure.sh
   234   conf_script_to_run=$conf_custom_script_dir/generated-configure.sh
   235 else
   236   echo Running generated-configure.sh
   237   conf_script_to_run=$conf_script_dir/generated-configure.sh
   238 fi
   240 if test "x$conf_debug_configure" != x; then
   241   # Turn on shell debug output if requested (initial or recursive)
   242   set -x
   243 fi
   245 if test "x$conf_debug_configure" = xtrue; then
   246   # Turn on logging, but don't turn on twice when called recursive
   247   conf_debug_logfile=./debug-configure.log
   248   (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
   249 else
   250   ( . $conf_script_to_run "${conf_processed_arguments[@]}" )
   251 fi
   253 conf_result_code=$?
   254 ###
   255 ### Post-processing
   256 ###
   258 if test $conf_result_code -eq 0; then
   259   if test "x$conf_print_help" = xtrue; then
   260     cat <<EOT
   262 Additional (non-autoconf) OpenJDK Options:
   263   --openjdk-target=TARGET cross-compile with TARGET as target platform
   264                           (i.e. the one you will run the resulting binary on).
   265                           Equivalent to --host=TARGET --target=TARGET
   266                           --build=<current platform>
   267   --debug-configure       Run the configure script with additional debug
   268                           logging enabled.
   270 EOT
   272     # Print list of toolchains. This must be done by the autoconf script.
   273     ( CONFIGURE_PRINT_TOOLCHAIN_LIST=true . $conf_script_to_run PRINTF=printf )
   275     cat <<EOT
   277 Please be aware that, when cross-compiling, the OpenJDK configure script will
   278 generally use 'target' where autoconf traditionally uses 'host'.
   280 Also note that variables must be passed on the command line. Variables in the
   281 environment will generally be ignored, unlike traditional autoconf scripts.
   282 EOT
   283   fi
   284 else
   285   echo configure exiting with result code $conf_result_code
   286 fi
   288 exit $conf_result_code

mercurial