From: Antonio Ospite Date: Wed, 28 Mar 2012 08:02:03 +0000 (+0200) Subject: am7xxx: control shared library symbols visibility X-Git-Tag: v0.1.1~6 X-Git-Url: https://git.ao2.it/libam7xxx.git/commitdiff_plain/fd3677b9606851f5f29bcd663fd37137eb84abd3?ds=inline am7xxx: control shared library symbols visibility Export as public symbols only those really needed, without this change some symbols from serialize.c (get_8, get_le32, put_8, put_le32) were public too. Use -fvisibility=hidden so we don't need to explicitly mark symbols as local. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 75b7b7c..fa3f876 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ if (CMAKE_COMPILER_IS_GNUCC) endif() add_flags(CMAKE_C_FLAGS + -fvisibility=hidden -fno-common -Wall -Wextra diff --git a/src/am7xxx.c b/src/am7xxx.c index 1035e23..8087f89 100644 --- a/src/am7xxx.c +++ b/src/am7xxx.c @@ -36,6 +36,20 @@ # define __attribute__(x) /*NOTHING*/ #endif +/* Control shared library symbols visibility */ +#if defined _WIN32 || defined __CYGWIN__ + #define AM7XXX_PUBLIC __declspec(dllexport) + #define AM7XXX_LOCAL +#else + #if __GNUC__ >= 4 + #define AM7XXX_PUBLIC __attribute__ ((visibility ("default"))) + #define AM7XXX_LOCAL __attribute__ ((visibility ("hidden"))) + #else + #define AM7XXX_PUBLIC + #define AM7XXX_LOCAL + #endif +#endif + static void log_message(am7xxx_context *ctx, int level, const char *function, @@ -551,7 +565,9 @@ out: return ret; } -int am7xxx_init(am7xxx_context **ctx) +/* Public API */ + +AM7XXX_PUBLIC int am7xxx_init(am7xxx_context **ctx) { int ret = 0; @@ -590,7 +606,7 @@ out: return ret; } -void am7xxx_shutdown(am7xxx_context *ctx) +AM7XXX_PUBLIC void am7xxx_shutdown(am7xxx_context *ctx) { am7xxx_device *current; @@ -612,12 +628,12 @@ void am7xxx_shutdown(am7xxx_context *ctx) ctx = NULL; } -void am7xxx_set_log_level(am7xxx_context *ctx, am7xxx_log_level log_level) +AM7XXX_PUBLIC void am7xxx_set_log_level(am7xxx_context *ctx, am7xxx_log_level log_level) { ctx->log_level = log_level; } -int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev, +AM7XXX_PUBLIC int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev, unsigned int device_index) { int ret; @@ -639,7 +655,7 @@ int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev, return ret; } -int am7xxx_close_device(am7xxx_device *dev) +AM7XXX_PUBLIC int am7xxx_close_device(am7xxx_device *dev) { if (dev == NULL) { fatal("dev must not be NULL!\n"); @@ -653,7 +669,7 @@ int am7xxx_close_device(am7xxx_device *dev) return 0; } -int am7xxx_get_device_info(am7xxx_device *dev, +AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev, am7xxx_device_info *device_info) { int ret; @@ -692,7 +708,7 @@ int am7xxx_get_device_info(am7xxx_device *dev, return 0; } -int am7xxx_calc_scaled_image_dimensions(am7xxx_device *dev, +AM7XXX_PUBLIC int am7xxx_calc_scaled_image_dimensions(am7xxx_device *dev, unsigned int upscale, unsigned int original_width, unsigned int original_height, @@ -754,7 +770,7 @@ int am7xxx_calc_scaled_image_dimensions(am7xxx_device *dev, return 0; } -int am7xxx_send_image(am7xxx_device *dev, +AM7XXX_PUBLIC int am7xxx_send_image(am7xxx_device *dev, am7xxx_image_format format, unsigned int width, unsigned int height, @@ -790,7 +806,7 @@ int am7xxx_send_image(am7xxx_device *dev, return send_data(dev, image, image_size); } -int am7xxx_set_power_mode(am7xxx_device *dev, am7xxx_power_mode mode) +AM7XXX_PUBLIC int am7xxx_set_power_mode(am7xxx_device *dev, am7xxx_power_mode mode) { int ret; struct am7xxx_header h = {