OSNAME := $(shell uname)
# Use gmake's conditionals to create a consistent Makefile.
# Reference: http://www.dina.kvl.dk/DinaUnix/Info/make/make_69.html
# However, this will only work for gmake.
# Note: ifeq cannot be cascaded, it can only be recursed.
ifeq ($(OSNAME), SunOS)
  LOCALLIBS = -lpthread -lsocket -lnsl
else
ifeq ($(OSNAME), Linux)
  LOCALLIBS = -lpthread -lnsl
else
ifeq ($(OSNAME), FreeBSD)
# this tells linker to use libc_r.so; Note: it is NOT -lpthread
  LOCALLIBS = -pthread
endif
endif
endif

CC = g++
cc = gcc
LDFLAGS= $(LOCALLIBS) -lm
CFLAGS= -g -Wall -D_REENTRANT
COMMON= sysdep sysutil hmac_md5 random32
cc_COMMON= md5-util md5c
MTSRC = TestSetup module_mt $(COMMON) $(cc_COMMON)
MTOBJ = $(MTSRC:=.o.$(OSNAME))
MONSRC= monitor_auto $(COMMON) $(cc_COMMON)
MONOBJ= $(MONSRC:=.o.$(OSNAME))

TST_SRC = test_md5 $(COMMON) $(cc_COMMON)
TST_OBJ = $(TST_SRC:=.o.$(OSNAME))

TSTSOCK_SRC = socktst_cli
TSTSOCK_OBJ = $(TSTSOCK_SRC:=.o.$(OSNAME))

.SUFFIXES: .cpp

all: module_mt.$(OSNAME) monitor_auto.$(OSNAME) test_md5.$(OSNAME) socktst_cli.$(OSNAME)

md5-util.o.$(OSNAME) : md5-util.c
	$(cc) ${CFLAGS} -c -o $@ $<

md5c.o.$(OSNAME) : md5c.c
	$(cc) ${CFLAGS} -c -o $@ $<

random32.o.$(OSNAME) : random32.c
	$(cc) ${CFLAGS} -c -o $@ $<

%.o.$(OSNAME) : %.cpp
	$(CC) $(CFLAGS) -c -o $@ $<

module_mt.$(OSNAME): $(MTOBJ)
	$(CC) ${CFLAGS} -o module_mt.$(OSNAME) $(MTOBJ) ${LDFLAGS}

monitor_auto.$(OSNAME): $(MONOBJ)
	$(CC) ${CFLAGS} -o monitor_auto.$(OSNAME) $(MONOBJ) ${LDFLAGS}

test_md5.$(OSNAME): $(TST_OBJ)
	$(CC) ${CFLAGS} -o test_md5.$(OSNAME) $(TST_OBJ) ${LDFLAGS}

socktst_cli.$(OSNAME): $(TSTSOCK_OBJ)
	$(CC) ${CFLAGS} -o socktst_cli.$(OSNAME) $(TSTSOCK_OBJ) sysutil.o.$(OSNAME) ${LDFLAGS}

clean:
	rm -f module_mt.$(OSNAME) monitor.$(OSNAME) monitor_auto.$(OSNAME) \
		*.o.$(OSNAME)
