/*
* Function calling convention (not used for now)
+ * http://unixwiz.net/techtips/win32-callconv.html <-- good documentation
*/
#ifdef _XBT_WIN32
# define XBT_IMPORT_NO_EXPORT(type) type
# define XBT_PUBLIC_DATA(type) extern __declspec(dllexport) type
# define XBT_PUBLIC_CLASS class __declspec(dllexport)
-
+# define XBT_PRIVATE
/* Pack everything up statically */
#elif defined(DLL_STATIC)
# define XBT_IMPORT_NO_EXPORT(type) type
# define XBT_PUBLIC_DATA(type) extern type
# define XBT_PUBLIC_CLASS class
-
+# define XBT_PRIVATE
/* Link against the DLL */
#elif (defined(_XBT_WIN32) && !defined(DLL_EXPORT) && !defined(DLL_STATIC))
# define XBT_IMPORT_NO_EXPORT(type) __declspec(dllimport) type
# define XBT_PUBLIC_DATA(type) extern __declspec(dllimport) type
# define XBT_PUBLIC_CLASS class __declspec(dllimport)
+# define XBT_PRIVATE
+#elif defined(__ELF__)
+# define XBT_PUBLIC(type) __attribute__((visibility("default"))) type
+# define XBT_EXPORT_NO_IMPORT(type) __attribute__((visibility("default"))) type
+# define XBT_IMPORT_NO_EXPORT(type) __attribute__((visibility("default"))) type
+# define XBT_PUBLIC_DATA(type) extern __attribute__((visibility("default"))) type
+# define XBT_PUBLIC_CLASS class __attribute__((visibility("default")))
+# define XBT_PRIVATE __attribute__((visibility("hidden")))
-/* UNIX build */
#else
# define XBT_PUBLIC(type) type
# define XBT_EXPORT_NO_IMPORT(type) type
# define XBT_IMPORT_NO_EXPORT(type) type
# define XBT_PUBLIC_DATA(type) extern type
# define XBT_PUBLIC_CLASS class
+# define XBT_PRIVATE
#endif
#define _CRT_SECURE_NO_WARNINGS
#endif
-
-
-#ifdef _XBT_WIN32
-#define XBT_INTERNAL
-#else
-#define XBT_INTERNAL __attribute__((visibility ("hidden")))
-#endif
-
#if !defined (max) && !defined(__cplusplus)
# define max(a,b) (((a) > (b)) ? (a) : (b))
#endif