AR=ar
ARFLAGS=
CC=cc
CFLAGS=-I. -I../source/ -I../generated/ -I/usr/include -I/usr/include/sys
# /usr/include and /usr/include/sys because of undetermined path
# of file unistd.h used in mc.c
SOURCE=../source/
GENERATED=../generated/


#
# Complete Installation
#

inst:		target/mc target/libmclocal.a target/libmcremote.a target/mcfktns.h target/mclocal.h target/mcremote.h target/mctypes.h lib
		echo >$@ installed

target/mc:	mc
		cp $? $@

target/libmclocal.a:	libmclocal.a
		cp $? $@

target/libmcremote.a:	libmcremote.a
		cp $? $@

target/mcfktns.h:	$(SOURCE)mcfktns.h
		cp $? $@

target/mclocal.h:	$(SOURCE)mclocal.h
		cp $? $@

target/mcremote.h:	$(SOURCE)mcremote.h
		cp $? $@

target/mctypes.h:	$(SOURCE)mctypes.h
		cp $? $@



#
# Compiler
#

mc:		y.tab.o mc.o expr.o lex.yy.o symbtbl.o
		$(CC) $(CFLAGS) mc.o expr.o lex.yy.o symbtbl.o y.tab.o -o $@

$(GENERATED)y.tab.h $(GENERATED)y.tab.c:	$(SOURCE)modula.yac
		rcp $(SOURCE)modula.yac pauke:.
		rsh pauke yacc -v -d modula.yac
		rcp pauke:y.output $(GENERATED).
		rcp pauke:y.tab.c $(GENERATED).
		rcp pauke:y.tab.h $(GENERATED).
		
y.tab.o:	$(GENERATED)y.tab.c $(GENERATED)y.tab.h $(SOURCE)mc.h $(SOURCE)symbtbl.h $(SOURCE)lex.yy.h $(SOURCE)expr.h $(SOURCE)mctypes.h $(SOURCE)mcfktns.h os.h
		$(CC) $(CFLAGS) -c $(GENERATED)y.tab.c -o $@

$(GENERATED)lex.yy.c:	$(SOURCE)modula.lex
		lex -v $(SOURCE)modula.lex
		mv lex.yy.c $(GENERATED)

lex.yy.o:	$(GENERATED)lex.yy.c $(SOURCE)lex.yy.h $(SOURCE)mc.h $(SOURCE)symbtbl.h $(GENERATED)y.tab.h $(SOURCE)mctypes.h
		$(CC) $(CFLAGS) -c $(GENERATED)lex.yy.c -o $@

symbtbl.o:	$(SOURCE)symbtbl.c $(SOURCE)symbtbl.h $(SOURCE)mc.h $(SOURCE)lex.yy.h $(GENERATED)y.tab.h $(SOURCE)expr.h $(SOURCE)mctypes.h os.h
		$(CC) $(CFLAGS) -c $(SOURCE)symbtbl.c -o $@

expr.o:		$(SOURCE)expr.c $(SOURCE)expr.h $(SOURCE)symbtbl.h $(SOURCE)mc.h $(SOURCE)lex.yy.h $(GENERATED)y.tab.h $(SOURCE)mctypes.h os.h
		$(CC) $(CFLAGS) -c $(SOURCE)expr.c -o $@

mc.o:		$(SOURCE)mc.c $(SOURCE)mc.h $(SOURCE)symbtbl.h $(SOURCE)lex.yy.h $(GENERATED)y.tab.h $(SOURCE)expr.h $(SOURCE)mctypes.h $(SOURCE)mcfktns.h os.h
		$(CC) $(CFLAGS) -c $(SOURCE)mc.c -o $@

#
# Libraries
#

lib:		libmclocal.a libmcremote.a
		echo >$@ libraries created

libmclocal.a:	mcfktns.o rpcfktns.o mcrpc_svc.o mcrpc_clnt.o mcrpc_xdr.o rpclocal.o mclocal.o
		$(AR) $(ARFLAGS) vru $@ $?
		ranlib $@

libmcremote.a:	mcfktns.o rpcfktns.o mcrpc_clnt.o mcrpc_xdr.o rpcremot.o mcremote.o
		$(AR) $(ARFLAGS) vru $@ $?
		ranlib $@

mcfktns.o:	$(SOURCE)mcfktns.c $(SOURCE)mcfktns.h $(SOURCE)mctypes.h $(SOURCE)rpcfktns.h os.h $(SOURCE)mclocal.h
		$(CC) $(CFLAGS) -c $(SOURCE)mcfktns.c -o $@

rpcfktns.o:	$(SOURCE)rpcfktns.c $(SOURCE)rpcfktns.h $(GENERATED)mcrpc.h
		$(CC) $(CFLAGS) -c $(SOURCE)rpcfktns.c -o $@

rpclocal.o:	$(SOURCE)rpclocal.c $(SOURCE)rpclocal.h $(SOURCE)rpcfktns.h $(GENERATED)mcrpc.h $(SOURCE)mcfktns.h $(SOURCE)mctypes.h $(SOURCE)mclocal.h
		$(CC) $(CFLAGS) -c $(SOURCE)rpclocal.c -o $@

mclocal.o:	$(SOURCE)mclocal.c $(SOURCE)mclocal.h $(SOURCE)rpclocal.h $(SOURCE)rpcfktns.h $(GENERATED)mcrpc.h $(SOURCE)mcfktns.h $(SOURCE)mctypes.h os.h
		$(CC) $(CFLAGS) -c $(SOURCE)mclocal.c -o $@

rpcremot.o:	$(SOURCE)rpcremot.c $(SOURCE)rpcremot.h $(SOURCE)rpcfktns.h $(GENERATED)mcrpc.h $(SOURCE)mcfktns.h $(SOURCE)mctypes.h os.h
		$(CC) $(CFLAGS) -c $(SOURCE)rpcremot.c -o $@

mcremote.o:	$(SOURCE)mcremote.c $(SOURCE)mcremote.h
		$(CC) $(CFLAGS) -c $(SOURCE)mcremote.c -o $@

$(GENERATED)mcrpc.x:	$(SOURCE)mcrpc.x
		cp $? $@

$(GENERATED)mcrpc.h:	$(GENERATED)mcrpc.x
		rpcgen -h -o $@ $?

$(GENERATED)mcrpc_svc.c:	$(GENERATED)mcrpc.x
		rpcgen -m -o $@ $?

mcrpc_svc.o:	$(GENERATED)mcrpc_svc.c
		$(CC) $(CFLAGS) -Drpc_service_stop_1=rpc_service_stop_server_site -Dprocmod_show_active_1=procmod_show_active_server_site -Dprocmod_register_1=procmod_register_server_site -Dprocmod_unregister_1=procmod_unregister_server_site -c $? -o $@

$(GENERATED)mcrpc_clnt.c:	$(GENERATED)mcrpc.x
		rpcgen -l -o $@ $?

mcrpc_clnt.o:	$(GENERATED)mcrpc_clnt.c
		$(CC) $(CFLAGS) -c $? -o $@

$(GENERATED)mcrpc_xdr.c:	$(GENERATED)mcrpc.x
		rpcgen -c -o $@ $?

mcrpc_xdr.o:	$(GENERATED)mcrpc_xdr.c
		$(CC) $(CFLAGS) -c $? -o $@
