Commit | Line | Data |
---|---|---|
34017a41 PB |
1 | dnl Fix Autoconf bugs by overriding broken internal Autoconf |
2 | dnl macros with backports of fixes from newer releases. | |
266df637 | 3 | dnl |
7a283e07 RW |
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. | |
266df637 | 10 | |
34017a41 PB |
11 | dnl Use ifdef/ifelse over m4_ifdef/m4_ifelse to be clean for 2.13. |
12 | ifdef([m4_PACKAGE_VERSION], [ | |
13 | ||
5bb4d8de RW |
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 | ||
34017a41 | 24 | dnl AC_DEFUN a commonly used macro so this file is picked up. |
266df637 PB |
25 | m4_copy([AC_PREREQ], [_AC_PREREQ]) |
26 | AC_DEFUN([AC_PREREQ], [frob]) | |
5bb4d8de | 27 | m4_copy_force([_AC_PREREQ], [AC_PREREQ]) |
266df637 | 28 | |
7a283e07 RW |
29 | |
30 | dnl Ensure exactly this Autoconf version is used | |
31 | m4_ifndef([_GCC_AUTOCONF_VERSION], | |
d0ac1c44 | 32 | [m4_define([_GCC_AUTOCONF_VERSION], [2.69])]) |
7a283e07 RW |
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 | ||
34a0f3cf | 50 | |
626a5a0c RW |
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 | ||
34a0f3cf RW |
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 | ||
416a7ddd RW |
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 | ]) | |
34017a41 | 103 | |
3d961d0d AM |
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 | ||
34017a41 | 116 | ]) |