From 753f11f3881eac51da49c5bb2c2eebc99bd47410 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Thu, 28 Apr 2011 14:46:17 +0200 Subject: Use visibility macros instead of symbol map Signed-off-by: Jussi Pakkanen Signed-off-by: Henrik Rydberg --- include/grail-bits.h | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'include/grail-bits.h') diff --git a/include/grail-bits.h b/include/grail-bits.h index c151c11..dfe5367 100644 --- a/include/grail-bits.h +++ b/include/grail-bits.h @@ -27,6 +27,26 @@ extern "C" { #endif +/* Macros that set symbol visibilities in shared libraries properly. + * Adapted from http://gcc.gnu.org/wiki/Visibility + */ + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef BUILDING_GRAIL + #define GRAIL_PUBLIC __declspec(dllexport) + #else + #define GRAIL_PUBLIC __declspec(dllimport) + #endif + #define GRAIL_PRIVATE +#else + #if defined __GNUC__ + #define GRAIL_PUBLIC __attribute__ ((visibility("default"))) + #define GRAIL_PRIVATE __attribute__ ((visibility("hidden"))) + #else + #error "Unsupported compiler." + #endif +#endif + typedef unsigned char grail_mask_t; static inline void grail_mask_set(grail_mask_t *mask, int i) @@ -52,12 +72,15 @@ static inline int grail_mask_get(const grail_mask_t *mask, int i) return (mask[i >> 3] >> (i & 7)) & 1; } -void grail_mask_set_mask(grail_mask_t *a, const grail_mask_t *b, int bytes); -void grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b, int bytes); +void GRAIL_PUBLIC grail_mask_set_mask(grail_mask_t *a, const grail_mask_t *b, + int bytes); +void GRAIL_PUBLIC grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b, + int bytes); -int grail_mask_count(const grail_mask_t *mask, int bytes); -int grail_mask_get_first(const grail_mask_t *mask, int bytes); -int grail_mask_get_next(int i, const grail_mask_t *mask, int bytes); +int GRAIL_PUBLIC grail_mask_count(const grail_mask_t *mask, int bytes); +int GRAIL_PUBLIC grail_mask_get_first(const grail_mask_t *mask, int bytes); +int GRAIL_PUBLIC grail_mask_get_next(int i, const grail_mask_t *mask, + int bytes); #define grail_mask_foreach(i, mask, bytes) \ for (i = grail_mask_get_first(mask, bytes); \ -- cgit v1.2.3