utils: remove Xfuncproto.h and use our own macros
[platform/upstream/libxkbcommon.git] / src / utils.h
index 808086c..438660d 100644 (file)
@@ -33,8 +33,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include <X11/Xfuncproto.h>
-
 /*
  * We sometimes malloc strings and then expose them as const char*'s. This
  * macro is used when we free these strings in order to avoid -Wcast-qual
 #define uStringText(s)         ((s) == NULL ? "<NullString>" : (s))
 #define uStrCasePrefix(s1, s2) (strncasecmp((s1), (s2), strlen(s1)) == 0)
 
-/***====================================================================***/
+/* Compiler Attributes */
+
+#if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__CYGWIN__)
+# define XKB_EXPORT      __attribute__((visibility("default")))
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+# define XKB_EXPORT      __global
+#else /* not gcc >= 4 and not Sun Studio >= 8 */
+# define XKB_EXPORT
+#endif
+
+#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 203)
+# define ATTR_PRINTF(x,y) __attribute__((__format__(__printf__, x, y)))
+#else /* not gcc >= 2.3 */
+# define ATTR_PRINTF(x,y)
+#endif
+
+#if (defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 205)) \
+    || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+# define ATTR_NORETURN __attribute__((__noreturn__))
+#else
+# define ATTR_NORETURN
+#endif /* GNUC  */
 
 extern bool
 uSetErrorFile(char *name);
 
 #define INFO uInformation
 
-extern _X_ATTRIBUTE_PRINTF(1, 2) void
+ATTR_PRINTF(1, 2) void
 uInformation(const char *s, ...);
 
 #define ACTION uAction
 
-extern _X_ATTRIBUTE_PRINTF(1, 2) void
+ATTR_PRINTF(1, 2) void
 uAction(const char *s, ...);
 
 #define WARN uWarning
 
-extern _X_ATTRIBUTE_PRINTF(1, 2) void
+ATTR_PRINTF(1, 2) void
 uWarning(const char *s, ...);
 
 #define ERROR uError
 
-extern _X_ATTRIBUTE_PRINTF(1, 2) void
+ATTR_PRINTF(1, 2) void
 uError(const char *s, ...);
 
 #define FATAL uFatalError
 
-extern _X_ATTRIBUTE_PRINTF(1, 2) _X_NORETURN void
+ATTR_PRINTF(1, 2) ATTR_NORETURN void
 uFatalError(const char *s, ...);
 
 /* WSGO stands for "Weird Stuff Going On" (wtf???) */
 #define WSGO uInternalError
 
-extern _X_ATTRIBUTE_PRINTF(1, 2) void
+ATTR_PRINTF(1, 2) void
 uInternalError(const char *s, ...);
 
 #endif /* UTILS_H */