[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: FYI: new macro: AC_C_RESTRICT
From: |
Jim Meyering |
Subject: |
Re: FYI: new macro: AC_C_RESTRICT |
Date: |
Sat, 12 Apr 2003 22:03:52 +0200 |
Here's a more complete patch:
2003-04-12 Jim Meyering <address@hidden>
* NEWS: Mention the new macro.
* lib/autoconf/c.m4 (AC_C_RESTRICT): New macro.
* doc/autoconf.texi (C Compiler): Describe AC_C_RESTRICT.
* tests/c.at: Test AC_C_RESTRICT.
* tests/mktests.sh (ac_exclude_list): Add exclusion for AC_C_RESTRICT.
Index: NEWS
===================================================================
RCS file: /cvsroot/autoconf/autoconf/NEWS,v
retrieving revision 1.290
diff -u -p -r1.290 NEWS
--- NEWS 28 Feb 2003 10:46:20 -0000 1.290
+++ NEWS 12 Apr 2003 19:57:11 -0000
@@ -1,5 +1,8 @@
* Major changes in Autoconf 2.57a -*- outline -*-
+* New macros
+ AC_C_RESTRICT
+
* Improve DJGPP portability
The Autoconf tools and configure behave better under DJGPP.
@@ -9,8 +12,7 @@
configure: WARNING: pi.h: present but cannot be compiled
configure: WARNING: pi.h: check for missing prerequisite headers?
configure: WARNING: pi.h: proceeding with the preprocessor's result
-
- messages.
+ messages.
* Major changes in Autoconf 2.57
Index: lib/autoconf/c.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/c.m4,v
retrieving revision 1.175
diff -u -p -r1.175 c.m4
--- lib/autoconf/c.m4 6 Mar 2003 20:35:23 -0000 1.175
+++ lib/autoconf/c.m4 12 Apr 2003 19:57:12 -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,41 @@ if test $ac_cv_c_const = no; then
[Define to empty if `const' does not conform to ANSI C.])
fi
])# AC_C_CONST
+
+
+# AC_C_RESTRICT
+# -------------
+# based on acx_restrict.m4, from the GNU Autoconf Macro Archive at:
+# http://www.gnu.org/software/ac-archive/htmldoc/acx_restrict.html
+#
+# 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,
+# define "restrict" to be that. Here are some variants:
+# - GCC supports both __restrict and __restrict__
+# - older DEC Alpha C compilers support only __restrict
+# - _Restrict is the only spelling accepted by Sun WorkShop 6 update 2 C
+# Otherwise, define "restrict" to be empty.
+AN_IDENTIFIER([restrict], [AC_C_RESTRICT])
+AC_DEFUN([AC_C_RESTRICT],
+[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__, and
+ # the less common variants.
+ for ac_kw in restrict __restrict __restrict__ _Restrict; do
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ [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
+])# AC_C_RESTRICT
# AC_C_VOLATILE
Index: doc/autoconf.texi
===================================================================
RCS file: /cvsroot/autoconf/autoconf/doc/autoconf.texi,v
retrieving revision 1.728
diff -u -p -r1.728 autoconf.texi
--- doc/autoconf.texi 8 Apr 2003 07:18:15 -0000 1.728
+++ doc/autoconf.texi 12 Apr 2003 19:57:21 -0000
@@ -5252,6 +5252,23 @@ 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 restrict
+If the C compiler recognizes the @code{restrict} keyword, don't do anything.
+If it recognizes only a variant spelling (@code{__restrict},
address@hidden, or @code{_Restrict}), 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: tests/c.at
===================================================================
RCS file: /cvsroot/autoconf/autoconf/tests/c.at,v
retrieving revision 1.2
diff -u -p -r1.2 c.at
--- tests/c.at 19 Apr 2002 19:07:49 -0000 1.2
+++ tests/c.at 12 Apr 2003 19:57:21 -0000
@@ -2,7 +2,7 @@
AT_BANNER([C low level compiling/preprocessing macros.])
-# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2000, 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
@@ -74,15 +74,16 @@ AT_CLEANUP
## C keywords. ##
## ------------ ##
-# GCC supports `const', `volatile', and `inline'.
+# GCC supports `const', `inline', `restrict', and `volatile'.
AT_CHECK_MACRO([C keywords],
[[AC_PROG_CC
AC_C_CONST
AC_C_INLINE
+AC_C_RESTRICT
AC_C_VOLATILE
-case $GCC,$ac_cv_c_const,$ac_cv_c_inline,$ac_cv_c_volatile in
+case $GCC,$ac_cv_c_const,$ac_cv_c_inline,$ac_cv_c_restrict,$ac_cv_c_volatile in
yes,*no*)
- AC_MSG_ERROR([failed to detect `const', `inline' or `volatile' support]);;
+ AC_MSG_ERROR([failed to detect `const', `inline', `restrict', or `volatile'
support]);;
esac
]])
Index: tests/mktests.sh
===================================================================
RCS file: /cvsroot/autoconf/autoconf/tests/mktests.sh,v
retrieving revision 1.29
diff -u -p -r1.29 mktests.sh
--- tests/mktests.sh 2 Sep 2002 06:44:27 -0000 1.29
+++ tests/mktests.sh 12 Apr 2003 19:57:21 -0000
@@ -1,7 +1,7 @@
#! /bin/sh
# Build some of the Autoconf test files.
-# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2000, 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
@@ -144,7 +144,7 @@ ac_exclude_list='^AC_ARG_VAR$
^(AC_TRY.*|AC_RUN_LOG)$
^AC_.*_IFELSE$
^AC_FD_CC$
-^(AC_(PROG_CC|C_CONST|C_INLINE|C_VOLATILE))$
+^(AC_(PROG_CC|C_CONST|C_INLINE|C_RESTRICT|C_VOLATILE))$
^AC_(CYGWIN|CYGWIN32|EMXOS2|MING32|EXEEXT|OBJEXT)$
^AC_PATH_XTRA$
^AC_SYS_RESTARTABLE_SYSCALLS$