Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /branches/cuda/config/ax_gcc_func_attribute.m4
ViewVC logotype

Annotation of /branches/cuda/config/ax_gcc_func_attribute.m4

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5597 - (view) (download)

1 : jhr 5597 # ===========================================================================
2 :     # https://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html
3 :     # ===========================================================================
4 :     #
5 :     # SYNOPSIS
6 :     #
7 :     # AX_GCC_FUNC_ATTRIBUTE(ATTRIBUTE)
8 :     #
9 :     # DESCRIPTION
10 :     #
11 :     # This macro checks if the compiler supports one of GCC's function
12 :     # attributes; many other compilers also provide function attributes with
13 :     # the same syntax. Compiler warnings are used to detect supported
14 :     # attributes as unsupported ones are ignored by default so quieting
15 :     # warnings when using this macro will yield false positives.
16 :     #
17 :     # The ATTRIBUTE parameter holds the name of the attribute to be checked.
18 :     #
19 :     # If ATTRIBUTE is supported define HAVE_FUNC_ATTRIBUTE_<ATTRIBUTE>.
20 :     #
21 :     # The macro caches its result in the ax_cv_have_func_attribute_<attribute>
22 :     # variable.
23 :     #
24 :     # The macro currently supports the following function attributes:
25 :     #
26 :     # alias
27 :     # aligned
28 :     # alloc_size
29 :     # always_inline
30 :     # artificial
31 :     # cold
32 :     # const
33 :     # constructor
34 :     # constructor_priority for constructor attribute with priority
35 :     # deprecated
36 :     # destructor
37 :     # dllexport
38 :     # dllimport
39 :     # error
40 :     # externally_visible
41 :     # flatten
42 :     # format
43 :     # format_arg
44 :     # gnu_inline
45 :     # hot
46 :     # ifunc
47 :     # leaf
48 :     # malloc
49 :     # noclone
50 :     # noinline
51 :     # nonnull
52 :     # noreturn
53 :     # nothrow
54 :     # optimize
55 :     # pure
56 :     # unused
57 :     # used
58 :     # visibility
59 :     # warning
60 :     # warn_unused_result
61 :     # weak
62 :     # weakref
63 :     #
64 :     # Unsupported function attributes will be tested with a prototype
65 :     # returning an int and not accepting any arguments and the result of the
66 :     # check might be wrong or meaningless so use with care.
67 :     #
68 :     # LICENSE
69 :     #
70 :     # Copyright (c) 2013 Gabriele Svelto <gabriele.svelto@gmail.com>
71 :     #
72 :     # Copying and distribution of this file, with or without modification, are
73 :     # permitted in any medium without royalty provided the copyright notice
74 :     # and this notice are preserved. This file is offered as-is, without any
75 :     # warranty.
76 :    
77 :     #serial 7
78 :    
79 :     AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [
80 :     AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1])
81 :    
82 :     AC_CACHE_CHECK([for __attribute__(($1))], [ac_var], [
83 :     AC_LINK_IFELSE([AC_LANG_PROGRAM([
84 :     m4_case([$1],
85 :     [alias], [
86 :     int foo( void ) { return 0; }
87 :     int bar( void ) __attribute__(($1("foo")));
88 :     ],
89 :     [aligned], [
90 :     int foo( void ) __attribute__(($1(32)));
91 :     ],
92 :     [alloc_size], [
93 :     void *foo(int a) __attribute__(($1(1)));
94 :     ],
95 :     [always_inline], [
96 :     inline __attribute__(($1)) int foo( void ) { return 0; }
97 :     ],
98 :     [artificial], [
99 :     inline __attribute__(($1)) int foo( void ) { return 0; }
100 :     ],
101 :     [cold], [
102 :     int foo( void ) __attribute__(($1));
103 :     ],
104 :     [const], [
105 :     int foo( void ) __attribute__(($1));
106 :     ],
107 :     [constructor_priority], [
108 :     int foo( void ) __attribute__((__constructor__(65535/2)));
109 :     ],
110 :     [constructor], [
111 :     int foo( void ) __attribute__(($1));
112 :     ],
113 :     [deprecated], [
114 :     int foo( void ) __attribute__(($1("")));
115 :     ],
116 :     [destructor], [
117 :     int foo( void ) __attribute__(($1));
118 :     ],
119 :     [dllexport], [
120 :     __attribute__(($1)) int foo( void ) { return 0; }
121 :     ],
122 :     [dllimport], [
123 :     int foo( void ) __attribute__(($1));
124 :     ],
125 :     [error], [
126 :     int foo( void ) __attribute__(($1("")));
127 :     ],
128 :     [externally_visible], [
129 :     int foo( void ) __attribute__(($1));
130 :     ],
131 :     [flatten], [
132 :     int foo( void ) __attribute__(($1));
133 :     ],
134 :     [format], [
135 :     int foo(const char *p, ...) __attribute__(($1(printf, 1, 2)));
136 :     ],
137 :     [format_arg], [
138 :     char *foo(const char *p) __attribute__(($1(1)));
139 :     ],
140 :     [gnu_inline], [
141 :     inline __attribute__(($1)) int foo( void ) { return 0; }
142 :     ],
143 :     [hot], [
144 :     int foo( void ) __attribute__(($1));
145 :     ],
146 :     [ifunc], [
147 :     int my_foo( void ) { return 0; }
148 :     static int (*resolve_foo(void))(void) { return my_foo; }
149 :     int foo( void ) __attribute__(($1("resolve_foo")));
150 :     ],
151 :     [leaf], [
152 :     __attribute__(($1)) int foo( void ) { return 0; }
153 :     ],
154 :     [malloc], [
155 :     void *foo( void ) __attribute__(($1));
156 :     ],
157 :     [noclone], [
158 :     int foo( void ) __attribute__(($1));
159 :     ],
160 :     [noinline], [
161 :     __attribute__(($1)) int foo( void ) { return 0; }
162 :     ],
163 :     [nonnull], [
164 :     int foo(char *p) __attribute__(($1(1)));
165 :     ],
166 :     [noreturn], [
167 :     void foo( void ) __attribute__(($1));
168 :     ],
169 :     [nothrow], [
170 :     int foo( void ) __attribute__(($1));
171 :     ],
172 :     [optimize], [
173 :     __attribute__(($1(3))) int foo( void ) { return 0; }
174 :     ],
175 :     [pure], [
176 :     int foo( void ) __attribute__(($1));
177 :     ],
178 :     [returns_nonnull], [
179 :     void *foo( void ) __attribute__(($1));
180 :     ],
181 :     [unused], [
182 :     int foo( void ) __attribute__(($1));
183 :     ],
184 :     [used], [
185 :     int foo( void ) __attribute__(($1));
186 :     ],
187 :     [visibility], [
188 :     int foo_def( void ) __attribute__(($1("default")));
189 :     int foo_hid( void ) __attribute__(($1("hidden")));
190 :     int foo_int( void ) __attribute__(($1("internal")));
191 :     int foo_pro( void ) __attribute__(($1("protected")));
192 :     ],
193 :     [warning], [
194 :     int foo( void ) __attribute__(($1("")));
195 :     ],
196 :     [warn_unused_result], [
197 :     int foo( void ) __attribute__(($1));
198 :     ],
199 :     [weak], [
200 :     int foo( void ) __attribute__(($1));
201 :     ],
202 :     [weakref], [
203 :     static int foo( void ) { return 0; }
204 :     static int bar( void ) __attribute__(($1("foo")));
205 :     ],
206 :     [
207 :     m4_warn([syntax], [Unsupported attribute $1, the test may fail])
208 :     int foo( void ) __attribute__(($1));
209 :     ]
210 :     )], [])
211 :     ],
212 :     dnl GCC doesn't exit with an error if an unknown attribute is
213 :     dnl provided but only outputs a warning, so accept the attribute
214 :     dnl only if no warning were issued.
215 :     [AS_IF([test -s conftest.err],
216 :     [AS_VAR_SET([ac_var], [no])],
217 :     [AS_VAR_SET([ac_var], [yes])])],
218 :     [AS_VAR_SET([ac_var], [no])])
219 :     ])
220 :    
221 :     AS_IF([test yes = AS_VAR_GET([ac_var])],
222 :     [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_FUNC_ATTRIBUTE_$1), 1,
223 :     [Define to 1 if the system has the `$1' function attribute])], [])
224 :    
225 :     AS_VAR_POPDEF([ac_var])
226 :     ])
227 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0