diff options
author | Miroslav Lichvar <mlichvar@redhat.com> | 2012-12-03 21:04:57 +0100 |
---|---|---|
committer | Erik de Castro Lopo <erikd@mega-nerd.com> | 2012-12-04 17:45:06 +1100 |
commit | 19c78e58d7030cecf710c7106751d890ea03f982 (patch) | |
tree | 09528047affa34886e812f0ca3d0add51288d271 | |
parent | 18e01547aca17f638917f875a312f027d779dff4 (diff) | |
download | flac-19c78e58d7030cecf710c7106751d890ea03f982.tar.gz |
Hide symbols with gcc.
With gcc >= 4 and ELF, set default visibility to hidden and make visible
only the symbols with FLAC_API or FLACPP_API.
A convenience libFLAC-static.la is created for test_libFLAC as it
depends on the hidden symbols.
-rw-r--r-- | configure.ac | 8 | ||||
-rw-r--r-- | include/FLAC++/export.h | 13 | ||||
-rw-r--r-- | include/FLAC/export.h | 13 | ||||
-rw-r--r-- | src/libFLAC/Makefile.am | 10 | ||||
-rw-r--r-- | src/test_libFLAC/Makefile.am | 2 |
5 files changed, 35 insertions, 11 deletions
diff --git a/configure.ac b/configure.ac index f4a31e4f..3899d685 100644 --- a/configure.ac +++ b/configure.ac @@ -360,9 +360,15 @@ if test x$ac_cv_c_compiler_gnu = xyes ; then if test x$enable_gcc_werror = "xyes" ; then CFLAGS="-Wall -Wextra -Werror $CFLAGS" CXXFLAGS="-Wall -Wextra -Werror $CXXFLAGS" - fi fi + if test "$GCC_MAJOR_VERSION" -ge 4 && test "$OBJ_FORMAT" = elf; then + CPPFLAGS="$CPPFLAGS -DFLAC__USE_VISIBILITY_ATTR" + CFLAGS="$CFLAGS -fvisibility=hidden" + CXXFLAGS="$CXXFLAGS -fvisibility=hidden" + fi +fi + #@@@ AM_CONDITIONAL(FLaC__HAS_AS__TEMPORARILY_DISABLED, test "yes" = "no") diff --git a/include/FLAC++/export.h b/include/FLAC++/export.h index e3bc51fc..d3bd1367 100644 --- a/include/FLAC++/export.h +++ b/include/FLAC++/export.h @@ -55,17 +55,22 @@ * \{ */ -#if defined(FLAC__NO_DLL) || !defined(_MSC_VER) +#if defined(FLAC__NO_DLL) #define FLACPP_API -#else - +#elif defined(_MSC_VER) #ifdef FLACPP_API_EXPORTS #define FLACPP_API _declspec(dllexport) #else #define FLACPP_API _declspec(dllimport) - #endif + +#elif defined(FLAC__USE_VISIBILITY_ATTR) +#define FLACPP_API __attribute__ ((visibility ("default"))) + +#else +#define FLACPP_API + #endif /* These #defines will mirror the libtool-based library version number, see diff --git a/include/FLAC/export.h b/include/FLAC/export.h index d239b9b7..312746d0 100644 --- a/include/FLAC/export.h +++ b/include/FLAC/export.h @@ -55,17 +55,22 @@ * \{ */ -#if defined(FLAC__NO_DLL) || !defined(_MSC_VER) +#if defined(FLAC__NO_DLL) #define FLAC_API -#else - +#elif defined(_MSC_VER) #ifdef FLAC_API_EXPORTS #define FLAC_API _declspec(dllexport) #else #define FLAC_API _declspec(dllimport) - #endif + +#elif defined(FLAC__USE_VISIBILITY_ATTR) +#define FLAC_API __attribute__ ((visibility ("default"))) + +#else +#define FLAC_API + #endif /** These #defines will mirror the libtool-based library version number, see diff --git a/src/libFLAC/Makefile.am b/src/libFLAC/Makefile.am index b20e21ae..a63a3d0e 100644 --- a/src/libFLAC/Makefile.am +++ b/src/libFLAC/Makefile.am @@ -30,6 +30,7 @@ AM_CPPFLAGS = -I$(top_builddir) -I$(srcdir)/include -I$(top_srcdir)/include lib_LTLIBRARIES = libFLAC.la +noinst_LTLIBRARIES = libFLAC-static.la if DEBUG DEBUGCFLAGS = -DFLAC__OVERFLOW_DETECT endif @@ -106,7 +107,8 @@ extra_ogg_sources = \ endif # see 'http://www.gnu.org/software/libtool/manual/libtool.html#Libtool-versioning' for numbering convention libFLAC_la_LDFLAGS = -version-info 10:0:2 $(LOCAL_EXTRA_LDFLAGS) @LT_NO_UNDEFINED@ -libFLAC_la_SOURCES = \ + +libFLAC_sources = \ bitmath.c \ bitreader.c \ bitwriter.c \ @@ -125,3 +127,9 @@ libFLAC_la_SOURCES = \ stream_encoder_framing.c \ window.c \ $(extra_ogg_sources) + +libFLAC_la_SOURCES = $(libFLAC_sources) + +# needed for test_libFLAC +libFLAC_static_la_LIBADD = $(LOCAL_EXTRA_LIBADD) +libFLAC_static_la_SOURCES = $(libFLAC_sources) diff --git a/src/test_libFLAC/Makefile.am b/src/test_libFLAC/Makefile.am index 91a57fb2..ed9aee84 100644 --- a/src/test_libFLAC/Makefile.am +++ b/src/test_libFLAC/Makefile.am @@ -27,7 +27,7 @@ test_libFLAC_LDADD = \ $(top_builddir)/src/share/grabbag/libgrabbag.la \ $(top_builddir)/src/share/replaygain_analysis/libreplaygain_analysis.la \ $(top_builddir)/src/test_libs_common/libtest_libs_common.la \ - $(top_builddir)/src/libFLAC/libFLAC.la \ + $(top_builddir)/src/libFLAC/libFLAC-static.la \ @OGG_LIBS@ \ -lm |