struct / union in initializer, RFE #901.
[sdcc.git] / sdcc / support / cpp / config / override.m4
blobd3e815bb1b40c91f23d9fed7710573f9f2623cb6
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.
11 dnl Use ifdef/ifelse over m4_ifdef/m4_ifelse to be clean for 2.13.
12 ifdef([m4_PACKAGE_VERSION], [
14 dnl Provide m4_copy_force and m4_rename_force for old Autoconf versions.
16 m4_ifndef([m4_copy_force],
17 [m4_define([m4_copy_force],
18 [m4_ifdef([$2], [m4_undefine([$2])])m4_copy($@)])])
20 m4_ifndef([m4_rename_force],
21 [m4_define([m4_rename_force],
22 [m4_ifdef([$2], [m4_undefine([$2])])m4_rename($@)])])
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])
30 dnl Ensure exactly this Autoconf version is used
31 m4_ifndef([_GCC_AUTOCONF_VERSION],
32   [m4_define([_GCC_AUTOCONF_VERSION], [2.69])])
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])[.])])
46 m4_define([AC_INIT], m4_defn([AC_INIT])[
47 _GCC_AUTOCONF_VERSION_CHECK
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]))])
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[)]))])])
63 m4_version_prereq([2.66],, [
64 dnl We need AC_CHECK_DECL which works for overloaded C++ functions.
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
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])])])
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])