1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
/*
* Define a macro for compiler attributes. Use either gcc
* syntax if __GNUC__ is defined, or try to look for the
* modern standard [[x]] attributes.
*
* Unfortunately [[x]] doesn't always work when it comes to
* GNUC-specific attributes, and some compilers support GCC
* syntax without __attribute__ just to be confusing.
* Therefore, this also needs an autoconf module to test
* the validity.
*
* Use #ifdef and not defined() here; some compilers do the wrong
* thing in the latter case.
*/
#ifndef ATTRIBUTE
# define MODERN_ATTRIBUTE(x) [[x]]
# ifndef __GNUC__
# ifdef __cplusplus
# ifdef __has_cpp_attribute
# define ATTRIBUTE(x) MODERN_ATTRIBUTE(x)
# endif
# endif
# ifndef ATTRIBUTE
# ifdef __has_c_attribute
# define ATTRIBUTE(x) MODERN_ATTRIBUTE(x)
# endif
# endif
# ifndef ATTRIBUTE
# ifdef __has_attribute
# define ATTRIBUTE(x) MODERN_ATTRIBUTE(x)
# endif
# endif
# endif
# ifndef ATTRIBUTE
# define ATTRIBUTE(x) __attribute__((x))
# endif
#endif
|