support for building dynamic libraries on Mac OS X
authorDiego Biurrun <diego@biurrun.de>
Mon, 26 Sep 2005 10:05:13 +0000 (10:05 +0000)
committerDiego Biurrun <diego@biurrun.de>
Mon, 26 Sep 2005 10:05:13 +0000 (10:05 +0000)
based on a patch by Lina Pezzella <J4rg0n -- at -- gentoo -- dot -- org>

Originally committed as revision 4616 to svn://svn.ffmpeg.org/ffmpeg/trunk

configure
libavcodec/Makefile
libavcodec/libpostproc/Makefile
libavformat/Makefile
libavutil/Makefile
vhook/Makefile

index 4f5a983..a31fdc5 100755 (executable)
--- a/configure
+++ b/configure
@@ -329,11 +329,12 @@ v4l="no"
 audio_oss="no"
 dv1394="no"
 ffserver="no"
-SHFLAGS="-dynamiclib"
+SHFLAGS="-dynamiclib -Wl,-single_module,-undefined,dynamic_lookup"
 extralibs=""
 darwin="yes"
 strip="strip -x"
-LDFLAGS="-Wl,-search_paths_first"
+LDFLAGS="-Wl,-dynamic,-search_paths_first"
+SLIBSUF=".dylib"
 FFSLDFLAGS=-Wl,-bind_at_load
 ;;
 MINGW32*)
@@ -1428,6 +1429,8 @@ fi
 if test "$lshared" = "yes" ; then
   echo "BUILD_SHARED=yes" >> config.mak
   echo "PIC=-fPIC -DPIC" >> config.mak
+  echo "SPPMAJOR=0" >> config.mak
+  echo "SPPVERSION=0.0.1" >> config.mak 
 fi
 echo "EXTRALIBS=$extralibs" >> config.mak
 version=`grep '#define FFMPEG_VERSION ' "$source_path/libavcodec/avcodec.h" |
index 3b60705..9e64367 100644 (file)
@@ -377,17 +377,22 @@ ifeq ($(TARGET_ARCH_SPARC64),yes)
 CFLAGS+= -mcpu=ultrasparc -mtune=ultrasparc
 endif
 
+# Darwin specific stuff
+ifeq ($(CONFIG_DARWIN),yes)
+SHFLAGS += -Wl,-install_name,$(libdir)/$(SLIBPREF)avcodec$(SLIBSUF),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION)
+endif
+
 SRCS := $(OBJS:.o=.c) $(ASM_OBJS:.o=.S)
 OBJS := $(OBJS) $(ASM_OBJS)
 
 LIB= $(LIBPREF)avcodec$(LIBSUF)
 LIBAVUTIL= $(SRC_PATH)/libavutil/$(LIBPREF)avutil$(LIBSUF)
 ifeq ($(BUILD_SHARED),yes)
-SLIB= $(SLIBPREF)avcodec$(SLIBSUF)
+SLIBNAME= $(SLIBPREF)avcodec$(SLIBSUF)
 endif
 TESTS= imgresample-test dct-test motion-test fft-test
 
-all: $(LIB) $(SLIB)
+all: $(LIB) $(SLIBNAME)
 
 amrlibs:
        $(MAKE) -C amr spclib fipoplib
@@ -399,7 +404,7 @@ $(LIB): $(OBJS) $(AMRLIBS)
        $(AR) rc $@ $(OBJS) $(AMREXTRALIBS)
        $(RANLIB) $@
 
-$(SLIB): $(OBJS)
+$(SLIBNAME): $(OBJS)
 ifeq ($(CONFIG_PP),yes)
        $(MAKE) -C libpostproc
 endif
@@ -407,7 +412,7 @@ ifeq ($(CONFIG_WIN32),yes)
        $(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS)
        -lib /machine:i386 /def:$(@:.dll=.def)
 else
-       $(CC) $(SHFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS) $(LDFLAGS)
+       $(CC) $(SHFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS)
 endif
 
 dsputil.o: dsputil.c dsputil.h
@@ -427,7 +432,7 @@ depend: $(SRCS)
 dep:   depend
 
 clean: $(CLEANAMR)
-       rm -f *.o *.d *~ .depend $(LIB) $(SLIB) *.so i386/*.o i386/*~ \
+       rm -f *.o *.d *~ .depend $(LIB) $(SLIBNAME) *$(SLIBSUF) i386/*.o i386/*~ \
           armv4l/*.o armv4l/*~ \
           mlib/*.o mlib/*~ \
           alpha/*.o alpha/*~ \
@@ -476,11 +481,11 @@ fft-test: fft-test.o $(LIB)
 ifeq ($(BUILD_SHARED),yes)
 install: all install-headers
 ifeq ($(CONFIG_WIN32),yes)
-       install $(INSTALLSTRIP) -m 755 $(SLIB) "$(prefix)"
+       install $(INSTALLSTRIP) -m 755 $(SLIBNAME) "$(prefix)"
 else
        install -d $(libdir)
-       install $(INSTALLSTRIP) -m 755 $(SLIB) $(libdir)/libavcodec-$(VERSION).so
-       ln -sf libavcodec-$(VERSION).so $(libdir)/libavcodec.so
+       install $(INSTALLSTRIP) -m 755 $(SLIBNAME) $(libdir)/libavcodec-$(VERSION)$(SLIBSUF)
+       ln -sf libavcodec-$(VERSION)$(SLIBSUF) $(libdir)/libavcodec$(SLIBSUF)
        $(LDCONFIG) || true
 endif
 ifeq ($(CONFIG_PP),yes)
index a12bc72..d435444 100644 (file)
@@ -4,9 +4,16 @@ include ../../config.mak
 VPATH=$(SRC_PATH)/libavcodec/libpostproc
 
 ifeq ($(SHARED_PP),yes)
-SPPLIB = $(SLIBPREF)postproc$(SLIBSUF)
-SPPMAJOR = 0
-SPPVERSION = $(SPPMAJOR).0.1
+SPPLIBNAME = $(SLIBPREF)postproc$(SLIBSUF)
+ifeq ($(CONFIG_DARWIN),yes)
+SPPLIBMAJOR = $(SLIBPREF)postproc.$(SPPMAJOR)$(SLIBSUF)
+SPPLIB = $(SLIBPREF)postproc.$(SPPVERSION)$(SLIBSUF)
+SHFLAGS += -Wl,-install_name,$(libdir)/$(SPPLIBNAME),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION)
+else
+SPPLIBMAJOR = $(SPPLIBNAME).$(SPPMAJOR)
+SPPLIB = $(SPPLIBNAME).$(SPPVERSION)
+SHFLAGS = -shared -Wl,-soname,$(SPPLIB)
+endif
 endif
 PPLIB = $(LIBPREF)postproc$(LIBSUF)
 
@@ -23,13 +30,13 @@ CFLAGS  = $(OPTFLAGS) $(MLIB_INC) -I. -I.. $(EXTRA_INC)
 .c.o:
        $(CC) -c $(CFLAGS) $(LIBOBJFLAGS) -I$(SRC_PATH)/libavcodec -I../.. -o $@ $<
 
-all:    $(SWSLIB) $(PPLIB) $(SPPLIB)
+all:    $(SWSLIB) $(PPLIB) $(SPPLIBNAME)
 
 clean:
-       rm -f *.o *.a *~ *.so $(PPLIB) $(SPPLIB)
+       rm -f *.o *.a *~ *$(SLIBSUF) $(PPLIB) $(SPPLIBNAME)
 
 distclean:
-       rm -f Makefile.bak *.o *.a *~ *.so .depend
+       rm -f Makefile.bak *.o *.a *~ *$(SLIBSUF) .depend
 
 dep:    depend
 
@@ -40,9 +47,8 @@ ifeq ($(SHARED_PP),yes)
 postprocess_pic.o: postprocess.c
        $(CC) -c $(CFLAGS) -fomit-frame-pointer -fPIC -DPIC -I.. -I../.. -o $@ $<
 
-$(SPPLIB): $(SPPOBJS)
-       $(CC) -shared -Wl,-soname,$(SPPLIB).$(SPPMAJOR) \
-       -o $(SPPLIB) $(SPPOBJS)
+$(SPPLIBNAME): $(SPPOBJS)
+       $(CC) $(SHFLAGS) -o $(SPPLIBNAME) $(SPPOBJS)
 endif
 
 $(PPLIB): $(PPOBJS)
@@ -53,12 +59,12 @@ $(PPLIB): $(PPOBJS)
 install: all
 ifeq ($(SHARED_PP),yes)
 ifeq ($(CONFIG_WIN32),yes)
-       install $(INSTALLSTRIP) -m 755 $(SPPLIB) "$(prefix)"
+       install $(INSTALLSTRIP) -m 755 $(SPPLIBNAME) "$(prefix)"
 else
        install -d $(libdir)
-       install $(INSTALLSTRIP) -m 755 $(SPPLIB) $(libdir)/$(SPPLIB).$(SPPVERSION)
-       ln -sf $(SPPLIB).$(SPPVERSION) $(libdir)/$(SPPLIB)
-       ln -sf $(SPPLIB).$(SPPVERSION) $(libdir)/$(SPPLIB).$(SPPMAJOR)
+       install $(INSTALLSTRIP) -m 755 $(SPPLIBNAME) $(libdir)/$(SPPLIB)
+       ln -sf $(SPPLIB) $(libdir)/$(SPPLIBNAME)
+       ln -sf $(SPPLIB) $(libdir)/$(SPPLIBMAJOR)
        install -d $(libdir)/pkgconfig
        install -m 644 ../../libpostproc.pc $(libdir)/pkgconfig
        $(LDCONFIG) || true
index ea486a7..5be994b 100644 (file)
@@ -81,9 +81,11 @@ endif
 
 LIB= $(LIBPREF)avformat$(LIBSUF)
 ifeq ($(BUILD_SHARED),yes)
-SLIB= $(SLIBPREF)avformat$(SLIBSUF)
-
-AVCLIBS+=-lavcodec$(BUILDSUF) -L../libavcodec
+SLIBNAME= $(SLIBPREF)avformat$(SLIBSUF)
+AVCLIBS+=-lavcodec$(BUILDSUF) -L../libavcodec -lavutil$(BUILDSUF) -L../libavutil
+ifeq ($(CONFIG_DARWIN),yes)
+SHFLAGS += -Wl,-install_name,$(libdir)/$(SLIBNAME),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION)
+endif
 ifeq ($(CONFIG_MP3LAME),yes)
 AVCLIBS+=-lmp3lame
 endif
@@ -91,14 +93,14 @@ endif
 
 SRCS := $(OBJS:.o=.c) $(PPOBJS:.o=.cpp)
 
-all: $(LIB) $(SLIB)
+all: $(LIB) $(SLIBNAME)
 
 $(LIB): $(OBJS) $(PPOBJS)
        rm -f $@
        $(AR) rc $@ $(OBJS) $(PPOBJS)
        $(RANLIB) $@
 
-$(SLIB): $(OBJS)
+$(SLIBNAME): $(OBJS)
 ifeq ($(CONFIG_WIN32),yes)
        $(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(PPOBJS) $(AVCLIBS) $(EXTRALIBS)
        -lib /machine:i386 /def:$(@:.dll=.def)
@@ -112,11 +114,11 @@ depend: $(SRCS)
 ifeq ($(BUILD_SHARED),yes)
 install: all install-headers
 ifeq ($(CONFIG_WIN32),yes)
-       install $(INSTALLSTRIP) -m 755 $(SLIB) "$(prefix)"
+       install $(INSTALLSTRIP) -m 755 $(SLIBNAME) "$(prefix)"
 else
        install -d $(libdir)
-       install $(INSTALLSTRIP) -m 755 $(SLIB) $(libdir)/libavformat-$(VERSION).so
-       ln -sf libavformat-$(VERSION).so $(libdir)/libavformat.so
+       install $(INSTALLSTRIP) -m 755 $(SLIBNAME) $(libdir)/$(SLIBPREF)avformat-$(VERSION)$(SLIBSUF)
+       ln -sf $(SLIBPREF)avformat-$(VERSION)$(SLIBSUF) $(libdir)/$(SLIBNAME)
        $(LDCONFIG) || true
 endif
 else
@@ -143,7 +145,7 @@ install-headers:
        g++ $(subst -Wall,,$(CFLAGS)) -c -o $@ $< 
 
 distclean clean: 
-       rm -f *.o *.d .depend *~ *.a *.so $(LIB)
+       rm -f *.o *.d .depend *~ *.a *$(SLIBSUF) $(LIB)
 
 #
 # include dependency files if they exist
index 7594ab2..6765cc7 100644 (file)
@@ -22,22 +22,25 @@ SRCS := $(OBJS:.o=.c)
 
 LIB= $(LIBPREF)avutil$(LIBSUF)
 ifeq ($(BUILD_SHARED),yes)
-SLIB= $(SLIBPREF)avutil$(SLIBSUF)
+SLIBNAME= $(SLIBPREF)avutil$(SLIBSUF)
+ifeq ($(CONFIG_DARWIN),yes)
+SHFLAGS += -Wl,-install_name,$(libdir)/$(SLIBNAME),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION)
+endif
 endif
 
-all: $(LIB) $(SLIB)
+all: $(LIB) $(SLIBNAME)
 
 $(LIB): $(OBJS)
        rm -f $@
        $(AR) rc $@ $(OBJS)
        $(RANLIB) $@
 
-$(SLIB): $(OBJS)
+$(SLIBNAME): $(OBJS)
 ifeq ($(CONFIG_WIN32),yes)
        $(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS)
        -lib /machine:i386 /def:$(@:.dll=.def)
 else
-       $(CC) $(SHFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS) $(LDFLAGS)
+       $(CC) $(SHFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS)
 endif
 
 %.o: %.c
@@ -49,7 +52,7 @@ depend: $(SRCS)
 dep:   depend
 
 clean:
-       rm -f *.o *.d *~ .depend $(LIB) $(SLIB) *.so
+       rm -f *.o *.d *~ .depend $(LIB) $(SLIBNAME) *$(SLIBSUF)
 
 distclean: clean
        rm -f Makefile.bak .depend
@@ -58,11 +61,11 @@ distclean: clean
 ifeq ($(BUILD_SHARED),yes)
 install: all install-headers
 ifeq ($(CONFIG_WIN32),yes)
-       install $(INSTALLSTRIP) -m 755 $(SLIB) "$(prefix)"
+       install $(INSTALLSTRIP) -m 755 $(SLIBNAME) "$(prefix)"
 else
        install -d $(libdir)
-       install $(INSTALLSTRIP) -m 755 $(SLIB) $(libdir)/libavutil-$(VERSION).so
-       ln -sf libavutil-$(VERSION).so $(libdir)/libavutil.so
+       install $(INSTALLSTRIP) -m 755 $(SLIBNAME) $(libdir)/libavutil-$(VERSION)$(SLIBSUF)
+       ln -sf libavutil-$(VERSION)$(SLIBSUF) $(libdir)/$(SLIBNAME)
        $(LDCONFIG) || true
 endif
 else
index cc001f5..d8c7655 100644 (file)
@@ -5,22 +5,22 @@ VPATH=$(SRC_PATH)/vhook
 CFLAGS=-fPIC $(SHCFLAGS) -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavformat -I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavutil -DHAVE_AV_CONFIG_H
 
 ifeq ($(CONFIG_DARWIN),yes)
-SHFLAGS+=-flat_namespace -undefined suppress
+       SHFLAGS += -flat_namespace
 endif
-HOOKS=null.so fish.so ppm.so watermark.so
+HOOKS=null$(SLIBSUF) fish$(SLIBSUF) ppm$(SLIBSUF) watermark$(SLIBSUF)
 
 ifeq ($(HAVE_IMLIB2),yes)
-    HOOKS += imlib2.so
+    HOOKS += imlib2$(SLIBSUF)
 endif    
 
 ifeq ($(HAVE_FREETYPE2),yes)
-    HOOKS += drawtext.so
+    HOOKS += drawtext$(SLIBSUF)
     CFLAGS += `freetype-config --cflags`
 endif    
 
 all: $(HOOKS) 
 
-SRCS := $(HOOKS:.so=.c)
+SRCS := $(HOOKS:$(SLIBSUF)=.c)
 
 depend: $(SRCS)
        $(CC) -MM $(CFLAGS) $^ 1>.depend
@@ -29,17 +29,21 @@ install:
        install -d "$(libdir)/vhook"
        install -m 755 $(HOOKS) "$(libdir)/vhook"
 
-imlib2.so: imlib2.o
+imlib2$(SLIBSUF): imlib2.o
        $(CC) $(LDFLAGS) -g -o $@ $(SHFLAGS) $< -lImlib2
 
-drawtext.so: drawtext.o
+drawtext$(SLIBSUF): drawtext.o
        $(CC) $(LDFLAGS) -g -o $@ $(SHFLAGS) $< `freetype-config --libs`
 
-%.so: %.o
+%$(SLIBSUF): %.o
+ifeq ($(CONFIG_DARWIN),yes)
+       $(CC) $(LDFLAGS) $(SHFLAGS) -Wl,-install_name,$(libdir)/vhoook/$@ -g -o $@ $<
+else
        $(CC) $(LDFLAGS) -g -o $@ $(SHFLAGS) $<
+endif
 
 clean:
-       rm -f *.o *.d .depend *.so *~
+       rm -f *.o *.d .depend *$(SLIBSUF) *~
 
 ifneq ($(wildcard .depend),)
 include .depend