common/autoconf/configure

Thu, 05 Apr 2018 07:59:52 -0700

author
kevinw
date
Thu, 05 Apr 2018 07:59:52 -0700
changeset 2206
7ba4e17574e0
parent 2204
0e87966d7ff1
child 2211
2209644bcac4
permissions
-rw-r--r--

8034788: Rewrite toolchain.m4 to support multiple toolchains per platform.
Reviewed-by: ihse, henryjen, erikj

     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 CONFIGURE_COMMAND_LINE="$@"
    36 conf_script_dir=`dirname $0`
    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
    44 ###
    45 ### Test that the generated configure is up-to-date
    46 ###
    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 }
    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
    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 }
    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
    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 }
    98 # Check for local changes
    99 check_hg_updates
   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
   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=
   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
   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
   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
   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
   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[@]}")
   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
   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
   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
   208 conf_result_code=$?
   209 ###
   210 ### Post-processing
   211 ###
   213 if test $conf_result_code -eq 0; then
   214   if test "x$conf_print_help" = xtrue; then
   215     cat <<EOT
   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.
   225 EOT
   227     # Print list of toolchains. This must be done by the autoconf script.
   228     ( CONFIGURE_PRINT_TOOLCHAIN_LIST=true . $conf_script_to_run PRINTF=printf )
   230     cat <<EOT
   232 Please be aware that, when cross-compiling, the OpenJDK configure script will
   233 generally use 'target' where autoconf traditionally uses 'host'.
   235 Also note that variables must be passed on the command line. Variables in the
   236 environment will generally be ignored, unlike traditional autoconf scripts.
   237 EOT
   238   fi
   239 else
   240   echo configure exiting with result code $conf_result_code
   241 fi
   243 exit $conf_result_code

mercurial