Home | History | Annotate | Download | only in pulse
      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 function, variable or 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 usage of GCC's weakref attribute */
    123 #define PA_GCC_WEAKREF(x) __attribute__((weakref(#x)))
    124 #endif
    125 #endif
    126 
    127 #endif
    128