diff options
Diffstat (limited to 'src/gcc.h')
-rw-r--r-- | src/gcc.h | 49 |
1 files changed, 29 insertions, 20 deletions
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2010 The Music Player Daemon Project + * Copyright (C) 2003-2011 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -20,35 +20,44 @@ #ifndef MPD_GCC_H #define MPD_GCC_H +#define GCC_CHECK_VERSION(major, minor) \ + (defined(__GNUC__) && \ + (__GNUC__ > (major) || \ + (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))) + /* this allows us to take advantage of special gcc features while still * allowing other compilers to compile: * * example taken from: http://rlove.org/log/2005102601 */ -#if defined(__GNUC__) && (__GNUC__ >= 3) -# define mpd_must_check __attribute__ ((warn_unused_result)) -# define mpd_packed __attribute__ ((packed)) +#if GCC_CHECK_VERSION(3,0) +# define gcc_must_check __attribute__ ((warn_unused_result)) +# define gcc_packed __attribute__ ((packed)) /* these are very useful for type checking */ -# define mpd_printf __attribute__ ((format(printf,1,2))) -# define mpd_fprintf __attribute__ ((format(printf,2,3))) -# define mpd_fprintf_ __attribute__ ((format(printf,3,4))) -# define mpd_fprintf__ __attribute__ ((format(printf,4,5))) -# define mpd_scanf __attribute__ ((format(scanf,1,2))) -# define mpd_used __attribute__ ((used)) +# define gcc_printf __attribute__ ((format(printf,1,2))) +# define gcc_fprintf __attribute__ ((format(printf,2,3))) +# define gcc_fprintf_ __attribute__ ((format(printf,3,4))) +# define gcc_fprintf__ __attribute__ ((format(printf,4,5))) +# define gcc_scanf __attribute__ ((format(scanf,1,2))) +# define gcc_used __attribute__ ((used)) /* # define inline inline __attribute__ ((always_inline)) */ -# define mpd_noinline __attribute__ ((noinline)) +# define gcc_noinline __attribute__ ((noinline)) +# define gcc_nonnull(...) __attribute__((nonnull(__VA_ARGS__))) +# define gcc_nonnull_all __attribute__((nonnull)) #else -# define mpd_must_check -# define mpd_packed -# define mpd_printf -# define mpd_fprintf -# define mpd_fprintf_ -# define mpd_fprintf__ -# define mpd_scanf -# define mpd_used +# define gcc_must_check +# define gcc_packed +# define gcc_printf +# define gcc_fprintf +# define gcc_fprintf_ +# define gcc_fprintf__ +# define gcc_scanf +# define gcc_used /* # define inline */ -# define mpd_noinline +# define gcc_noinline +# define gcc_nonnull(...) +# define gcc_nonnull_all #endif #endif /* MPD_GCC_H */ |