1 |
773 |
jeremybenn |
dnl CACHED_TRY_COMPILE(<description>,<cachevar>,<include>,<program>,<ifyes>,<ifno>)
|
2 |
|
|
AC_DEFUN([CACHED_TRY_COMPILE],[
|
3 |
|
|
AC_MSG_CHECKING($1)
|
4 |
|
|
AC_CACHE_VAL($2,[
|
5 |
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$3]], [[$4]])],[$2=yes],[$2=no])
|
6 |
|
|
])
|
7 |
|
|
if test "x$$2" = xyes; then
|
8 |
|
|
true
|
9 |
|
|
$5
|
10 |
|
|
else
|
11 |
|
|
true
|
12 |
|
|
$6
|
13 |
|
|
fi
|
14 |
|
|
])
|
15 |
|
|
|
16 |
|
|
dnl GCC_ATTRIBUTE(<short-label>,<cachevar>,<func-params>,<attribute>,<HAVE>,<desc>,[<true-cmds>],[<false-cmds>])
|
17 |
|
|
AC_DEFUN([GCC_ATTRIBUTE],[
|
18 |
|
|
CACHED_TRY_COMPILE(__attribute__(($1)),gcc_cv_c_gcc_attribute_$2,,
|
19 |
|
|
[extern int testfunction($3) __attribute__(($4))],
|
20 |
|
|
AC_MSG_RESULT(yes)
|
21 |
|
|
AC_DEFINE(HAVE_GNUC25_$5,,$6)
|
22 |
|
|
$7,
|
23 |
|
|
AC_MSG_RESULT(no)
|
24 |
|
|
$8)
|
25 |
|
|
])
|
26 |
|
|
|
27 |
|
|
|
28 |
|
|
AC_DEFUN([GCC_ATTRIBUTE_SUPPORTED],[
|
29 |
|
|
GCC_ATTRIBUTE([,,],supported,[int x],[,,],ATTRIB,[Define if function attributes a la GCC 2.5 and higher are available.])
|
30 |
|
|
AH_BOTTOM([/* GNU C attributes. */
|
31 |
|
|
#ifndef FUNCATTR
|
32 |
|
|
#ifdef HAVE_GNUC25_ATTRIB
|
33 |
|
|
#define FUNCATTR(x) __attribute__(x)
|
34 |
|
|
#else
|
35 |
|
|
#define FUNCATTR(x)
|
36 |
|
|
#endif
|
37 |
|
|
#endif])
|
38 |
|
|
|
39 |
|
|
])
|
40 |
|
|
AC_DEFUN([GCC_ATTRIBUTE_CONST],[
|
41 |
|
|
AC_REQUIRE([GCC_ATTRIBUTE_SUPPORTED])
|
42 |
|
|
GCC_ATTRIBUTE(const,const,[int x],const,CONST,[Define if constant functions a la GCC 2.5 and higher are available.])
|
43 |
|
|
AH_BOTTOM([/* GNU C constant functions, or null. */
|
44 |
|
|
#ifndef ATTRCONST
|
45 |
|
|
#ifdef HAVE_GNUC25_CONST
|
46 |
|
|
#define ATTRCONST const
|
47 |
|
|
#else
|
48 |
|
|
#define ATTRCONST
|
49 |
|
|
#endif
|
50 |
|
|
#endif
|
51 |
|
|
#ifndef CONSTANT
|
52 |
|
|
#define CONSTANT FUNCATTR((ATTRCONST))
|
53 |
|
|
#endif])
|
54 |
|
|
])
|
55 |
|
|
AC_DEFUN([GCC_ATTRIBUTE_NORETURN],[
|
56 |
|
|
AC_REQUIRE([GCC_ATTRIBUTE_SUPPORTED])
|
57 |
|
|
GCC_ATTRIBUTE(noreturn,noreturn,[int x],noreturn,NORETURN,[Define if nonreturning functions a la GCC 2.5 and higher are available.])
|
58 |
|
|
AH_BOTTOM([/* GNU C nonreturning functions, or null. */
|
59 |
|
|
#ifndef ATTRNORETURN
|
60 |
|
|
#ifdef HAVE_GNUC25_NORETURN
|
61 |
|
|
#define ATTRNORETURN noreturn
|
62 |
|
|
#else /* ! HAVE_GNUC25_NORETURN */
|
63 |
|
|
#define ATTRNORETURN
|
64 |
|
|
#endif /* HAVE_GNUC25_NORETURN */
|
65 |
|
|
#endif /* ATTRNORETURN */
|
66 |
|
|
#ifndef NONRETURNING
|
67 |
|
|
#define NONRETURNING FUNCATTR((ATTRNORETURN))
|
68 |
|
|
#endif /* NONRETURNING */])
|
69 |
|
|
])
|
70 |
|
|
AC_DEFUN([GCC_ATTRIBUTE_UNUSED],[
|
71 |
|
|
AC_REQUIRE([GCC_ATTRIBUTE_SUPPORTED])
|
72 |
|
|
GCC_ATTRIBUTE(unused,unused,[int x],unused,UNUSED,[Define if unused variables la GCC 2.5 and higher are available.])
|
73 |
|
|
AH_BOTTOM([/* GNU C unused functions, or null. */
|
74 |
|
|
#ifndef ATTRUNUSED
|
75 |
|
|
#ifdef HAVE_GNUC25_UNUSED
|
76 |
|
|
#define ATTRUNUSED unused
|
77 |
|
|
#else
|
78 |
|
|
#define ATTRUNUSED
|
79 |
|
|
#endif
|
80 |
|
|
#endif
|
81 |
|
|
#ifndef UNUSED
|
82 |
|
|
#define UNUSED FUNCATTR((ATTRUNUSED))
|
83 |
|
|
#endif])
|
84 |
|
|
])
|
85 |
|
|
AC_DEFUN([GCC_ATTRIBUTE_FORMAT],[
|
86 |
|
|
AC_REQUIRE([GCC_ATTRIBUTE_SUPPORTED])
|
87 |
|
|
GCC_ATTRIBUTE(format...,format,[char *y, ...],[format(printf,1,2)],PRINTFFORMAT,[Define if printf-format argument lists a la GCC are available.])
|
88 |
|
|
AH_BOTTOM([/* GNU C printf formats, or null. */
|
89 |
|
|
#ifndef ATTRPRINTF
|
90 |
|
|
#ifdef HAVE_GNUC25_PRINTFFORMAT
|
91 |
|
|
#define ATTRPRINTF(si,tc) format(printf,si,tc)
|
92 |
|
|
#else
|
93 |
|
|
#define ATTRPRINTF(si,tc)
|
94 |
|
|
#endif
|
95 |
|
|
#endif
|
96 |
|
|
#ifndef PRINTFFORMAT
|
97 |
|
|
#define PRINTFFORMAT(si,tc) FUNCATTR((ATTRPRINTF(si,tc)))
|
98 |
|
|
#endif
|
99 |
|
|
|
100 |
|
|
#ifndef NONRETURNPRINTFFORMAT
|
101 |
|
|
#define NONRETURNPRINTFFORMAT(si,tc) FUNCATTR((ATTRPRINTF(si,tc),ATTRNORETURN))
|
102 |
|
|
#endif])
|
103 |
|
|
])
|
104 |
|
|
AC_DEFUN([GCC_ATTRIBUTE_ALWAYS_INLINE],[
|
105 |
|
|
AC_REQUIRE([GCC_ATTRIBUTE_SUPPORTED])
|
106 |
|
|
GCC_ATTRIBUTE(always_inline,always_inline,[int x],always_inline,ALWAYS_INLINE,[Define if unconditional inlining of functions a la GCC 3.1 and higher are available.])
|
107 |
|
|
AH_BOTTOM([/* GNU C constant functions, or null. */
|
108 |
|
|
#ifndef ATTRALWAYS_INLINE
|
109 |
|
|
#ifdef HAVE_GNUC25_ALWAYS_INLINE
|
110 |
|
|
#define ATTRALWAYS_INLINE always_inline
|
111 |
|
|
#else
|
112 |
|
|
#define ATTRALWAYS_INLINE
|
113 |
|
|
#endif
|
114 |
|
|
#endif
|
115 |
|
|
#ifndef ALWAYS_INLINE
|
116 |
|
|
#define ALWAYS_INLINE FUNCATTR((ATTRALWAYS_INLINE))
|
117 |
|
|
#endif])
|
118 |
|
|
])
|
119 |
|
|
AC_DEFUN([GCC_ATTRIBUTE_PACKED],[
|
120 |
|
|
AC_REQUIRE([GCC_ATTRIBUTE_SUPPORTED])
|
121 |
|
|
GCC_ATTRIBUTE(packed,packed,[int x],packed,PACKED,[Define if packing of struct members a la GCC 2.5 and higher is available.])
|
122 |
|
|
AH_BOTTOM([/* GNU C constant functions, or null. */
|
123 |
|
|
#ifndef ATTRPACKED
|
124 |
|
|
#ifdef HAVE_GNUC25_PACKED
|
125 |
|
|
#define ATTRPACKED packed
|
126 |
|
|
#else
|
127 |
|
|
#define ATTRPACKED
|
128 |
|
|
#endif
|
129 |
|
|
#endif
|
130 |
|
|
#ifndef PACKED
|
131 |
|
|
#define PACKED FUNCATTR((ATTRPACKED))
|
132 |
|
|
#endif])
|
133 |
|
|
])
|