#
# This is a Makefile stub which handles the creation of Linux DLL-style shared
# libraries.
#
# In order to use this stub, the following makefile variables must be defined.
# 
# DLL_ADDRESS = 0x80000000
# DLL_JUMPSIZE = 0x1000
# DLL_GOTSIZE  = 0x1000
# DLL_VERSION = 1.0
# DLL_IMAGE = libce
# DLL_STUB = libcom_err
# DLL_MYDIR = et
# DLL_INSTALL_DIR = $(SHLIBDIR)
#

all:: image 

#
# This is a horrible hack to try to find libgcc.a  --- the DLL documentation
# states that you should just be able to do -lgcc, but modern gcc 
# installation packages don't install /usr/lib/libgcc.a --- as well they 
# shouldn't since libgcc.a can be gcc version dependent.  
# If this hack doesn't work, try replacing it with a hardcoded path to 
# libgcc.a, or -lgcc.  
#
#DLL_LIBGCC ="`$(CC) -v 2>&1 | head -1 | \
#		sed -e 's;[^/]*;;' -e 's/specs/libgcc.a/'`"
DLL_LIBGCC ="`$(CC) --print-libgcc-file-name`"

image:		$(DLL_IMAGE).so.$(DLL_VERSION)

$(DLL_IMAGE).so.$(DLL_VERSION): $(OBJS)
	ld -shared -o $(DLL_IMAGE).so.$(DLL_VERSION) \
	-soname $(DLL_IMAGE).so.1 /usr/lib/crtbeginS.o $(OBJS) /usr/lib/crtendS.o

install:: $(DLL_IMAGE).so.$(DLL_VERSION)
	$(INSTALLBIN) $(DLL_IMAGE).so.$(DLL_VERSION) \
		$(DLL_INSTALL_DIR)/$(DLL_IMAGE).so.$(DLL_VERSION)
	-ldconfig

install-libs:: $(DLL_STUB).sa
	$(INSTALLLIB) $(DLL_STUB).sa $(LIBDIR)/$(DLL_STUB).sa
	$(CHMOD) 644 $(LIBDIR)/$(DLL_STUB).sa
	$(RANLIB) $(LIBDIR)/$(DLL_STUB).sa
	$(CHMOD) $(LIBMODE) $(LIBDIR)/$(DLL_STUB).sa

install-tree:: $(DLL_IMAGE).so.$(DLL_VERSION)
	rm -f ../../shlibs/$(DLL_IMAGE).so.$(DLL_VERSION)
	cp $(DLL_IMAGE).so.$(DLL_VERSION) ../../shlibs
	strip ../../shlibs/$(DLL_IMAGE).so.$(DLL_VERSION)
	chmod 555 ../../shlibs/$(DLL_IMAGE).so.$(DLL_VERSION)

clean::
	(cd jump; $(RM) *~ *.o *.s jump.log size.nm)
	$(RM) ../$(DLL_STUB).sa $(DLL_STUB).sa $(DLL_IMAGE).so.$(DLL_VERSION)
