# Imports:
#  PVM_ARCH   = the official pvm-name of your processor
#  ARCHCFLAGS = special cc flags
#  ARCHFFSLIB = special libs needed for getting the FORTRAN library to use pvmfs
#
SHELL	=	/bin/sh
PVMIDIR	=	../../../include
PVMLDIR	=	../../../lib/$(PVM_ARCH)
PVMFSLDIR=	../../../libc/$(PVM_ARCH)
PVMLIB	=	-lpvm3
CFLAGS	=	-g -I$(PVMIDIR) -DIMA_$(PVM_ARCH) $(ARCHCFLAGS) -I../../../src -DPVMFS
FFLAGS	=	-g
FSOBJS	=	$(PVMFSLDIR)/syscalls.o $(PVMFSLDIR)/pvmerrno.o $(PVMFSLDIR)/posix.o
LIBS	=	-g -L$(PVMLDIR) $(PVMLIB) $(ARCHFSLIB)
FLIBS2	=	-g $(ARCHFSLIB)
OBJS	=	io.o startup.o wait4fs.o
FOBJS	=	fio.o fstartup.o wait4fs.o

include ../../../conf/$(PVM_ARCH).def

all: c stdc f

c: common_r common_w independent_r independent_w syncBC_r syncBC_w  \
syncseq_r syncseq_w

stdc: common_stdc_r common_stdc_w independent_stdc_r independent_stdc_w \
syncBC_stdc_r syncBC_stdc_w syncseq_stdc_r syncseq_stdc_w

f: common_f_r common_f_w independent_f_r independent_f_w \
syncBC_f_r syncBC_f_w syncseq_f_r syncseq_f_w

files: mkfiles
	@if [ ! -f 01_r ]; \
	then \
		mkfiles; \
		mv 01_r 0_w 1_w ..; \
	else \
		exit 0; \
	fi

mkfiles: mkfiles.o
	$(CC) -o $@ mkfiles.o

mkfiles.o: ../mkfiles.c
	$(SCC) -c ../mkfiles.c

io:	$(OBJS) $(PVMLDIR)/libpvm3.a $(FSOBJS) files
	$(SCC) -o $@ $(OBJS) $(FSOBJS) $(LIBS)
	rm -f $(HOME)/pvm3/bin/$(PVM_ARCH)/$@
	-ln -s `pwd`/$@ $(HOME)/pvm3/bin/$(PVM_ARCH)

fio:	$(FOBJS) $(PVMLDIR)/libpvm3.a $(PVMLDIR)/libfpvm3.a $(FSOBJS) files
	$(FC) -o $@ $(FOBJS) $(FLIBS1) $(FSOBJS) $(FLIBS2)
	rm -f $(HOME)/pvm3/bin/$(PVM_ARCH)/$@
	-ln -s `pwd`/$@ $(HOME)/pvm3/bin/$(PVM_ARCH)

io.o: ../io.c
	$(SCC) $(CFLAGS) -c ../io.c

fio.o: ../fio.f
	$(FC) $(FFLAGS) -c ../fio.f

startup.o: ../startup.c
	$(SCC) $(CFLAGS) -c ../startup.c

fstartup.o: ../fstartup.f
	$(FC) $(FFLAGS) -c ../fstartup.f

wait4fs.o: ../wait4fs.c
	$(SCC) $(CFLAGS) -c ../wait4fs.c

common_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../common_r.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../common_r.c ../io.c; \
		cp ../common_r.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	./io 3
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[0-2].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> common_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> common_r ok <======================"; \
	fi

common_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../common_w.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../common_w.c ../io.c; \
		cp ../common_w.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	./io 2
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[01].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> common_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> common_w ok <======================"; \
	fi

independent_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../independent_r.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../independent_r.c ../io.c; \
		cp ../independent_r.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	./io 3
	@diff=`(cmp ../0.out ../file; cmp ../1.out ../file; cmp ../2.out ../file) | wc -l`; \
	if [ $$diff -ne 0 ]; \
	then \
		echo "======================> independent_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> independent_r ok <======================"; \
	fi

independent_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../independent_w.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../independent_w.c ../io.c; \
		cp ../independent_w.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	./io 2
	@wc1=`wc -l < ../file`; \
	wc2=`wc -l < ../0.out`; \
	wc3=`wc -l < ../1.out`; \
	if [ $$wc1 -ne $$wc2 -o $$wc1 -ne $$wc3 ]; \
	then \
		echo "======================> independent_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> independent_w ok <======================"; \
	fi

syncBC_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncBC_r.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../syncBC_r.c ../io.c; \
		cp ../syncBC_r.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	./io 3
	@diff=`(cmp ../0.out ../file; cmp ../1.out ../file; cmp ../2.out ../file) | wc -l`; \
	if [ $$diff -ne 0 ]; \
	then \
		echo "======================> syncBC_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncBC_r ok <======================"; \
	fi

syncBC_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncBC_w.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../syncBC_w.c ../io.c; \
		cp ../syncBC_w.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	./io 2
	@cmp -s ../0.out ../file; \
	if [ $$? -ne 0 ]; \
	then \
		echo "======================> syncBC_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncBC_w ok <======================"; \
	fi

syncseq_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncseq_r.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../syncseq_r.c ../io.c; \
		cp ../syncseq_r.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	./io 3
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[0-2].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> syncseq_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncseq_r ok <======================"; \
	fi

syncseq_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncseq_w.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../syncseq_w.c ../io.c; \
		cp ../syncseq_w.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	./io 2
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[01].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> syncseq_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncseq_w ok <======================"; \
	fi

common_stdc_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../common_stdc_r.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../common_stdc_r.c ../io.c; \
		cp ../common_stdc_r.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	./io 3
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[0-2].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> common_stdc_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> common_stdc_r ok <======================"; \
	fi

common_stdc_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../common_stdc_w.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../common_stdc_w.c ../io.c; \
		cp ../common_stdc_w.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	./io 2
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[01].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> common_stdc_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> common_stdc_w ok <======================"; \
	fi

independent_stdc_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../independent_stdc_r.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../independent_stdc_r.c ../io.c; \
		cp ../independent_stdc_r.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	./io 3
	@diff=`(cmp ../0.out ../file; cmp ../1.out ../file; cmp ../2.out ../file) | wc -l`; \
	if [ $$diff -ne 0 ]; \
	then \
		echo "======================> independent_stdc_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> independent_stdc_r ok <======================"; \
	fi

independent_stdc_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../independent_stdc_w.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../independent_stdc_w.c ../io.c; \
		cp ../independent_stdc_w.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	./io 2
	@wc1=`wc -l < ../file`; \
	wc2=`wc -l < ../0.out`; \
	wc3=`wc -l < ../1.out`; \
	if [ $$wc1 -ne $$wc2 -o $$wc1 -ne $$wc3 ]; \
	then \
		echo "======================> independent_stdc_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> independent_stdc_w ok <======================"; \
	fi

syncBC_stdc_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncBC_stdc_r.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../syncBC_stdc_r.c ../io.c; \
		cp ../syncBC_stdc_r.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	./io 3
	@diff=`(cmp ../0.out ../file; cmp ../1.out ../file; cmp ../2.out ../file) | wc -l`; \
	if [ $$diff -ne 0 ]; \
	then \
		echo "======================> syncBC_stdc_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncBC_stdc_r ok <======================"; \
	fi

syncBC_stdc_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncBC_stdc_w.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../syncBC_stdc_w.c ../io.c; \
		cp ../syncBC_stdc_w.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	./io 2
	@cmp -s ../0.out ../file; \
	if [ $$? -ne 0 ]; \
	then \
		echo "======================> syncBC_stdc_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncBC_stdc_w ok <======================"; \
	fi

syncseq_stdc_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncseq_stdc_r.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../syncseq_stdc_r.c ../io.c; \
		cp ../syncseq_stdc_r.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	./io 3
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[0-2].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> syncseq_stdc_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncseq_stdc_r ok <======================"; \
	fi

syncseq_stdc_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncseq_stdc_w.c ../io.c; \
	then \
		exit 0; \
	else \
		echo cp ../syncseq_stdc_w.c ../io.c; \
		cp ../syncseq_stdc_w.c ../io.c; \
	fi
	(cd ..; ../../lib/aimk io)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	./io 2
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[01].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> syncseq_stdc_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncseq_stdc_w ok <======================"; \
	fi

common_f_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../common_f_r.f ../fio.f; \
	then \
		exit 0; \
	else \
		echo cp ../common_f_r.f ../fio.f; \
		cp ../common_f_r.f ../fio.f; \
	fi
	(cd ..; ../../lib/aimk fio)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	touch ../0.out ../1.out ../2.out
	./fio
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[0-2].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> common_f_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> common_f_r ok <======================"; \
	fi

common_f_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../common_f_w.f ../fio.f; \
	then \
		exit 0; \
	else \
		echo cp ../common_f_w.f ../fio.f; \
		cp ../common_f_w.f ../fio.f; \
	fi
	(cd ..; ../../lib/aimk fio)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	touch ../file
	./fio
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[01].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> common_f_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> common_f_w ok <======================"; \
	fi

independent_f_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../independent_f_r.f ../fio.f; \
	then \
		exit 0; \
	else \
		echo cp ../independent_f_r.f ../fio.f; \
		cp ../independent_f_r.f ../fio.f; \
	fi
	(cd ..; ../../lib/aimk fio)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	touch ../0.out ../1.out ../2.out
	./fio
	@diff=`(cmp ../0.out ../file; cmp ../1.out ../file; cmp ../2.out ../file) | wc -l`; \
	if [ $$diff -ne 0 ]; \
	then \
		echo "======================> independent_f_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> independent_f_r ok <======================"; \
	fi

independent_f_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../independent_f_w.f ../fio.f; \
	then \
		exit 0; \
	else \
		echo cp ../independent_f_w.f ../fio.f; \
		cp ../independent_f_w.f ../fio.f; \
	fi
	(cd ..; ../../lib/aimk fio)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	touch ../file
	./fio
	@wc1=`wc -l < ../file`; \
	wc2=`wc -l < ../0.out`; \
	wc3=`wc -l < ../1.out`; \
	if [ $$wc1 -ne $$wc2 -o $$wc1 -ne $$wc3 ]; \
	then \
		echo "======================> independent_f_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> independent_f_w ok <======================"; \
	fi

syncBC_f_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncBC_f_r.f ../fio.f; \
	then \
		exit 0; \
	else \
		echo cp ../syncBC_f_r.f ../fio.f; \
		cp ../syncBC_f_r.f ../fio.f; \
	fi
	(cd ..; ../../lib/aimk fio)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	touch ../0.out ../1.out ../2.out
	./fio
	@diff=`(cmp ../0.out ../file; cmp ../1.out ../file; cmp ../2.out ../file) | wc -l`; \
	if [ $$diff -ne 0 ]; \
	then \
		echo "======================> syncBC_f_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncBC_f_r ok <======================"; \
	fi

syncBC_f_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncBC_f_w.f ../fio.f; \
	then \
		exit 0; \
	else \
		echo cp ../syncBC_f_w.f ../fio.f; \
		cp ../syncBC_f_w.f ../fio.f; \
	fi
	(cd ..; ../../lib/aimk fio)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	touch ../file
	./fio
	@cmp -s ../0.out ../file; \
	if [ $$? -ne 0 ]; \
	then \
		echo "======================> syncBC_f_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncBC_f_w ok <======================"; \
	fi

syncseq_f_r:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncseq_f_r.f ../fio.f; \
	then \
		exit 0; \
	else \
		echo cp ../syncseq_f_r.f ../fio.f; \
		cp ../syncseq_f_r.f ../fio.f; \
	fi
	(cd ..; ../../lib/aimk fio)
	cp ../01_r ../file
	rm -f ../0.out ../1.out ../2.out
	touch ../0.out ../1.out ../2.out
	./fio
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[0-2].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> syncseq_f_r problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncseq_f_r ok <======================"; \
	fi

syncseq_f_w:
	@echo "#######################" TESTING $@ "#######################"
	@if cmp -s ../syncseq_f_w.f ../fio.f; \
	then \
		exit 0; \
	else \
		echo cp ../syncseq_f_w.f ../fio.f; \
		cp ../syncseq_f_w.f ../fio.f; \
	fi
	(cd ..; ../../lib/aimk fio)
	cp ../0_w ../0.out
	cp ../1_w ../1.out
	rm -f ../file
	touch ../file
	./fio
	@wc1=`wc -l < ../file`; \
	wc2=`cat ../[01].out | wc -l`; \
	if [ $$wc1 -ne $$wc2 ]; \
	then \
		echo "======================> syncseq_f_w problem <======================"; \
		exit 1; \
	else \
		echo "======================> syncseq_f_w ok <======================"; \
	fi

clean:
	rm -f $(OBJS) io $(FOBJS) fio mkfiles mkfiles.o ../01_r ../0_w ../1_w
