SHELL=/bin/sh
SRC=bt.c mprhook.c malloc.c
OBJ=bt.o mprhook.o malloc.o
SO-OBJ=bt.so mprhook.so malloc.so
LIB=libmpr.a libmpr.so
EXE1=mpr mprfilter mprmap mprfl mprchain mprleak mprsize mprhisto mprwhich mprfl-so mprso
EXE2=mprnm
EXE3=mprdem
EXE=$(EXE1) $(EXE2) $(EXE3)
LIBDIR=/usr/local/lib
BINDIR=/usr/local/bin

all: $(LIB) $(EXE3)

systype: find-systype
	@(./find-systype >systype; \
	  oper="`cat systype | cut -d: -f1 | cut -d- -f1`"; \
	  chip="`cat systype | cut -d: -f2 | cut -d- -f1`"; \
	  case "$$chip-$$oper" in \
	  i386-linux|i386-freebsd|i386-netbsd|sparc-sunos) \
		ln -s config/bt"$$chip".c bt.c; \
		ln -s config/mprnm."$$oper" mprnm; \
		;; \
	  esac)

bt.c $(EXE2): systype
	@(if test -f bt.c; then exit 0; fi; \
	  echo "Sorry - unsupported target !!" >&2; \
	  exit 1)

$(EXE1): ;

libmpr.a: $(OBJ)
	ar cr libmpr.a $(OBJ)
	-(ranlib libmpr.a; exit 0) >/dev/null 2>&1

libmpr.so: $(SO-OBJ)
	$(CC) -shared -o $(@) $(SO-OBJ) -lc

.SUFFIXES: .so
.c.so:
	$(CC) -o $(@) -c $(CFLAGS) -fPIC $(<)

mprdem:
	cd demangle; $(MAKE)
	ln -s demangle/mprdem mprdem

install: $(LIB) $(EXE)
	install -c -m 644 libmpr.a $(LIBDIR)
	install -c -m 755 libmpr.so $(LIBDIR)
	for f in $(EXE); do install -c -m 755 $$f $(BINDIR); done

uninstall:
	for f in $(LIB); do rm -f $(LIBDIR)/$$f; done
	for f in $(EXE); do rm -f $(BINDIR)/$$f; done

.PHONY: clean distclean

clean:
	-rm -f *.o *.so core .gdb_history $(EXE3) $(LIB)
	-cd demangle; $(MAKE) clean

distclean: clean
	-rm -f bt.c $(EXE2) systype
