]> granicus.if.org Git - check/commitdiff
Improve macro GCC_VERSION_AT_LEAST(major, minor)
authorMikko Johannes Koivunalho <mikko.koivunalho@iki.fi>
Fri, 30 Aug 2019 13:56:23 +0000 (15:56 +0200)
committerMikko Johannes Koivunalho <mikko.koivunalho@iki.fi>
Fri, 30 Aug 2019 13:56:23 +0000 (15:56 +0200)
Use also the patch number. Arguments: major, minor, pathch.

Issue #214 https://github.com/libcheck/check/issues/214

Signed-off-by: Mikko Johannes Koivunalho <mikko.koivunalho@iki.fi>
lib/libcompat.h
src/check.h.in

index 9ec6eb817053df41b9c1a639fbc74dcfdfd0b0ca..ec73e9aa81a9714a25d3127b953f2f4da5b14244 100644 (file)
 #include <config.h>
 #endif
 
-#if defined(__GNUC__) && defined(__GNUC_MINOR__)
-#define GCC_VERSION_AT_LEAST(major, minor) \
+/**
+ * __GNUC_PATCHLEVEL__ is new to GCC 3.0;
+ * it is also present in the widely-used development snapshots leading up to 3.0
+ * (which identify themselves as GCC 2.96 or 2.97, depending on which snapshot you have).
+ *
+ * https://stackoverflow.com/questions/1936719/what-are-the-gcc-predefined-macros-for-the-compilers-version-number/1936745#1936745
+ */
+
+#if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
+#define GCC_VERSION_AT_LEAST(major, minor, patch) \
+((__GNUC__ > (major)) || \
+ (__GNUC__ == (major) && __GNUC_MINOR__ > (minor)) || \
+ (__GNUC__ == (major) && __GNUC_MINOR__ == (minor) && __GNUC_PATCHLEVEL__ >= (patch)) )
+#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
+#define GCC_VERSION_AT_LEAST(major, minor, patch) \
 ((__GNUC__ > (major)) || \
  (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
 #else
-#define GCC_VERSION_AT_LEAST(major, minor) 0
+#define GCC_VERSION_AT_LEAST(major, minor, patch) 0
 #endif
 
-#if GCC_VERSION_AT_LEAST(2,95)
+#if GCC_VERSION_AT_LEAST(2,95,3)
 #define CK_ATTRIBUTE_UNUSED __attribute__ ((unused))
 #else
 #define CK_ATTRIBUTE_UNUSED
 #endif /* GCC 2.95 */
 
-#if GCC_VERSION_AT_LEAST(2,5)
+#if GCC_VERSION_AT_LEAST(2,5,0)
 #define CK_ATTRIBUTE_NORETURN __attribute__ ((noreturn))
 #else
 #define CK_ATTRIBUTE_NORETURN
index 3f41f84313d89619bbc3607a80bf7d5af73b10d4..3e12bd08db9c3778a384f3b66407aefae243a7e1 100644 (file)
 CK_CPPSTART
 #endif
 
-#if defined(__GNUC__) && defined(__GNUC_MINOR__)
-#define GCC_VERSION_AT_LEAST(major, minor) \
+/**
+ * __GNUC_PATCHLEVEL__ is new to GCC 3.0;
+ * it is also present in the widely-used development snapshots leading up to 3.0
+ * (which identify themselves as GCC 2.96 or 2.97, depending on which snapshot you have).
+ *
+ * https://stackoverflow.com/questions/1936719/what-are-the-gcc-predefined-macros-for-the-compilers-version-number/1936745#1936745
+ */
+
+#if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
+#define GCC_VERSION_AT_LEAST(major, minor, patch) \
+((__GNUC__ > (major)) || \
+ (__GNUC__ == (major) && __GNUC_MINOR__ > (minor)) || \
+ (__GNUC__ == (major) && __GNUC_MINOR__ == (minor) && __GNUC_PATCHLEVEL__ >= (patch)) )
+#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
+#define GCC_VERSION_AT_LEAST(major, minor, patch) \
 ((__GNUC__ > (major)) || \
  (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
 #else
-#define GCC_VERSION_AT_LEAST(major, minor) 0
+#define GCC_VERSION_AT_LEAST(major, minor, patch) 0
 #endif
 
-#if GCC_VERSION_AT_LEAST(2,95)
+#if GCC_VERSION_AT_LEAST(2,95,3)
 #define CK_ATTRIBUTE_UNUSED __attribute__ ((unused))
 #else
 #define CK_ATTRIBUTE_UNUSED
 #endif /* GCC 2.95 */
 
-#if GCC_VERSION_AT_LEAST(2,5)
+#if GCC_VERSION_AT_LEAST(2,5,0)
 #define CK_ATTRIBUTE_NORETURN __attribute__ ((noreturn))
 #else
 #define CK_ATTRIBUTE_NORETURN