/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include "gras_config.h"
+
#ifndef XBT_MISC_H
#define XBT_MISC_H
/* Attributes are only in recent versions of GCC */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4))
# define _XBT_GNUC_PRINTF( format_idx, arg_idx ) \
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
# define _XBT_GNUC_SCANF( format_idx, arg_idx ) \
__attribute__((__format_arg__ (arg_idx)))
# define _XBT_GNUC_NORETURN __attribute__((__noreturn__))
# define _XBT_GNUC_UNUSED __attribute__((unused))
+# define _XBT_GNUC_CONSTRUCTOR __attribute__((__constructor__))
+# define _XBT_GNUC_DESTRUCTOR __attribute__((__destructor__))
+# undef _XBT_NEED_INIT_PRAGMA
#else /* !__GNUC__ */
# define _XBT_GNUC_PRINTF( format_idx, arg_idx )
# define _XBT_GNUC_FORMAT( arg_idx )
# define _XBT_GNUC_NORETURN
# define _XBT_GNUC_UNUSED
+# define _XBT_GNUC_CONSTRUCTOR
+# define _XBT_GNUC_DESTRUCTOR
+# define _XBT_NEED_INIT_PRAGMA 1
#endif /* !__GNUC__ */
# else
# define XBT_INLINE
# endif
-# else
-# define XBT_INLINE inline
+#else
+# if defined (__VISUALC__)
+# define XBT_INLINE __inline
+# else
+# define XBT_INLINE inline
+# endif
#endif
/* improvable on gcc (by evaluating arguments only once), but wouldn't be portable */
# define XBT_IMPORT_NO_EXPORT(type) type
# define XBT_PUBLIC_DATA(type) extern type
-
/* Link against the DLL */
#elif (defined(_WIN32) && !defined(DLL_EXPORT) && !defined(DLL_STATIC))
# define XBT_PUBLIC(type) __declspec(dllimport) type