# Global rules for building shared libraries     -*-Makefile-*-
#
# Each individual makefile should define the following variables:
# LIBRARY      : name of the library being built (without the lib prefix)
# SOVERSION    : the .so file version
#
# plus all variables required by the global Make.rules.in
#

DEFS      = $(EXTRADEFS)
DLLFLAGS  = @DLLFLAGS@
LIBEXT    = @LIBEXT@
LIBNAME   = lib$(LIBRARY)
DEFNAME   = $(LIBRARY).def
SONAME    = $(LIBNAME).so.$(SOVERSION)
MODULE    = $(LIBNAME).$(LIBEXT)

all: $(MODULE) $(MODULE:.dll=.a)

@MAKE_RULES@

$(LIBNAME).so.$(SOVERSION): $(OBJS) $(VERSCRIPT) Makefile.in
	$(LDSHARED) $(OBJS) $(EXTRALIBS) $(LDFLAGS) $(LIBS) -o $@

$(LIBNAME).so: $(LIBNAME).so.$(SOVERSION)
	$(RM) $@ && $(LN_S) $(LIBNAME).so.$(SOVERSION) $@

$(LIBNAME).a: $(DEFNAME)
	$(DLLTOOL) -l $@ -d $(SRCDIR)/$(DEFNAME)

$(LIBNAME).dll: $(OBJS) $(DEFNAME) Makefile.in
	$(DLLWRAP) --def $(SRCDIR)/$(DEFNAME) -o $@ $(OBJS) $(EXTRALIBS)

$(LIBNAME).$(SOVERSION).dylib: $(OBJS) Makefile.in
	$(LDSHARED) -install_name $(libdir)/$(LIBNAME).$(SOVERSION).dylib $(OBJS) $(EXTRALIBS) $(LDFLAGS) $(LIBS) -o $@

$(LIBNAME).dylib: $(LIBNAME).$(SOVERSION).dylib
	$(RM) $@ && $(LN_S) $(LIBNAME).$(SOVERSION).dylib $@

.PHONY: install-lib-so install-lib-dll install-lib-dylib install-dev-so install-dev-dll install-dev-dylib

install-lib-so: $(LIBNAME).so.$(SOVERSION) dummy
	$(MKINSTALLDIRS) $(libdir)
	$(INSTALL_PROGRAM) $(LIBNAME).so.$(SOVERSION) $(libdir)/$(LIBNAME).so.$(SOVERSION)

install-lib-dll: $(LIBNAME).dll dummy
	$(MKINSTALLDIRS) $(libdir)
	$(INSTALL_DATA) $(LIBNAME).dll $(libdir)/$(LIBNAME).dll

install-lib-dylib: $(LIBNAME).$(SOVERSION).dylib dummy
	$(MKINSTALLDIRS) $(libdir)
	$(INSTALL_PROGRAM) $(LIBNAME).$(SOVERSION).dylib $(libdir)/$(LIBNAME).$(SOVERSION).dylib

install-dev-so: dummy
	$(MKINSTALLDIRS) $(libdir)
	cd $(libdir) && $(RM) $(LIBNAME).so && $(LN_S) $(LIBNAME).so.$(SOVERSION) $(LIBNAME).so

install-dev-dll: $(LIBNAME).a dummy
	$(MKINSTALLDIRS) $(libdir)
	$(INSTALL_DATA) $(LIBNAME).a $(libdir)/$(LIBNAME).a

install-dev-dylib: dummy
	$(MKINSTALLDIRS) $(libdir)
	cd $(libdir) && $(RM) $(LIBNAME).dylib && $(LN_S) $(LIBNAME).$(SOVERSION).dylib $(LIBNAME).dylib

install install-lib:: $(LIBEXT:%=install-lib-%)
install install-dev:: $(LIBEXT:%=install-dev-%)

uninstall::
	$(RM) $(libdir)/$(LIBNAME).a $(libdir)/$(LIBNAME).dll $(libdir)/$(LIBNAME).so $(libdir)/$(LIBNAME).so.$(SOVERSION) $(libdir)/$(LIBNAME).dylib $(libdir)/$(LIBNAME).$(SOVERSION).dylib

clean::
	$(RM) $(LIBNAME).so.$(SOVERSION) $(LIBNAME).dll $(LIBNAME).$(SOVERSION).dylib