X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2FCompiler.h;h=38c008f4bbe66e515d5366788b4493073cc6a382;hb=b3e29d017a77d1cd34bfde94bd7182422e6d695c;hp=7d19d686d704072739593e97acc2362b2cdf1266;hpb=c3d26755af88226a0e9bfef05b0a6fe797c677d1;p=ncmpc.git diff --git a/src/Compiler.h b/src/Compiler.h index 7d19d68..38c008f 100644 --- a/src/Compiler.h +++ b/src/Compiler.h @@ -20,10 +20,6 @@ #ifndef COMPILER_H #define COMPILER_H -#define GCC_CHECK_VERSION(major, minor) \ - (defined(__GNUC__) && \ - (__GNUC__ > (major) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))) - #define GCC_MAKE_VERSION(major, minor, patchlevel) ((major) * 10000 + (minor) * 100 + patchlevel) #ifdef __GNUC__ @@ -38,6 +34,21 @@ # define CLANG_VERSION 0 #endif +/** + * Are we building with the specified version of gcc (not clang or any + * other compiler) or newer? + */ +#define GCC_CHECK_VERSION(major, minor) \ + (!CLANG_VERSION && \ + GCC_VERSION >= GCC_MAKE_VERSION(major, minor, 0)) + +/** + * Are we building with clang (any version) or at least the specified + * gcc version? + */ +#define CLANG_OR_GCC_VERSION(major, minor) \ + (CLANG_VERSION || GCC_CHECK_VERSION(major, minor)) + /** * Are we building with gcc (not clang or any other compiler) and a * version older than the specified one? @@ -46,7 +57,7 @@ (GCC_VERSION && !CLANG_VERSION && \ GCC_VERSION < GCC_MAKE_VERSION(major, minor, 0)) -#if GCC_CHECK_VERSION(4,0) +#if CLANG_OR_GCC_VERSION(4,0) /* GCC 4.x */ @@ -106,7 +117,7 @@ #endif -#if GCC_CHECK_VERSION(4,3) +#if CLANG_OR_GCC_VERSION(4,3) #define gcc_hot __attribute__((hot)) #define gcc_cold __attribute__((cold)) @@ -118,7 +129,7 @@ #endif /* ! GCC_UNUSED >= 40300 */ -#if GCC_CHECK_VERSION(4,6) && !defined(__clang__) +#if GCC_CHECK_VERSION(4,6) #define gcc_flatten __attribute__((flatten)) #else #define gcc_flatten @@ -127,7 +138,7 @@ #ifndef __cplusplus /* plain C99 has "restrict" */ #define gcc_restrict restrict -#elif GCC_CHECK_VERSION(4,0) +#elif CLANG_OR_GCC_VERSION(4,0) /* "__restrict__" is a GCC extension for C++ */ #define gcc_restrict __restrict__ #else @@ -145,7 +156,7 @@ #define final #endif -#if defined(__clang__) || GCC_CHECK_VERSION(4,8) +#if CLANG_OR_GCC_VERSION(4,8) #define gcc_alignas(T, fallback) alignas(T) #else #define gcc_alignas(T, fallback) gcc_aligned(fallback)