OSDN Git Service

libjava/classpath/
[pf3gnuchains/gcc-fork.git] / libjava / classpath / m4 / gcc_attribute.m4
1 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 ])