[Libguestfs] [PATCH 4/4] lib: Use -fvisibilty=hidden by default; only ABI symbols are now visible.
Jim Meyering
jim at meyering.net
Wed Jan 18 17:47:25 UTC 2012
Richard W.M. Jones wrote:
> From: "Richard W.M. Jones" <rjones at redhat.com>
>
> http://gcc.gnu.org/wiki/Visibility
> ---
> configure.ac | 6 ++++
> generator/generator_c.ml | 70 ++++++++++++++++++++++++---------------------
> src/Makefile.am | 8 +++--
> 3 files changed, 48 insertions(+), 36 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 6e42423..368346f 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -166,6 +166,12 @@ VERSION_SCRIPT_FLAGS=-Wl,--version-script=
> VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
> AC_SUBST(VERSION_SCRIPT_FLAGS)
>
> +dnl Use -fvisibility=hidden by default in the library.
> +dnl http://gcc.gnu.org/wiki/Visibility
> +AS_IF([test -n "$GCC"],
> + [AC_SUBST([GCC_VISIBILITY_HIDDEN], [-fvisibility=hidden])],
> + [AC_SUBST([GCC_VISIBILITY_HIDDEN], [:])])
You can simplify that slightly via:
test -n "$GCC" && v=-fvisibility=hidden || v=:
AC_SUBST([GCC_VISIBILITY_HIDDEN], [$v])
> -extern void guestfs_set_error_handler (guestfs_h *g, guestfs_error_handler_cb cb, void *opaque);
> -extern guestfs_error_handler_cb guestfs_get_error_handler (guestfs_h *g, void **opaque_rtn);
> +extern GUESTFS_DLL_PUBLIC void guestfs_set_error_handler (guestfs_h *g, guestfs_error_handler_cb cb, void *opaque);
> +extern GUESTFS_DLL_PUBLIC guestfs_error_handler_cb guestfs_get_error_handler (guestfs_h *g, void **opaque_rtn);
The rest looks fine, modulo some longer-than-80-column lines.
> -extern void guestfs_set_out_of_memory_handler (guestfs_h *g, guestfs_abort_cb);
> -extern guestfs_abort_cb guestfs_get_out_of_memory_handler (guestfs_h *g);
> +extern GUESTFS_DLL_PUBLIC void guestfs_set_out_of_memory_handler (guestfs_h *g, guestfs_abort_cb);
> +extern GUESTFS_DLL_PUBLIC guestfs_abort_cb guestfs_get_out_of_memory_handler (guestfs_h *g);
>
> /* Events. */
> ";
...
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 28a1b92..b91ffc1 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -55,7 +55,8 @@ lib_LTLIBRARIES = libguestfs.la
> # This convenience library is solely to compile its generated sources with
> # custom flags.
> libprotocol_la_SOURCES = guestfs_protocol.c guestfs_protocol.h
> -libprotocol_la_CFLAGS = -Wall -Wno-unused -fno-strict-aliasing
> +libprotocol_la_CFLAGS = \
> + -Wall -Wno-unused -fno-strict-aliasing $(GCC_VISIBILITY_HIDDEN)
I'm curious why you're not using $(WARN_CFLAGS) $(WERROR_CFLAGS) here.
> # Build the errnostring perfect hash code. The generated code has lots
> # of warnings so we must compile it in a separate mini-library.
> @@ -63,7 +64,7 @@ liberrnostring_la_SOURCES = \
> errnostring_gperf.c \
> errnostring.h \
> errnostring.c
> -liberrnostring_la_CFLAGS =
> +liberrnostring_la_CFLAGS = $(GCC_VISIBILITY_HIDDEN)
And here.
> errnostring_gperf.c: errnostring_gperf.gperf
> rm -f $@
> @@ -163,7 +164,8 @@ libguestfs_la_CFLAGS = \
> -DGUESTFS_WARN_DEPRECATED=1 \
> $(HIVEX_CFLAGS) $(AUGEAS_CFLAGS) $(PCRE_CFLAGS) \
> $(LIBVIRT_CFLAGS) $(LIBXML2_CFLAGS) \
> - $(WARN_CFLAGS) $(WERROR_CFLAGS)
> + $(WARN_CFLAGS) $(WERROR_CFLAGS) \
> + $(GCC_VISIBILITY_HIDDEN)
More information about the Libguestfs
mailing list