[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] AC_C__GENERIC: New macro.
From: |
Paul Eggert |
Subject: |
[PATCH] AC_C__GENERIC: New macro. |
Date: |
Thu, 27 Dec 2012 14:38:24 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 |
I needed this for an Emacs feature and it seemed like something
Autoconf should have and which won't break any existing usage, so
I took the liberty of pushing it.
* NEWS, doc/autoconf.texi (C Compiler): Document it.
* lib/autoconf/c.m4 (AC_C__GENERIC): Implement it.
---
NEWS | 2 ++
doc/autoconf.texi | 7 +++++++
lib/autoconf/c.m4 | 27 +++++++++++++++++++++++++++
3 files changed, 36 insertions(+)
diff --git a/NEWS b/NEWS
index 185ca26..a4cd3a1 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 aa948a9..bcf8f86 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
address@hidden AC_C__GENERIC
address@hidden
address@hidden _Generic
+If the C compiler supports C11-style generic selection using the
address@hidden keyword, define @code{HAVE_C__GENERIC}.
address@hidden defmac
+
@defmac AC_C_RESTRICT
@acindex{C_RESTRICT}
@cvindex restrict
diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4
index e17df1e..edc663b 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.
--
1.7.11.7
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] AC_C__GENERIC: New macro.,
Paul Eggert <=