| From 8e1dadbcb7ec6be1c568550e97a9e3ce565758bf Mon Sep 17 00:00:00 2001 |
| From: Nirbheek Chauhan <nirbheek@centricular.com> |
| 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 <thomas.petazzoni@free-electrons.com> |
| --- |
| 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 |
| |