common/autoconf/configure

Mon, 29 Jun 2020 21:30:12 +0100

author
andrew
date
Mon, 29 Jun 2020 21:30:12 +0100
changeset 2537
a8da94d779b3
parent 2213
5510b933fa58
child 2316
64a3eeabf6e5
permissions
-rw-r--r--

Merge

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

mercurial