Some compilers (older than gcc 4.5 and clang 2.9) do support __attribute__ ((deprecated)) but not __attribute__ ((deprecated("message"))). Check (clang) and know (gcc) which versions support which variants and make two definitions of define NOTMUCH_DEPRECATED macro; one with and and one without the ("message") part. __has_extension() replacement was modeled after __has_attribute() definition in compat/function-attributes.h. Thanks Justus. --- lib/notmuch.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/notmuch.h b/lib/notmuch.h index b1f5bfa..3f4621b 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -59,8 +59,22 @@ NOTMUCH_BEGIN_DECLS #define LIBNOTMUCH_MINOR_VERSION 3 #define LIBNOTMUCH_MICRO_VERSION 0 +/* clang provides this macro to test for support for language + * extensions. If it isn't defined, this provides a compatibility + * macro for other compilers. + */ +#ifndef __has_extension +#define __has_extension(x) 0 +#endif + +#if __clang__ && __has_extension(attribute_deprecated_with_message) || \ + __GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 5 #define NOTMUCH_DEPRECATED(major,minor) \ __attribute__ ((deprecated ("function deprecated as of libnotmuch " #major "." #minor))) +#else +#define NOTMUCH_DEPRECATED(major,minor) __attribute__ ((deprecated)) +#endif + #endif /* __DOXYGEN__ */ /** -- 2.4.3