# Compiler and linker Configuration
CC       	= gcc
LINK.c		= gcc	
INCLUDES 	= -I. -I../include -I/usr/local/include
MYCFLAGS	= -W -g -MMD
CFLAGS   	= $(MYCFLAGS)
CFLAGS         += -DDEBUG -D_REENTRANT
CFLAGS         += $(INCLUDES)
LFLAGS          = -L/usr/local/lib
LIBS	       += -lthread -lnsl 
RPCGENFLAGS     = -N -C -A

res_man_main.o:CFLAGS += -Wall
res_man_svc_proc.o:CFLAGS += -Wall
utilities.o:CFLAGS += -Wall
buffer.o:CFLAGS += -Wall
file.o:CFLAGS += -Wall
error.o:CFLAGS += -Wall
resources.o:CFLAGS += -Wall

RM = res_man
TM = trans_man
LGM = log_man

HANDWRITTEN = $(RM)_main.c $(RM)_svc_proc.c utilities.c buffer.c file.c \
	 error.c resources.c \
	table.c  cursor.c  filebase.c  index.c  init.c \
	rm_select.c rm_difference.c RMprivate.c undo_redo.c \
	lock.c otherlocks.c

SOURCES = $(RM)_svc.c $(RM)_xdr.c $(TM)_clnt.c \
	 $(TM)_xdr.c $(LGM)_clnt.c \
	 $(HANDWRITTEN)

OBJS = $(SOURCES:.c=.o)
DEPENDENCIES = $(SOURCES:.c=.d)

$(TM)_xdr.o : CFLAGS += -D_DBS_PROT_XDR_

all:	$(RM)

$(RM): $(OBJS)
	$(CC) -o $(RM) $^ $(LFLAGS) $(LIBS)

$(RM)_svc.o : $(RM)_svc.c ../include/$(RM).h

$(TM)_clnt.o : $(TM)_clnt.c ../include/$(TM).h

$(LGM)_clnt.o : $(LGM)_clnt.c ../include/$(LGM).h

res_man_main.o : res_man_main.c ../include/$(LGM).h

#
# Utilities
#
utilities.o: ../DBS/utilities.h
	$(CC) -c $(CFLAGS) ../DBS/utilities.c

utilities.d: ../DBS/utilities.c
	touch $@

#
# General	
#
%: %.o
	$(CC) -o $@ $^ $(LFLAGS) $(LIBS)

%.d: %.c
	touch $@

%.h: %.x
	rpcgen $(RPCGENFLAGS) -h -o $@ $^

%_xdr.c: ../include/%.x
	rpcgen $(RPCGENFLAGS) -c -o $@ $^

%_clnt.c: ../include/%.x
	rpcgen $(RPCGENFLAGS) -l -o $@ $^

%_svc.c: ../include/%.x
	rpcgen $(RPCGENFLAGS) -m -o $@ $^

#
# Cleanup
#
clean:
	rm -f *.o ../include/$(RM).h $(RM) ../include/$(TM).h \
		  ../include/$(LGM).h

really_clean: clean
	rm -f *.d $(RM)_svc.c $(RM)_xdr.c $(TM)_svc.c $(TM)_xdr.c \
		  $(TM)_clnt.c $(TM)_xdr.c $(LGM)_clnt.c foo bar

include $(DEPENDENCIES)
