[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

new macro: AC_C_RESTRICT

From: Jim Meyering
Subject: new macro: AC_C_RESTRICT
Date: Mon, 31 Mar 2003 13:46:58 +0200

I need a macro like this so that uses of `restrict' don't cause problems.
Currently, in coreutils at least, `restrict' is used only in lib/regex.h,
and using coreutils/m4/restrict.m4 has solved some real portability problems.

But this test is generic enough that it should be part of autoconf.

I don't like the name very much, since it implies C-only support,
while the macro is useful/necessary also with C++ compilers.


        * lib/autoconf/c.m4 (AC_C_RESTRICT): New macro.
        * doc/autoconf.texi (C Compiler): Describe AC_C_RESTRICT.

Index: doc/autoconf.texi
RCS file: /cvsroot/autoconf/autoconf/doc/autoconf.texi,v
retrieving revision 1.726
diff -u -p -u -p -r1.726 autoconf.texi
--- doc/autoconf.texi   28 Mar 2003 14:51:31 -0000      1.726
+++ doc/autoconf.texi   31 Mar 2003 11:11:28 -0000
@@ -5122,6 +5122,22 @@ installers who run into trouble in this 
 like GCC to compile their C code.
 @end defmac
address@hidden AC_C_RESTRICT
address@hidden C_RESTRICT
address@hidden volatile
+If the C compiler recognizes the @code{restrict} keyword, don't do anything.
+If it recognizes only the @code{__restrict__} keyword, then define
address@hidden to that.
+Otherwise, define @code{restrict} to be empty.
+Thus, programs may simply use @code{restrict} as if every C compiler
+supported it; for those that do not, the @file{Makefile}
+or configuration header defines it away.
+Although support in C++ for the @code{restrict} keyword is not
+required, several C++ compilers do accept the keyword.
+This macro works for them, too.
address@hidden defmac
 @defmac AC_C_VOLATILE
 @acindex C_VOLATILE
 @cvindex volatile
Index: lib/autoconf/c.m4
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/c.m4,v
retrieving revision 1.175
diff -u -p -u -p -r1.175 c.m4
--- lib/autoconf/c.m4   6 Mar 2003 20:35:23 -0000       1.175
+++ lib/autoconf/c.m4   31 Mar 2003 11:11:29 -0000
@@ -1,6 +1,6 @@
 # This file is part of Autoconf.                       -*- Autoconf -*-
 # Programming languages support.
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -1075,6 +1075,36 @@ if test $ac_cv_c_const = no; then
             [Define to empty if `const' does not conform to ANSI C.])
+# -------------
+# based on acx_restrict.m4, from the GNU Autoconf Macro Archive at:
+# Determine whether the C/C++ compiler supports the "restrict" keyword
+# introduced in ANSI C99, or an equivalent.  Do nothing if the compiler
+# accepts it.  Otherwise, if the compiler supports an equivalent (like
+# gcc's __restrict__) define "restrict" to be that.  Otherwise, define
+# "restrict" to be empty.
+[AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict,
+  [ac_cv_c_restrict=no
+   # Try the official restrict keyword, then gcc's __restrict__.
+   for ac_kw in restrict __restrict__; do
+      [float * $ac_kw x;])],
+      [ac_cv_c_restrict=$ac_kw; break])
+   done
+  ])
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) AC_DEFINE(restrict,,
+        [Define to equivalent of C99 restrict keyword, or to nothing if this
+        is not supported.  Do not define if restrict is supported directly.]) 
+   *)  AC_DEFINE_UNQUOTED(restrict, $ac_cv_c_restrict) ;;
+ esac

reply via email to

[Prev in Thread] Current Thread [Next in Thread]