From a482e61bd624c71e39c1a06367e303364b3ba153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5ns=20Rullg=C3=A5rd?= Date: Sat, 16 Jan 2010 04:49:02 +0000 Subject: [PATCH] Add symbol versioning for shared libraries Based on patch by Reinhard Tartler Originally committed as revision 21236 to svn://svn.ffmpeg.org/ffmpeg/trunk --- common.mak | 6 +++++- configure | 5 +++++ libavcodec/libavcodec.v | 3 +++ libavdevice/libavdevice.v | 4 ++++ libavfilter/libavfilter.v | 4 ++++ libavformat/libavformat.v | 3 +++ libavutil/libavutil.v | 4 ++++ libpostproc/libpostproc.v | 4 ++++ subdir.mak | 2 +- 9 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 libavcodec/libavcodec.v create mode 100644 libavdevice/libavdevice.v create mode 100644 libavfilter/libavfilter.v create mode 100644 libavformat/libavformat.v create mode 100644 libavutil/libavutil.v create mode 100644 libpostproc/libpostproc.v diff --git a/common.mak b/common.mak index 8ce464827c..deb3e782c5 100644 --- a/common.mak +++ b/common.mak @@ -9,6 +9,7 @@ vpath %.c $(SRC_DIR) vpath %.h $(SRC_DIR) vpath %.S $(SRC_DIR) vpath %.asm $(SRC_DIR) +vpath %.v $(SRC_DIR) ifeq ($(SRC_DIR),$(SRC_PATH_BARE)) BUILD_ROOT_REL = . @@ -33,6 +34,9 @@ CPPFLAGS := -DHAVE_AV_CONFIG_H -I$(BUILD_ROOT_REL) -I$(SRC_PATH) $(CPPFLAGS) %$(EXESUF): %.c +%.ver: %.v + sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@ + SVN_ENTRIES = $(SRC_PATH_BARE)/.svn/entries ifeq ($(wildcard $(SVN_ENTRIES)),$(SVN_ENTRIES)) $(BUILD_ROOT_REL)/version.h: $(SVN_ENTRIES) @@ -77,7 +81,7 @@ $(HOSTPROGS): %$(HOSTEXESUF): %.o DEPS := $(OBJS:.o=.d) depend dep: $(DEPS) -CLEANSUFFIXES = *.d *.o *~ *.ho *.map +CLEANSUFFIXES = *.d *.o *~ *.ho *.map *.ver DISTCLEANSUFFIXES = *.pc LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp diff --git a/configure b/configure index c9cf2d1839..62a7f987d6 100755 --- a/configure +++ b/configure @@ -1561,6 +1561,7 @@ tmpfile TMPE $EXESUF tmpfile TMPH .h tmpfile TMPO .o tmpfile TMPS .S +tmpfile TMPV .ver tmpfile TMPSH .sh unset -f mktemp @@ -2568,6 +2569,10 @@ check_ldflags -Wl,--as-needed check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil' check_ldflags -Wl,-Bsymbolic +echo "X{};" > $TMPV +test_ldflags -Wl,--version-script,$TMPV && + append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver' + if enabled small; then check_cflags -Os # not all compilers support -Os optimizations="small" diff --git a/libavcodec/libavcodec.v b/libavcodec/libavcodec.v new file mode 100644 index 0000000000..561a42cd4f --- /dev/null +++ b/libavcodec/libavcodec.v @@ -0,0 +1,3 @@ +LIBAVCODEC_$MAJOR { + global: *; +}; diff --git a/libavdevice/libavdevice.v b/libavdevice/libavdevice.v new file mode 100644 index 0000000000..663af85ba8 --- /dev/null +++ b/libavdevice/libavdevice.v @@ -0,0 +1,4 @@ +LIBAVDEVICE_$MAJOR { + global: avdevice_*; + local: *; +}; diff --git a/libavfilter/libavfilter.v b/libavfilter/libavfilter.v new file mode 100644 index 0000000000..83e8887080 --- /dev/null +++ b/libavfilter/libavfilter.v @@ -0,0 +1,4 @@ +LIBAVFILTER_$MAJOR { + global: avfilter_*; av_*; + local: *; +}; diff --git a/libavformat/libavformat.v b/libavformat/libavformat.v new file mode 100644 index 0000000000..da2311eb36 --- /dev/null +++ b/libavformat/libavformat.v @@ -0,0 +1,3 @@ +LIBAVFORMAT_$MAJOR { + global: *; +}; diff --git a/libavutil/libavutil.v b/libavutil/libavutil.v new file mode 100644 index 0000000000..ec52f2be7a --- /dev/null +++ b/libavutil/libavutil.v @@ -0,0 +1,4 @@ +LIBAVUTIL_$MAJOR { + global: av_*; ff_*; avutil_*; + local: *; +}; diff --git a/libpostproc/libpostproc.v b/libpostproc/libpostproc.v new file mode 100644 index 0000000000..e65d76f4f6 --- /dev/null +++ b/libpostproc/libpostproc.v @@ -0,0 +1,4 @@ +LIBPOSTPROC_$MAJOR { + global: postproc_*; pp_*; + local: *; +}; diff --git a/subdir.mak b/subdir.mak index 6948211924..e0ac6810b6 100644 --- a/subdir.mak +++ b/subdir.mak @@ -51,7 +51,7 @@ install-libs: install-lib$(NAME)-shared $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) cd ./$(SUBDIR) && $(LN_S) $(SLIBNAME_WITH_MAJOR) $(SLIBNAME) -$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) +$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_CMD) $(LD) $(SHFLAGS) $(FFLDFLAGS) -o $$@ $$(filter %.o,$$^) $(FFEXTRALIBS) $(EXTRAOBJS) $(SLIB_EXTRA_CMD)