| 1 | dnl Fix Autoconf bugs by overriding broken internal Autoconf |
| 2 | dnl macros with backports of fixes from newer releases. |
| 3 | dnl |
| 4 | dnl The override bits of this file should be a no-op for the newest |
| 5 | dnl Autoconf version, which means they can be removed once the complete |
| 6 | dnl tree has moved to a new enough Autoconf version. |
| 7 | dnl |
| 8 | dnl The _GCC_AUTOCONF_VERSION_TEST ensures that exactly the desired |
| 9 | dnl Autoconf version is used. It should be kept for consistency. |
| 10 | |
| 11 | dnl Use ifdef/ifelse over m4_ifdef/m4_ifelse to be clean for 2.13. |
| 12 | ifdef([m4_PACKAGE_VERSION], [ |
| 13 | |
| 14 | dnl Provide m4_copy_force and m4_rename_force for old Autoconf versions. |
| 15 | |
| 16 | m4_ifndef([m4_copy_force], |
| 17 | [m4_define([m4_copy_force], |
| 18 | [m4_ifdef([$2], [m4_undefine([$2])])m4_copy($@)])]) |
| 19 | |
| 20 | m4_ifndef([m4_rename_force], |
| 21 | [m4_define([m4_rename_force], |
| 22 | [m4_ifdef([$2], [m4_undefine([$2])])m4_rename($@)])]) |
| 23 | |
| 24 | dnl AC_DEFUN a commonly used macro so this file is picked up. |
| 25 | m4_copy([AC_PREREQ], [_AC_PREREQ]) |
| 26 | AC_DEFUN([AC_PREREQ], [frob]) |
| 27 | m4_copy_force([_AC_PREREQ], [AC_PREREQ]) |
| 28 | |
| 29 | |
| 30 | dnl Ensure exactly this Autoconf version is used |
| 31 | m4_ifndef([_GCC_AUTOCONF_VERSION], |
| 32 | [m4_define([_GCC_AUTOCONF_VERSION], [2.69])]) |
| 33 | |
| 34 | dnl Test for the exact version when AC_INIT is expanded. |
| 35 | dnl This allows to update the tree in steps (for testing) |
| 36 | dnl by putting |
| 37 | dnl m4_define([_GCC_AUTOCONF_VERSION], [X.Y]) |
| 38 | dnl in configure.ac before AC_INIT, |
| 39 | dnl without rewriting this file. |
| 40 | dnl Or for updating the whole tree at once with the definition above. |
| 41 | AC_DEFUN([_GCC_AUTOCONF_VERSION_CHECK], |
| 42 | [m4_if(m4_defn([_GCC_AUTOCONF_VERSION]), |
| 43 | m4_defn([m4_PACKAGE_VERSION]), [], |
| 44 | [m4_fatal([Please use exactly Autoconf ]_GCC_AUTOCONF_VERSION[ instead of ]m4_defn([m4_PACKAGE_VERSION])[.])]) |
| 45 | ]) |
| 46 | m4_define([AC_INIT], m4_defn([AC_INIT])[ |
| 47 | _GCC_AUTOCONF_VERSION_CHECK |
| 48 | ]) |
| 49 | |
| 50 | |
| 51 | dnl Ensure we do not use a buggy M4. |
| 52 | m4_if(m4_index([..wi.d.], [.d.]), [-1], |
| 53 | [m4_fatal(m4_do([m4 with buggy strstr detected. Please install |
| 54 | GNU M4 1.4.16 or newer and set the M4 environment variable]))]) |
| 55 | |
| 56 | |
| 57 | dnl Fix 2.64 cross compile detection for AVR and RTEMS |
| 58 | dnl by not trying to compile fopen. |
| 59 | m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.64], |
| 60 | [m4_foreach([_GCC_LANG], [C, C++, Fortran, Fortran 77], |
| 61 | [m4_define([_AC_LANG_IO_PROGRAM(]_GCC_LANG[)], m4_defn([AC_LANG_PROGRAM(]_GCC_LANG[)]))])]) |
| 62 | |
| 63 | m4_version_prereq([2.66],, [ |
| 64 | dnl We need AC_CHECK_DECL which works for overloaded C++ functions. |
| 65 | |
| 66 | # _AC_CHECK_DECL_BODY |
| 67 | # ------------------- |
| 68 | # Shell function body for AC_CHECK_DECL. |
| 69 | m4_define([_AC_CHECK_DECL_BODY], |
| 70 | [ AS_LINENO_PUSH([$[]1]) |
| 71 | [as_decl_name=`echo $][2|sed 's/ *(.*//'`] |
| 72 | [as_decl_use=`echo $][2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`] |
| 73 | AC_CACHE_CHECK([whether $as_decl_name is declared], [$[]3], |
| 74 | [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]4], |
| 75 | [@%:@ifndef $[]as_decl_name |
| 76 | @%:@ifdef __cplusplus |
| 77 | (void) $[]as_decl_use; |
| 78 | @%:@else |
| 79 | (void) $[]as_decl_name; |
| 80 | @%:@endif |
| 81 | @%:@endif |
| 82 | ])], |
| 83 | [AS_VAR_SET([$[]3], [yes])], |
| 84 | [AS_VAR_SET([$[]3], [no])])]) |
| 85 | AS_LINENO_POP |
| 86 | ])# _AC_CHECK_DECL_BODY |
| 87 | |
| 88 | # _AC_CHECK_DECLS(SYMBOL, ACTION-IF_FOUND, ACTION-IF-NOT-FOUND, |
| 89 | # INCLUDES) |
| 90 | # ------------------------------------------------------------- |
| 91 | # Helper to AC_CHECK_DECLS, which generates the check for a single |
| 92 | # SYMBOL with INCLUDES, performs the AC_DEFINE, then expands |
| 93 | # ACTION-IF-FOUND or ACTION-IF-NOT-FOUND. |
| 94 | m4_define([_AC_CHECK_DECLS], |
| 95 | [AC_CHECK_DECL([$1], [ac_have_decl=1], [ac_have_decl=0], [$4])]dnl |
| 96 | [AC_DEFINE_UNQUOTED(AS_TR_CPP(m4_bpatsubst(HAVE_DECL_[$1],[ *(.*])), |
| 97 | [$ac_have_decl], |
| 98 | [Define to 1 if you have the declaration of `$1', |
| 99 | and to 0 if you don't.])]dnl |
| 100 | [m4_ifvaln([$2$3], [AS_IF([test $ac_have_decl = 1], [$2], [$3])])]) |
| 101 | |
| 102 | ]) |
| 103 | |
| 104 | dnl If flex/lex are not found, the top level configure sets LEX to |
| 105 | dnl "/path_to/missing flex". When AC_PROG_LEX tries to find the flex |
| 106 | dnl output file, it calls $LEX to do so, but the current lightweight |
| 107 | dnl "missing" won't create a file. This results in an error. |
| 108 | dnl Avoid calling the bulk of AC_PROG_LEX when $LEX is "missing". |
| 109 | AC_DEFUN_ONCE([AC_PROG_LEX], |
| 110 | [AC_CHECK_PROGS(LEX, flex lex, :) |
| 111 | case "$LEX" in |
| 112 | :|*"missing "*) ;; |
| 113 | *) _AC_PROG_LEX_YYTEXT_DECL ;; |
| 114 | esac]) |
| 115 | |
| 116 | ]) |