From: Paul Eggert Date: Thu, 27 Dec 2012 22:34:07 +0000 (-0800) Subject: AC_C__GENERIC: New macro. X-Git-Tag: v2.69b~178 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca8b864f431faeae3caeac671e339c75c775e5a6;p=thirdparty%2Fautoconf.git AC_C__GENERIC: New macro. * NEWS, doc/autoconf.texi (C Compiler): Document it. * lib/autoconf/c.m4 (AC_C__GENERIC): Implement it. --- diff --git a/NEWS b/NEWS index 185ca263..a4cd3a1c 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,8 @@ GNU Autoconf NEWS - User visible changes. ** Macros +- New macro AC_C__GENERIC. + - AC_CONFIG_MACRO_DIRS New macro, used to declare multiple directories when looking for local M4 macros. This macro overcomes some of the shortfalls in the diff --git a/doc/autoconf.texi b/doc/autoconf.texi index aa948a90..bcf8f861 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -7434,6 +7434,13 @@ This macro is obsolescent, as current C compilers support @code{const}. New programs need not use this macro. @end defmac +@defmac AC_C__GENERIC +@acindex{C__GENERIC} +@cvindex _Generic +If the C compiler supports C11-style generic selection using the +@code{_Generic} keyword, define @code{HAVE_C__GENERIC}. +@end defmac + @defmac AC_C_RESTRICT @acindex{C_RESTRICT} @cvindex restrict diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4 index e17df1e8..edc663b4 100644 --- a/lib/autoconf/c.m4 +++ b/lib/autoconf/c.m4 @@ -1690,6 +1690,33 @@ dnl default behavior for universal builds. ])# AC_C_BIGENDIAN +# AC_C__GENERIC +# ------------- +# Define HAVE_C__GENERIC if _Generic works, a la C11. +AN_IDENTIFIER([_Generic], [AC_C__GENERIC]) +AC_DEFUN([AC_C__GENERIC], +[AC_CACHE_CHECK([for _Generic], ac_cv_c__Generic, +[AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[int + main (int argc, char **argv) + { + int a = _Generic (argc, int: argc = 1); + int *b = &_Generic (argc, default: argc); + char ***c = _Generic (argv, int: argc, default: argv ? &argv : 0); + _Generic (1 ? 0 : b, int: a, default: b) = &argc; + _Generic (a = 1, default: a) = 3; + return a + !b + !c; + } + ]])], + [ac_cv_c__Generic=yes], + [ac_cv_c__Generic=no])]) +if test $ac_cv_c__Generic = yes; then + AC_DEFINE([HAVE_C__GENERIC], 1, + [Define to 1 if C11-style _Generic works.]) +fi +])# AC_C__GENERIC + # AC_C_INLINE # ----------- # Do nothing if the compiler accepts the inline keyword.