/* * 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