compiler: don't override existing definitions.
authorRusty Russell <rusty@rustcorp.com.au>
Thu, 28 Apr 2011 03:52:07 +0000 (13:22 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 28 Apr 2011 04:26:24 +0000 (13:56 +0930)
It's common when integrating CCAN into existing projects that they define
such constants for themselves.  In an ideal world, the entire project
switches to one set of definitions, but for large projects (eg SAMBA)
that's not realistic and conflicts with the aim of making CCAN modules
easy to "drop in" to existing code.

(This is a generalization of Douglas Bagnell's patch sent in Message-ID:
<4DB8D00D.8000800@paradise.net.nz>).

ccan/compiler/compiler.h

index aa7323f5ff9cbc6805620e7aa4bce0383276508d..74e0f1835c1207454aa1fdb364d3573df31387d1 100644 (file)
@@ -2,6 +2,7 @@
 #define CCAN_COMPILER_H
 #include "config.h"
 
 #define CCAN_COMPILER_H
 #include "config.h"
 
+#ifndef COLD
 #if HAVE_ATTRIBUTE_COLD
 /**
  * COLD - a function is unlikely to be called.
 #if HAVE_ATTRIBUTE_COLD
 /**
  * COLD - a function is unlikely to be called.
@@ -19,7 +20,9 @@
 #else
 #define COLD
 #endif
 #else
 #define COLD
 #endif
+#endif
 
 
+#ifndef NORETURN
 #if HAVE_ATTRIBUTE_NORETURN
 /**
  * NORETURN - a function does not return
 #if HAVE_ATTRIBUTE_NORETURN
 /**
  * NORETURN - a function does not return
@@ -37,7 +40,9 @@
 #else
 #define NORETURN
 #endif
 #else
 #define NORETURN
 #endif
+#endif
 
 
+#ifndef PRINTF_FMT
 #if HAVE_ATTRIBUTE_PRINTF
 /**
  * PRINTF_FMT - a function takes printf-style arguments
 #if HAVE_ATTRIBUTE_PRINTF
 /**
  * PRINTF_FMT - a function takes printf-style arguments
@@ -54,7 +59,9 @@
 #else
 #define PRINTF_FMT(nfmt, narg)
 #endif
 #else
 #define PRINTF_FMT(nfmt, narg)
 #endif
+#endif
 
 
+#ifndef IDEMPOTENT
 #if HAVE_ATTRIBUTE_CONST
 /**
  * IDEMPOTENT - a function's return depends only on its argument
 #if HAVE_ATTRIBUTE_CONST
 /**
  * IDEMPOTENT - a function's return depends only on its argument
 #else
 #define IDEMPOTENT
 #endif
 #else
 #define IDEMPOTENT
 #endif
+#endif
 
 #if HAVE_ATTRIBUTE_UNUSED
 
 #if HAVE_ATTRIBUTE_UNUSED
+#ifndef UNNEEDED
 /**
  * UNNEEDED - a variable/function may not be needed
  *
 /**
  * UNNEEDED - a variable/function may not be needed
  *
@@ -86,7 +95,9 @@
  * }
  */
 #define UNNEEDED __attribute__((unused))
  * }
  */
 #define UNNEEDED __attribute__((unused))
+#endif
 
 
+#ifndef NEEDED
 #if HAVE_ATTRIBUTE_USED
 /**
  * NEEDED - a variable/function is needed
 #if HAVE_ATTRIBUTE_USED
 /**
  * NEEDED - a variable/function is needed
 /* Before used, unused functions and vars were always emitted. */
 #define NEEDED __attribute__((unused))
 #endif
 /* Before used, unused functions and vars were always emitted. */
 #define NEEDED __attribute__((unused))
 #endif
+#endif
 
 
+#ifndef UNUSED
 /**
  * UNUSED - a parameter is unused
  *
 /**
  * UNUSED - a parameter is unused
  *
  *     }
  */
 #define UNUSED __attribute__((unused))
  *     }
  */
 #define UNUSED __attribute__((unused))
+#endif
 #else
 #else
+#ifndef UNNEEDED
 #define UNNEEDED
 #define UNNEEDED
+#endif
+#ifndef NEEDED
 #define NEEDED
 #define NEEDED
+#endif
+#ifndef UNUSED
 #define UNUSED
 #endif
 #define UNUSED
 #endif
+#endif
 
 
+#ifndef IS_COMPILE_CONSTANT
 #if HAVE_BUILTIN_CONSTANT_P
 /**
  * IS_COMPILE_CONSTANT - does the compiler know the value of this expression?
 #if HAVE_BUILTIN_CONSTANT_P
 /**
  * IS_COMPILE_CONSTANT - does the compiler know the value of this expression?
 /* If we don't know, assume it's not. */
 #define IS_COMPILE_CONSTANT(expr) 0
 #endif
 /* If we don't know, assume it's not. */
 #define IS_COMPILE_CONSTANT(expr) 0
 #endif
+#endif
 
 
+#ifndef WARN_UNUSED_RESULT
 #if HAVE_WARN_UNUSED_RESULT
 /**
  * WARN_UNUSED_RESULT - warn if a function return value is unused.
 #if HAVE_WARN_UNUSED_RESULT
 /**
  * WARN_UNUSED_RESULT - warn if a function return value is unused.
 #else
 #define WARN_UNUSED_RESULT
 #endif
 #else
 #define WARN_UNUSED_RESULT
 #endif
+#endif
 #endif /* CCAN_COMPILER_H */
 #endif /* CCAN_COMPILER_H */