# This is an alternate makefile that creates and uses a library, gl.a,
# consisting of all the non-test object modules in this TOMS submission.

# Some systems need to invoke ranlib, others do not.  If your
# system lacks ranlib, simply comment out the ranlib invocation below.

.SUFFIXES: .f .o
FFLAGS = -u
F77 = f77
L =

# DPSRC = double-precision non-test source files
# SPSRC = single-precision non-test source files
DPSRC = dmdc.f dglfg.f dglfgb.f dgletc.f
SPSRC = smdc.f sglfg.f sglfgb.f sgletc.f

.f.o:
	$(F77) -c $(FFLAGS) $*.f

both: out sout

gl.a: $(DPSRC) $(SPSRC)
	$(F77) -c $(FFLAGS) $?
	for i in $?; do o=`basename $$i .f`.o; ar ruv gl.a $$o; rm $$o; done
	ranlib gl.a

out: madsen.out madsenb.out pmain.out mnpex1.out mnpex1b.out \
	mnpex2.out mnpex2b.out rent1.out rent1b.out rent2.out rent2b.out

sout: smadsen.out smadsenb.out spmain.out smnpex1.out smnpex1b.out \
	smnpex2.out mnpex2b.out srent1.out srent1b.out srent2.out srent2b.out

dmdc.f: dmdc.f0
	true  # Obtain dmcd.f from dmdc.f0 by activating the statements
	false # appropriate to your machine

smdc.f: smdc.f0
	true  # Obtain dmcd.f from smdc.f0 by activating the statements
	false # appropriate to your machine

madsen.out: madsen.f gl.a
	$(F77) madsen.f gl.a $L
	a.out >$@

madsenb.out: madsenb.f gl.a
	$(F77) madsenb.f gl.a $L
	a.out >$@

pmain: dpmain.o mecdf.o gl.a
	$(F77) dpmain.o mecdf.o gl.a $L -o $@

pmain.out: pmain pmain.in
	pmain <pmain.in >$@

mlmnp: mlmnp.o mecdf.o mnpsubs.o gl.a
	$(F77) mlmnp.o mecdf.o mnpsubs.o gl.a $L -o $@

mlmnpb: mlmnpb.o mecdf.o mnpsubs.o gl.a
	$(F77) mlmnpb.o mecdf.o mnpsubs.o gl.a $L -o $@

mnpex1.out mnpex1b.out: mlmnp mlmnpb mnpex1.fu1 daganzo.fu2
	rm -f fort.?
	ln mnpex1.fu1 fort.1
	ln daganzo.fu2 fort.2
	mlmnp >mnpex1.out
	mlmnpb >mnpex1b.out

mnpex2.out mnpex2b.out: mlmnp mlmnpb mnpex2.fu1 daganzo.fu2
	rm -f fort.?
	ln mnpex2.fu1 fort.1
	ln daganzo.fu2 fort.2
	mlmnp >mnpex2.out
	mlmnpb >mnpex2b.out

rent1.out rent1b.out: mlmnp mlmnpb rent1.fu1 rent.fu2
	rm -f fort.?
	ln rent1.fu1 fort.1
	ln rent.fu2 fort.2
	mlmnp >rent1.out
	mlmnpb >rent1b.out

rent2.out rent2b.out: mlmnp mlmnpb rent2.fu1 rent.fu2
	rm -f fort.?
	ln rent2.fu1 fort.1
	ln rent.fu2 fort.2
	mlmnp >rent2.out
	mlmnpb >rent2b.out

# single-precision runs...

smadsen.out: smadsen.f gl.a
	$(F77) smadsen.f gl.a $L
	a.out >$@

smadsenb.out: smadsenb.f gl.a
	$(F77) smadsenb.f gl.a $L
	a.out >$@

spmain: spmain.o smecdf.o gl.a
	$(F77) spmain.o smecdf.o gl.a $L -o $@

spmain.out: spmain pmain.in
	spmain <pmain.in >$@

smlmnp: smlmnp.o smecdf.o smnpsubs.o gl.a
	$(F77) smlmnp.o smecdf.o smnpsubs.o gl.a $L -o $@

smlmnpb: smlmnpb.o smecdf.o smnpsubs.o gl.a
	$(F77) smlmnpb.o smecdf.o smnpsubs.o gl.a $L -o $@

smnpex1.out smnpex1b.out: smlmnp smlmnpb mnpex1.fu1 daganzo.fu2
	rm -f fort.?
	ln mnpex1.fu1 fort.1
	ln daganzo.fu2 fort.2
	smlmnp >smnpex1.out
	smlmnpb >smnpex1b.out

smnpex2.out smnpex2b.out: smlmnp smlmnpb mnpex2.fu1 daganzo.fu2
	rm -f fort.?
	ln mnpex2.fu1 fort.1
	ln daganzo.fu2 fort.2
	smlmnp >smnpex2.out
	smlmnpb >smnpex2b.out

srent1.out srent1b.out: smlmnp smlmnpb rent1.fu1 rent.fu2
	rm -f fort.?
	ln rent1.fu1 fort.1
	ln rent.fu2 fort.2
	smlmnp >srent1.out
	smlmnpb >srent1b.out

srent2.out srent2b.out: smlmnp smlmnpb rent2.fu1 rent.fu2
	rm -f fort.?
	ln rent2.fu1 fort.1
	ln rent.fu2 fort.2
	smlmnp >srent2.out
	smlmnpb >srent2b.out

clean:
	rm -f *.out *.o pmain mlmnp mlmnpb spmain smlmnp smlmnpb

veryclean:
	rm -f *.out *.o pmain mlmnp mlmnpb spmain smlmnp smlmnpb gl.a
