#
# rpcexamples
# Example M3 programs that use the SunRPC stub generator for Modula-3.
#
# Copyright (c) 1991, 1992 Xerox Corporation.  All rights reserved.
#
# Use and copying of this software and preparation of derivative works
# based upon this software are permitted.  Any distribution of this
# software or derivative works must comply with all applicable United
# States export control laws.  This software is made available AS IS, and
# Xerox Corporation makes no warranty about the software, its performance
# or its conformity to any specification.
#
#
DESTDIR=/project/m3chest

PROGS = SimpleClient SimpleServer \
	RecoverableSimpleClient RecoverableSimpleServer \
	MultiClient MultiServer StripMultiClient StripMultiServer \
	ExpandSimpleClient ExpandSimpleServer ComplexClient ComplexServer
M3RPCGEN=../m3rpcgen/m3rpcgen
M3LIBS=-L../m3rpc -lm3rpc
M3FLAGS=-D.:../m3rpc -w1 -g

all: $(PROGS)
install: $(PROGS)
depend:
clean:
	rm -f *.o *.io *.mo *.ix *.mx $(PROGS)
	rm -f *_c.m3 *_s.m3 *_x.i3 *_x.m3
	rm -f simple.i3 rsimple.i3 multiprog.i3 multidefns.i3
	rm -f stripmultiprog.i3 stripmultidefns.i3 expandsimple.i3
	rm -f fortytwo.i3 fourtwo.i3 fortyone.i3

#
# Simple RPC example
#
simple.i3 simple_c.m3 simple_s.m3: simple.x
	$(M3RPCGEN) simple.x

SimpleSrcs = simple.i3 simple_c.m3 simple_s.m3

SimpleClient: $(SimpleSrcs) SimpleClient.m3 FORCE
	m3 -make -why $(M3FLAGS) $(SimpleSrcs) SimpleClient.m3 -o SimpleClient $(M3LIBS)

SimpleServer: $(SimpleSrcs) SimpleServer.m3 FORCE
	m3 -make -why $(M3FLAGS) $(SimpleSrcs) SimpleServer.m3 -o SimpleServer $(M3LIBS)


#
# Simple recoverable RPC example
#
rsimple.i3 rsimple_c.m3 rsimple_s.m3: rsimple.x
	$(M3RPCGEN) -r rsimple.x

RecoverableSimpleSrcs = rsimple.i3 rsimple_c.m3 rsimple_s.m3

RecoverableSimpleClient: $(RecoverableSimpleSrcs) RecoverableSimpleClient.m3 FORCE
	m3 -make -why $(M3FLAGS) $(RecoverableSimpleSrcs) RecoverableSimpleClient.m3 -o RecoverableSimpleClient $(M3LIBS)

RecoverableSimpleServer: $(RecoverableSimpleSrcs) RecoverableSimpleServer.m3 FORCE
	m3 -make -why $(M3FLAGS) $(RecoverableSimpleSrcs) RecoverableSimpleServer.m3 -o RecoverableSimpleServer $(M3LIBS)


#
# Multiple module RPC example
#
multiprog.i3 multiprog_c.m3 multiprog_s.m3: multiprog.x
	$(M3RPCGEN) multiprog.x
multidefns.i3 multidefns_x.i3 multidefns_x.m3: multidefns.x
	$(M3RPCGEN) multidefns.x

MultiSrcs = multiprog.i3 multiprog_c.m3 multiprog_s.m3 \
	multidefns.i3 multidefns_x.i3 multidefns_x.m3

MultiClient: $(MultiSrcs) MultiClient.m3 FORCE
	m3 -make -why $(M3FLAGS) $(MultiSrcs) -o MultiClient MultiClient.m3 $(M3LIBS)

MultiServer: $(MultiSrcs) MultiServer.m3 FORCE
	m3 -make -why $(M3FLAGS) $(MultiSrcs) -o MultiServer MultiServer.m3 $(M3LIBS)


#
# Stripped names RPC example
#
stripmultiprog.i3 stripmultiprog_c.m3 stripmultiprog_s.m3: stripmultiprog.x
	$(M3RPCGEN) -p stripmultiprog.x
stripmultidefns.i3 stripmultidefns_x.i3 stripmultidefns_x.m3: stripmultidefns.x
	$(M3RPCGEN) -p stripmultidefns.x

StripMultiSrcs = stripmultiprog.i3 stripmultiprog_c.m3 stripmultiprog_s.m3 \
	stripmultidefns.i3 stripmultidefns_x.i3 stripmultidefns_x.m3

StripMultiClient: $(StripMultiSrcs) StripMultiClient.m3 FORCE
	m3 -make -why $(M3FLAGS) $(StripMultiSrcs) -o StripMultiClient StripMultiClient.m3 $(M3LIBS)

StripMultiServer: $(StripMultiSrcs) StripMultiServer.m3 FORCE
	m3 -make -why $(M3FLAGS) $(StripMultiSrcs) -o StripMultiServer StripMultiServer.m3 $(M3LIBS)

#
# Expanded input arguments RPC example
#
expandsimple.i3 expandsimple_x.i3 expandsimple_x.m3 expandsimple_c.m3 expandsimple_s.m3: expandsimple.x
	$(M3RPCGEN) -e expandsimple.x

ExpandSimpleSrcs = expandsimple.i3 expandsimple_x.i3 expandsimple_x.m3 \
	expandsimple_c.m3 expandsimple_s.m3

ExpandSimpleClient: $(ExpandSimpleSrcs) ExpandSimpleClient.m3 FORCE
	m3 -make -why $(M3FLAGS) $(ExpandSimpleSrcs) -o ExpandSimpleClient ExpandSimpleClient.m3 $(M3LIBS)

ExpandSimpleServer: $(ExpandSimpleSrcs) ExpandSimpleServer.m3 FORCE
	m3 -make -why $(M3FLAGS) $(ExpandSimpleSrcs) -o ExpandSimpleServer ExpandSimpleServer.m3 $(M3LIBS)

#
# RPC example using all data types possible
#
fortytwo.i3 fortytwo_x.i3 fortytwo_x.m3 fortytwo_c.m3 fortytwo_s.m3: fortytwo.x
	$(M3RPCGEN) -p -e fortytwo.x
fourtwo.i3 fourtwo_x.i3 fourtwo_x.m3: fourtwo.x
	$(M3RPCGEN) -p -e fourtwo.x
fortyone.i3: fortyone.x
	$(M3RPCGEN) -p -e fortyone.x

ComplexSrcs = fortytwo.i3 fortytwo_x.i3 fortytwo_x.m3 \
	fortytwo_c.m3 fortytwo_s.m3 \
	fourtwo.i3 fourtwo_x.i3 fourtwo_x.m3 \
	fortyone.i3

ComplexClient: ComplexClient.m3 $(ComplexSrcs) FORCE
	m3 -make -why $(M3FLAGS) ComplexClient.m3 $(ComplexSrcs) -o ComplexClient $(M3LIBS)

ComplexServer: ComplexServer.m3 $(ComplexSrcs) FORCE
	m3 -make -why $(M3FLAGS) ComplexServer.m3 $(ComplexSrcs) -o ComplexServer $(M3LIBS)


FORCE:
