Git init
[framework/multimedia/pulseaudio.git] / src / pulse / gccmacro.h
1 #ifndef foopulsegccmacrohfoo
2 #define foopulsegccmacrohfoo
3
4 /***
5   This file is part of PulseAudio.
6
7   Copyright 2004-2006 Lennart Poettering
8
9   PulseAudio is free software; you can redistribute it and/or modify
10   it under the terms of the GNU Lesser General Public License as published
11   by the Free Software Foundation; either version 2.1 of the License,
12   or (at your option) any later version.
13
14   PulseAudio is distributed in the hope that it will be useful, but
15   WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17   General Public License for more details.
18
19   You should have received a copy of the GNU Lesser General Public License
20   along with PulseAudio; if not, write to the Free Software
21   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22   USA.
23 ***/
24
25 /** \file
26  * GCC attribute macros */
27
28 #ifdef __GNUC__
29 #define PA_GCC_PRINTF_ATTR(a,b) __attribute__ ((format (printf, a, b)))
30 #else
31 /** If we're in GNU C, use some magic for detecting invalid format strings */
32 #define PA_GCC_PRINTF_ATTR(a,b)
33 #endif
34
35 #if defined(__GNUC__) && (__GNUC__ >= 4)
36 #define PA_GCC_SENTINEL __attribute__ ((sentinel))
37 #else
38 /** Macro for usage of GCC's sentinel compilation warnings */
39 #define PA_GCC_SENTINEL
40 #endif
41
42 #ifdef __GNUC__
43 #define PA_GCC_NORETURN __attribute__((noreturn))
44 #else
45 /** Macro for no-return functions */
46 #define PA_GCC_NORETURN
47 #endif
48
49 #ifdef __GNUC__
50 #define PA_GCC_UNUSED __attribute__ ((unused))
51 #else
52 /** Macro for not used parameter */
53 #define PA_GCC_UNUSED
54 #endif
55
56 #ifdef __GNUC__
57 #define PA_GCC_DESTRUCTOR __attribute__ ((destructor))
58 #else
59 /** Call this function when process terminates */
60 #define PA_GCC_DESTRUCTOR
61 #endif
62
63 #ifndef PA_GCC_PURE
64 #ifdef __GNUC__
65 #define PA_GCC_PURE __attribute__ ((pure))
66 #else
67 /** This function's return value depends only the arguments list and global state **/
68 #define PA_GCC_PURE
69 #endif
70 #endif
71
72 #ifndef PA_GCC_CONST
73 #ifdef __GNUC__
74 #define PA_GCC_CONST __attribute__ ((const))
75 #else
76 /** This function's return value depends only the arguments list (stricter version of PA_GCC_PURE) **/
77 #define PA_GCC_CONST
78 #endif
79 #endif
80
81 #ifndef PA_GCC_DEPRECATED
82 #ifdef __GNUC__
83 #define PA_GCC_DEPRECATED __attribute__ ((deprecated))
84 #else
85 /** This function is deprecated **/
86 #define PA_GCC_DEPRECATED
87 #endif
88 #endif
89
90 #ifndef PA_GCC_PACKED
91 #ifdef __GNUC__
92 #define PA_GCC_PACKED __attribute__ ((packed))
93 #else
94 /** Structure shall be packed in memory **/
95 #define PA_GCC_PACKED
96 #endif
97 #endif
98
99 #ifndef PA_GCC_ALLOC_SIZE
100 #if defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
101 #define PA_GCC_ALLOC_SIZE(x) __attribute__ ((__alloc_size__(x)))
102 #define PA_GCC_ALLOC_SIZE2(x,y) __attribute__ ((__alloc_size__(x,y)))
103 #else
104 /** Macro for usage of GCC's alloc_size attribute */
105 #define PA_GCC_ALLOC_SIZE(x)
106 /** Macro for usage of GCC's alloc_size attribute */
107 #define PA_GCC_ALLOC_SIZE2(x,y)
108 #endif
109 #endif
110
111 #ifndef PA_GCC_MALLOC
112 #ifdef __GNUC__
113 #define PA_GCC_MALLOC __attribute__ ((malloc))
114 #else
115 /** Macro for usage of GCC's malloc attribute */
116 #define PA_GCC_MALLOC
117 #endif
118 #endif
119
120 #ifndef PA_GCC_WEAKREF
121 #if defined(__GNUC__) && defined(__ELF__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 4))
122 /** Macro for usgae of GCC's weakref attribute */
123 #define PA_GCC_WEAKREF(x) __attribute__((weakref(#x)));
124 #endif
125 #endif
126
127 #endif