From 8e1dadbcb7ec6be1c568550e97a9e3ce565758bf Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Wed, 5 Nov 2014 18:35:14 +0530 Subject: [PATCH] Add support for building on/cross-compiling the shared library for Windows and OS X Also ensure that the shared library is versioned, and an implib is created on Windows. Commit backported from upstream. Signed-off-by: Thomas Petazzoni --- Makefile.in | 53 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/Makefile.in b/Makefile.in index 5a7fc21..5ca4453 100644 --- a/Makefile.in +++ b/Makefile.in @@ -17,7 +17,7 @@ USE_OPENSSL = @USE_OPENSSL@ HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@ -.PHONY: all test build_table_apps +.PHONY: all shared_library test build_table_apps all: test @@ -43,10 +43,10 @@ endif CC = @CC@ INCDIR = -Icrypto/include -I$(srcdir)/include -I$(srcdir)/crypto/include DEFS = @DEFS@ -CPPFLAGS= @CPPFLAGS@ +CPPFLAGS= -fPIC @CPPFLAGS@ CFLAGS = @CFLAGS@ LIBS = @LIBS@ -LDFLAGS = @LDFLAGS@ -L. +LDFLAGS = -L. @LDFLAGS@ COMPILE = $(CC) $(DEFS) $(INCDIR) $(CPPFLAGS) $(CFLAGS) SRTPLIB = -lsrtp @@ -75,12 +75,33 @@ prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ libdir = @libdir@ +bindir = @bindir@ ifeq (1, $(HAVE_PKG_CONFIG)) pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libsrtp.pc endif +SHAREDLIBVERSION = 1 +ifeq (linux,$(findstring linux,@host@)) +SHAREDLIB_DIR = $(libdir) +SHAREDLIB_LDFLAGS = -shared -Wl,-soname,$@ +SHAREDLIBSUFFIXNOVER = so +SHAREDLIBSUFFIX = $(SHAREDLIBSUFFIXNOVER).$(SHAREDLIBVERSION) +else ifeq (mingw,$(findstring mingw,@host@)) +SHAREDLIB_DIR = $(bindir) +SHAREDLIB_LDFLAGS = -shared -Wl,--out-implib,libsrtp.dll.a +SHAREDLIBVERSION = +SHAREDLIBSUFFIXNOVER = dll +SHAREDLIBSUFFIX = $(SHAREDLIBSUFFIXNOVER) +else ifeq (darwin,$(findstring darwin,@host@)) +SHAREDLIB_DIR = $(libdir) +SHAREDLIB_LDFLAGS = -dynamiclib -twolevel_namespace -undefined dynamic_lookup \ + -fno-common -headerpad_max_install_names -install_name $(libdir)/$@ +SHAREDLIBSUFFIXNOVER = dylib +SHAREDLIBSUFFIX = $(SHAREDLIBVERSION).$(SHAREDLIBSUFFIXNOVER) +endif + # implicit rules for object files and test apps %.o: %.c @@ -121,9 +142,14 @@ libsrtp.a: $(srtpobj) $(cryptobj) $(gdoi) ar cr libsrtp.a $^ $(RANLIB) libsrtp.a -libsrtp.so: $(srtpobj) $(cryptobj) $(gdoi) - $(CC) -shared -Wl,-soname,libsrtp.so \ - -o libsrtp.so $^ $(LDFLAGS) +libsrtp.$(SHAREDLIBSUFFIX): $(srtpobj) $(cryptobj) $(gdoi) + $(CC) -shared -o $@ $(SHAREDLIB_LDFLAGS) \ + $^ $(LDFLAGS) $(LIBS) + if [ -n "$(SHAREDLIBVERSION)" ]; then \ + ln -sfn $@ libsrtp.$(SHAREDLIBSUFFIXNOVER); \ + fi + +shared_library: libsrtp.$(SHAREDLIBSUFFIX) # libcryptomath.a contains general-purpose routines that are used to # generate tables and verify cryptoalgorithm implementations - this @@ -212,16 +238,18 @@ libsrtpdoc: .PHONY: clean superclean distclean install install: - @if [ -r $(DESTDIR)$(includedir)/srtp/srtp.h ]; then \ - echo "you should run 'make uninstall' first"; exit 1; \ - fi $(INSTALL) -d $(DESTDIR)$(includedir)/srtp $(INSTALL) -d $(DESTDIR)$(libdir) + $(INSTALL) -d $(DESTDIR)$(bindir) cp $(srcdir)/include/*.h $(DESTDIR)$(includedir)/srtp cp $(srcdir)/crypto/include/*.h $(DESTDIR)$(includedir)/srtp if [ "$(srcdir)" != "." ]; then cp crypto/include/*.h $(DESTDIR)$(includedir)/srtp; fi if [ -f libsrtp.a ]; then cp libsrtp.a $(DESTDIR)$(libdir)/; fi - if [ -f libsrtp.so ]; then cp libsrtp.so $(DESTDIR)$(libdir)/; fi + if [ -f libsrtp.dll.a ]; then cp libsrtp.dll.a $(DESTDIR)$(libdir)/; fi + if [ -f libsrtp.$(SHAREDLIBSUFFIX) ]; then \ + cp libsrtp.$(SHAREDLIBSUFFIX) $(DESTDIR)$(SHAREDLIB_DIR)/; \ + cp libsrtp.$(SHAREDLIBSUFFIXNOVER) $(DESTDIR)$(SHAREDLIB_DIR)/; \ + fi if [ "$(pkgconfig_DATA)" != "" ]; then \ $(INSTALL) -d $(DESTDIR)$(pkgconfigdir); \ cp $(srcdir)/$(pkgconfig_DATA) $(DESTDIR)$(pkgconfigdir)/; \ @@ -229,8 +257,7 @@ install: uninstall: rm -f $(DESTDIR)$(includedir)/srtp/*.h - rm -f $(DESTDIR)$(libdir)/libsrtp.a - rm -f $(DESTDIR)$(libdir)/libsrtp.so + rm -f $(DESTDIR)$(libdir)/libsrtp.* -rmdir $(DESTDIR)$(includedir)/srtp if [ "$(pkgconfig_DATA)" != "" ]; then \ rm -f $(DESTDIR)$(pkgconfigdir)/$(pkgconfig_DATA); \ @@ -238,7 +265,7 @@ uninstall: clean: rm -rf $(cryptobj) $(srtpobj) $(cryptomath) TAGS \ - libcryptomath.a libsrtp.a libsrtp.so core *.core test/core + libcryptomath.a libsrtp.* core *.core test/core for a in * */* */*/*; do \ if [ -f "$$a~" ] ; then rm -f $$a~; fi; \ done; -- 2.1.0