]> The Tcpdump Group git mirrors - tcpdump/blobdiff - compiler-tests.h
CI: Clean in ../libpcap only if present. [skip ci]
[tcpdump] / compiler-tests.h
index 4793b7199740917999e8990f137f112495294a10..78fca01e43ff66f1f1c39c48818d0700ca2df7aa 100644 (file)
         (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
 #endif
 
+/*
+ * Check whether this is Clang major.minor or a later release.
+ */
+
+#if !defined(__clang__)
+#define ND_IS_AT_LEAST_CLANG_VERSION(major, minor) 0
+#else
+#define ND_IS_AT_LEAST_CLANG_VERSION(major, minor) \
+       (__clang_major__ > (major) || \
+        (__clang_major__ == (major) && __clang_minor__ >= (minor)))
+#endif
+
 /*
  * Check whether this is Sun C/SunPro C/Oracle Studio major.minor
  * or a later release.
  *
  * The version number in __xlC__ has the major version in the
  * upper 8 bits and the minor version in the lower 8 bits.
+ * On AIX __xlC__ is always defined, __ibmxl__ becomes defined in XL C 16.1.
+ * On Linux since XL C 13.1.6 __xlC__ is not defined by default anymore, but
+ * __ibmxl__ is defined since at least XL C 13.1.1.
  */
 
 #if ! defined(__xlC__)
+#if ! defined(__ibmxl__)
 #define ND_IS_AT_LEAST_XL_C_VERSION(major,minor) 0
+#define ND_IS_AT_LEAST_XL_C_MODFIX(modification, fixlevel) 0
 #else
+#define ND_IS_AT_LEAST_XL_C_VERSION(major, minor) \
+       (__ibmxl_version__ > (major) || \
+        (__ibmxl_version__ == (major) && __ibmxl_release__ >= (minor)))
+#define ND_IS_AT_LEAST_XL_C_MODFIX(modification, fixlevel) \
+  (__ibmxl_modification__ > (modification) || \
+   (__ibmxl_modification__ == (modification) && \
+    __ibmxl_ptf_fix_level__ >= (fixlevel)))
+#endif /* ! __ibmxl__ */
+#else /* ! __xlC__ */
 #define ND_IS_AT_LEAST_XL_C_VERSION(major, minor) \
        (__xlC__ >= (((major) << 8) | (minor)))
+#define ND_IS_AT_LEAST_XL_C_MODFIX(modification, fixlevel) \
+  ((((modification) << 8) | (fixlevel)) >= __xlC_ver__)
 #endif
 
 /*