make/autoconf/configure
changeset 48743 ba52fa7bbf14
parent 47871 5ab3961d20dd
child 48764 76ebfaa3cc3f
equal deleted inserted replaced
48742:364944ba4e2f 48743:ba52fa7bbf14
     1 #!/bin/bash
     1 #!/bin/bash
     2 #
     2 #
     3 # Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
     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.
     4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     5 #
     5 #
     6 # This code is free software; you can redistribute it and/or modify it
     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
     7 # under the terms of the GNU General Public License version 2 only, as
     8 # published by the Free Software Foundation.
     8 # published by the Free Software Foundation.
    41 fi
    41 fi
    42 # Force autoconf to use bash. This also means we must disable autoconf re-exec.
    42 # Force autoconf to use bash. This also means we must disable autoconf re-exec.
    43 export CONFIG_SHELL=$BASH
    43 export CONFIG_SHELL=$BASH
    44 export _as_can_reexec=no
    44 export _as_can_reexec=no
    45 
    45 
    46 conf_script_dir="$TOPDIR/make/autoconf"
       
    47 
       
    48 if test "x$CUSTOM_CONFIG_DIR" != x; then
    46 if test "x$CUSTOM_CONFIG_DIR" != x; then
    49   if test ! -e $CUSTOM_CONFIG_DIR/generated-configure.sh; then
    47   custom_hook=$CUSTOM_CONFIG_DIR/custom-hook.m4
       
    48   if test ! -e $custom_hook; then
    50     echo "CUSTOM_CONFIG_DIR not pointing to a proper custom config dir."
    49     echo "CUSTOM_CONFIG_DIR not pointing to a proper custom config dir."
    51     echo "Error: Cannot continue" 1>&2
    50     echo "Error: Cannot continue" 1>&2
    52     exit 1
    51     exit 1
    53   fi
    52   fi
    54 fi
    53   build_support_dir="$CUSTOM_ROOT/.build"
    55 
    54 else
    56 ###
    55   build_support_dir="$TOPDIR/.build"
    57 ### Test that the generated configure is up-to-date
    56 fi
    58 ###
    57 
    59 
    58 conf_script_dir="$TOPDIR/make/autoconf"
    60 run_autogen_or_fail() {
    59 generated_script="$build_support_dir/generated-configure.sh"
    61   if test "x`which autoconf 2> /dev/null | grep -v '^no autoconf in'`" = x; then
    60 
    62     echo "Cannot locate autoconf, unable to correct situation."
    61 ###
    63     echo "Please install autoconf and run 'bash autogen.sh' to update the generated files."
    62 ### Use autoconf to create a runnable configure script, if needed
    64     echo "Error: Cannot continue" 1>&2
    63 ###
       
    64 
       
    65 autoconf_missing_help() {
       
    66   APT_GET="`which apt-get 2> /dev/null | grep -v '^no apt-get in'`"
       
    67   YUM="`which yum 2> /dev/null | grep -v '^no yum in'`"
       
    68   BREW="`which brew 2> /dev/null | grep -v '^no brew in'`"
       
    69   CYGWIN="`which cygpath 2> /dev/null | grep -v '^no cygpath in'`"
       
    70 
       
    71   if test "x$APT_GET" != x; then
       
    72     PKGHANDLER_COMMAND="sudo apt-get install autoconf"
       
    73   elif test "x$YUM" != x; then
       
    74     PKGHANDLER_COMMAND="sudo yum install autoconf"
       
    75   elif test "x$BREW" != x; then
       
    76     PKGHANDLER_COMMAND="brew install autoconf"
       
    77   elif test "x$CYGWIN" != x; then
       
    78     PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P autoconf )"
       
    79   fi
       
    80 
       
    81   if test "x$PKGHANDLER_COMMAND" != x; then
       
    82     echo "You might be able to fix this by running '$PKGHANDLER_COMMAND'."
       
    83   fi
       
    84 }
       
    85 
       
    86 generate_configure_script() {
       
    87   if test "x$AUTOCONF" != x; then
       
    88     if test ! -x "$AUTOCONF"; then
       
    89       echo
       
    90       echo "The specified AUTOCONF variable does not point to a valid autoconf executable:"
       
    91       echo "AUTOCONF=$AUTOCONF"
       
    92       echo "Error: Cannot continue" 1>&2
       
    93       exit 1
       
    94     fi
       
    95   else
       
    96     AUTOCONF="`which autoconf 2> /dev/null | grep -v '^no autoconf in'`"
       
    97     if test "x$AUTOCONF" = x; then
       
    98       echo
       
    99       echo "Autoconf is not found on the PATH, and AUTOCONF is not set."
       
   100       echo "You need autoconf to be able to generate a runnable configure script."
       
   101       autoconf_missing_help
       
   102       echo "Error: Cannot find autoconf" 1>&2
       
   103       exit 1
       
   104     fi
       
   105   fi
       
   106 
       
   107   autoconf_version=`$AUTOCONF --version | head -1`
       
   108   echo "Using autoconf at ${AUTOCONF} [$autoconf_version]"
       
   109 
       
   110   if test "x$CUSTOM_CONFIG_DIR" != x; then
       
   111     # Generate configure script with custom hooks compiled in.
       
   112     custom_patcher='sed -e "s|#CUSTOM_AUTOCONF_INCLUDE|m4_include([$custom_hook])|"'
       
   113   else
       
   114     custom_patcher='cat'
       
   115   fi
       
   116 
       
   117   mkdir -p `dirname $generated_script`
       
   118   # Call autoconf but replace the "magic" variable in configure.ac if requested.
       
   119   cat $conf_script_dir/configure.ac | eval $custom_patcher | \
       
   120       ${AUTOCONF} -W all -I$conf_script_dir - > $generated_script
       
   121   rm -rf autom4te.cache
       
   122 
       
   123   # Sanity check
       
   124   if test ! -s $generated_script; then
       
   125     echo "Error: Failed to generate runnable configure script" 1>&2
       
   126     rm -f $generated_script
    65     exit 1
   127     exit 1
    66   else
       
    67     echo "Running autogen.sh to correct the situation"
       
    68     bash $conf_script_dir/autogen.sh
       
    69   fi
   128   fi
    70 }
   129 }
    71 
   130 
    72 check_autoconf_timestamps() {
   131 test_generated_up_to_date() {
    73   for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do
       
    74     if test $file -nt $conf_script_dir/generated-configure.sh; then
       
    75       echo "Warning: The configure source files is newer than the generated files."
       
    76       run_autogen_or_fail
       
    77     fi
       
    78   done
       
    79 
       
    80   if test "x$CUSTOM_CONFIG_DIR" != x; then
       
    81     # If custom source configure is available, make sure it is up-to-date as well.
       
    82     for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $CUSTOM_CONFIG_DIR/*.m4; do
       
    83       if test $file -nt $CUSTOM_CONFIG_DIR/generated-configure.sh; then
       
    84         echo "Warning: The configure source files is newer than the custom generated files."
       
    85         run_autogen_or_fail
       
    86       fi
       
    87     done
       
    88   fi
       
    89 }
       
    90 
       
    91 check_hg_updates() {
       
    92   if test "x`which hg 2> /dev/null | grep -v '^no hg in'`" != x; then
   132   if test "x`which hg 2> /dev/null | grep -v '^no hg in'`" != x; then
    93     conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard . 2> /dev/null`
   133     conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard . 2> /dev/null`
    94     if test "x$conf_updated_autoconf_files" != x; then
   134     conf_source_files="$conf_script_dir/configure.ac $conf_script_dir/*.m4"
    95       echo "Configure source code has been updated, checking time stamps"
   135     if test "x$CUSTOM_CONFIG_DIR" != x; then
    96       check_autoconf_timestamps
       
    97     elif test "x$CUSTOM_CONFIG_DIR" != x; then
       
    98       # If custom source configure is available, make sure it is up-to-date as well.
       
    99       conf_custom_updated_autoconf_files=`cd $CUSTOM_CONFIG_DIR && hg status -mard . 2> /dev/null`
   136       conf_custom_updated_autoconf_files=`cd $CUSTOM_CONFIG_DIR && hg status -mard . 2> /dev/null`
   100       if test "x$conf_custom_updated_autoconf_files" != x; then
   137       conf_custom_source_files="$CUSTOM_CONFIG_DIR/*.m4"
   101         echo "Configure custom source code has been updated, checking time stamps"
   138     else
   102         check_autoconf_timestamps
   139       conf_custom_updated_autoconf_files=""
   103       fi
   140       conf_custom_source_files=""
   104     fi
   141     fi
   105   fi
   142 
       
   143     if test "x${conf_updated_autoconf_files}${conf_custom_updated_autoconf_files}" != x; then
       
   144       for file in $conf_source_files $conf_custom_source_files ; do
       
   145         if test $file -nt $generated_script; then
       
   146           return 0
       
   147         fi
       
   148       done
       
   149     fi
       
   150   fi
       
   151   return 1
   106 }
   152 }
   107 
   153 
   108 # Check for local changes
   154 run_autoconf=false
   109 check_hg_updates
   155 if test "x$1" = xautogen; then
   110 
   156   # User called us as "configure autogen", so force regeneration
   111 if test "x$CUSTOM_CONFIG_DIR" != x; then
   157   run_autoconf=true
   112   # Test if open configure is newer than custom configure, if so, custom needs to
   158   shift
   113   # be regenerated. This test is required to ensure consistency with custom source.
   159 fi
   114   conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh  | cut -d"=" -f 2`
   160 
   115   conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $CUSTOM_CONFIG_DIR/generated-configure.sh  | cut -d"=" -f 2`
   161 if test ! -s $generated_script; then
   116   if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then
   162   # Generated script is missing, so we need to create it
   117     echo "Warning: The generated configure file contains changes not present in the custom generated file."
   163   echo "Runnable configure script is not present"
   118     run_autogen_or_fail
   164   run_autoconf=true
   119   fi
   165 else
       
   166   # File is present, but is it up to date?
       
   167   if test_generated_up_to_date; then
       
   168     echo "Runnable configure script is not up to date"
       
   169     run_autoconf=true
       
   170   fi
       
   171 fi
       
   172 
       
   173 if test "x$run_autoconf" = xtrue; then
       
   174   echo "Generating runnable configure script"
       
   175   generate_configure_script
   120 fi
   176 fi
   121 
   177 
   122 # Autoconf calls the configure script recursively sometimes.
   178 # Autoconf calls the configure script recursively sometimes.
   123 # Don't start logging twice in that case
   179 # Don't start logging twice in that case
   124 if test "x$conf_debug_configure" = xtrue; then
   180 if test "x$conf_debug_configure" = xtrue; then
   238 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
   294 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}")
   239 
   295 
   240 ###
   296 ###
   241 ### Call the configure script
   297 ### Call the configure script
   242 ###
   298 ###
   243 if test "x$CUSTOM_CONFIG_DIR" != x; then
       
   244   # Custom source configure available; run that instead
       
   245   echo "Running custom generated-configure.sh"
       
   246   conf_script_to_run=$CUSTOM_CONFIG_DIR/generated-configure.sh
       
   247 else
       
   248   echo "Running generated-configure.sh"
       
   249   conf_script_to_run=$conf_script_dir/generated-configure.sh
       
   250 fi
       
   251 
       
   252 if test "x$conf_debug_configure" != x; then
   299 if test "x$conf_debug_configure" != x; then
   253   # Turn on shell debug output if requested (initial or recursive)
   300   # Turn on shell debug output if requested (initial or recursive)
   254   set -x
   301   set -x
   255 fi
   302 fi
   256 
   303 
   257 # Now transfer control to the script generated by autoconf. This is where the
   304 # Now transfer control to the script generated by autoconf. This is where the
   258 # main work is done.
   305 # main work is done.
   259 RCDIR=`mktemp -dt jdk-build-configure.tmp.XXXXXX` || exit $?
   306 RCDIR=`mktemp -dt jdk-build-configure.tmp.XXXXXX` || exit $?
   260 trap "rm -rf \"$RCDIR\"" EXIT
   307 trap "rm -rf \"$RCDIR\"" EXIT
   261 conf_logfile=./configure.log
   308 conf_logfile=./configure.log
   262 (exec 3>&1 ; ((. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) \
   309 (exec 3>&1 ; ((. $generated_script "${conf_processed_arguments[@]}" 2>&1 1>&3 ) \
   263     ; echo $? > "$RCDIR/rc" ) \
   310     ; echo $? > "$RCDIR/rc" ) \
   264     | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile
   311     | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile
   265 
   312 
   266 conf_result_code=`cat "$RCDIR/rc"`
   313 conf_result_code=`cat "$RCDIR/rc"`
   267 ###
   314 ###
   282 
   329 
   283 EOT
   330 EOT
   284 
   331 
   285     # Print additional help, e.g. a list of toolchains and JVM features.
   332     # Print additional help, e.g. a list of toolchains and JVM features.
   286     # This must be done by the autoconf script.
   333     # This must be done by the autoconf script.
   287     ( CONFIGURE_PRINT_ADDITIONAL_HELP=true . $conf_script_to_run PRINTF=printf )
   334     ( CONFIGURE_PRINT_ADDITIONAL_HELP=true . $generated_script PRINTF=printf )
   288 
   335 
   289     cat <<EOT
   336     cat <<EOT
   290 
   337 
   291 Please be aware that, when cross-compiling, the OpenJDK configure script will
   338 Please be aware that, when cross-compiling, the OpenJDK configure script will
   292 generally use 'target' where autoconf traditionally uses 'host'.
   339 generally use 'target' where autoconf traditionally uses 'host'.