[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Libguestfs] [PATCH 4/4] lib: Use -fvisibilty=hidden by default; only ABI symbols are now visible.



Richard W.M. Jones wrote:
> From: "Richard W.M. Jones" <rjones 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)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]