summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiroslav Lichvar <mlichvar@redhat.com>2012-12-03 21:04:57 +0100
committerErik de Castro Lopo <erikd@mega-nerd.com>2012-12-04 17:45:06 +1100
commit19c78e58d7030cecf710c7106751d890ea03f982 (patch)
tree09528047affa34886e812f0ca3d0add51288d271
parent18e01547aca17f638917f875a312f027d779dff4 (diff)
downloadflac-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.ac8
-rw-r--r--include/FLAC++/export.h13
-rw-r--r--include/FLAC/export.h13
-rw-r--r--src/libFLAC/Makefile.am10
-rw-r--r--src/test_libFLAC/Makefile.am2
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