# Begin tunables.

# maximum number of mantissa digits
MAXNDIG = 64

# requires ANSI compiler
CC = gcc

CFLAGS = -O -pedantic -fstrength-reduce -DMXNDIG=$(MAXNDIG)
#CFLAGS = -g -DMXNDIG=$(MAXNDIG)
# above for debugging

# End tunables.

LIBS= -lm

L = libfm$(MAXNDIG).a

.PRECIOUS: $L

SORM = fmSUPP.c fmabs.c fmacos.c fmadd.c fmadd2.c fmaddn.c fmaddp.c fmargs.c \
	fmasin.c fmatan.c fmatn2.c fmbig.c fmcomp.c fmcos.c fmcos2.c fmcosh.c \
	fmdig.c fmdim.c fmdiv.c fmdiv2.c fmdivi.c fmdm.c fmdp2m.c fmentr.c \
	fmequ.c fmexit.c fmexp.c fmexp2.c fmi2m.c fmim.c fminp.c fminp2.c \
	fminpt.c fmint.c fmipwr.c fmlg10.c fmln.c fmlni.c fmlni2.c fmm2dp.c \
	fmm2i.c fmm2sp.c fmmax.c fmmd.c fmmi.c fmmin.c fmmod.c fmmove.c \
	fmmpy.c fmmpy2.c fmmpy3.c fmmpyi.c fmname.c fmnint.c fmntr.c fmntri.c \
	fmntrj.c fmntrr.c fmout.c fmpack.c fmpi.c fmpi2.c fmprnt.c fmpwr.c \
	fmrdc.c fmrnd.c fmrslt.c fmset.c fmsign.c fmsin.c fmsin2.c fmsinh.c \
	fmsp2m.c fmsqrt.c fmsub.c fmtan.c fmtanh.c fmtrap.c fmulp.c fmunpk.c \
	fmwarn.c fmarray.c fmstring.c fmneg.c fmzero.c

OBJM = fmSUPP.o fmabs.o fmacos.o fmadd.o fmadd2.o fmaddn.o fmaddp.o fmargs.o \
	fmasin.o fmatan.o fmatn2.o fmbig.o fmcomp.o fmcos.o fmcos2.o fmcosh.o \
	fmdig.o fmdim.o fmdiv.o fmdiv2.o fmdivi.o fmdm.o fmdp2m.o fmentr.o \
	fmequ.o fmexit.o fmexp.o fmexp2.o fmi2m.o fmim.o fminp.o fminp2.o \
	fminpt.o fmint.o fmipwr.o fmlg10.o fmln.o fmlni.o fmlni2.o fmm2dp.o \
	fmm2i.o fmm2sp.o fmmax.o fmmd.o fmmi.o fmmin.o fmmod.o fmmove.o \
	fmmpy.o fmmpy2.o fmmpy3.o fmmpyi.o fmname.o fmnint.o fmntr.o fmntri.o \
	fmntrj.o fmntrr.o fmout.o fmpack.o fmpi.o fmpi2.o fmprnt.o fmpwr.o \
	fmrdc.o fmrnd.o fmrslt.o fmset.o fmsign.o fmsin.o fmsin2.o fmsinh.o \
	fmsp2m.o fmsqrt.o fmsub.o fmtan.o fmtanh.o fmtrap.o fmulp.o fmunpk.o \
	fmwarn.o fmarray.o fmstring.o fmneg.o fmzero.o

SORP = fpabs.c fpacos.c fpadd.c fpasin.c fpatan.c fpatn2.c fpbig.c fpcomp.c  \
	fpcos.c fpcosh.c fpdig.c fpdim.c fpdiv.c fpdivi.c fpdp2m.c fpequ.c  \
	fpexp.c fpi2m.c fpinp.c fpint.c fpipwr.c fplg10.c fpln.c fplni.c  \
	fpm2dp.c fpm2i.c fpm2sp.c fpmax.c fpmin.c fpmod.c fpmpy.c fpmpyi.c  \
	fpnint.c fpout.c fppi.c fpprnt.c fppwr.c fpset.c fpsign.c fpsin.c  \
	fpsinh.c fpsp2m.c fpsqrt.c fpsub.c fptan.c fptanh.c fpulp.c fparray.c \
	fpstring.c fpneg.c fpzero.c

OBJP = fpabs.o fpacos.o fpadd.o fpasin.o fpatan.o fpatn2.o fpbig.o fpcomp.o  \
	fpcos.o fpcosh.o fpdig.o fpdim.o fpdiv.o fpdivi.o fpdp2m.o fpequ.o  \
	fpexp.o fpi2m.o fpinp.o fpint.o fpipwr.o fplg10.o fpln.o fplni.o  \
	fpm2dp.o fpm2i.o fpm2sp.o fpmax.o fpmin.o fpmod.o fpmpy.o fpmpyi.o  \
	fpnint.o fpout.o fppi.o fpprnt.o fppwr.o fpset.o fpsign.o fpsin.o  \
	fpsinh.o fpsp2m.o fpsqrt.o fpsub.o fptan.o fptanh.o fpulp.o fparray.o \
	fpstring.o fpneg.o fpzero.o

T =

tt:	tt.o $T
	$(CC) -o tt tt.o $T $L -lm

test:	test.o $T
	$(CC) -o test test.o $T $L -L/usr/local/lib -lF77 -lI77 $(LIBS)

roots:	roots.o
	$(CC) -o roots roots.o $T $L -L/usr/local/lib -lF77 -lI77 $(LIBS)

lib: $L(fmabs.o) $L(fmacos.o) $L(fmadd.o) $L(fmadd2.o) $L(fmaddn.o) $L(fmaddp.o) \
	$L(fmargs.o) $L(fmasin.o) $L(fmatan.o) $L(fmatn2.o) $L(fmbig.o) \
	$L(fmcomp.o) $L(fmcos.o) $L(fmcos2.o) $L(fmcosh.o) $L(fmdig.o) $L(fmdim.o) \
	$L(fmdiv.o) $L(fmdiv2.o) $L(fmdivi.o) $L(fmdm.o) $L(fmdp2m.o) $L(fmentr.o) \
	$L(fmequ.o) $L(fmexit.o) $L(fmexp.o) $L(fmexp2.o) $L(fmi2m.o) $L(fmim.o) \
	$L(fminp.o) $L(fminp2.o) $L(fminpt.o) $L(fmint.o) $L(fmipwr.o) $L(fmlg10.o) \
	$L(fmln.o) $L(fmlni.o) $L(fmlni2.o) $L(fmm2dp.o) $L(fmm2i.o) $L(fmm2sp.o) \
	$L(fmmax.o) $L(fmmd.o) $L(fmmi.o) $L(fmmin.o) $L(fmmod.o) $L(fmmove.o) \
	$L(fmmpy.o) $L(fmmpy2.o) $L(fmmpy3.o) $L(fmmpyi.o) $L(fmname.o) $L(fmnint.o) \
	$L(fmntr.o) $L(fmntri.o) $L(fmntrj.o) $L(fmntrr.o) $L(fmout.o) $L(fmpack.o) \
	$L(fmpi.o) $L(fmpi2.o) $L(fmprnt.o) $L(fmpwr.o) $L(fmrdc.o) $L(fmrnd.o) \
	$L(fmrslt.o) $L(fmset.o) $L(fmsign.o) $L(fmsin.o) $L(fmsin2.o) $L(fmsinh.o) \
	$L(fmsp2m.o) $L(fmsqrt.o) $L(fmsub.o) $L(fmtan.o) $L(fmtanh.o) $L(fmtrap.o) \
	$L(fmulp.o) $L(fmunpk.o) $L(fmwarn.o) $L(fmSUPP.o) $L(fmstring.o) \
	$L(fmneg.o) $L(fmzero.o)
	if [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ; then ranlib $L ; fi

libp: \
	$L(fpabs.o) $L(fpacos.o) $L(fpadd.o) \
	$L(fpasin.o) $L(fpatan.o) $L(fpatn2.o) $L(fpbig.o) $L(fpcomp.o) $L(fpcos.o) \
	$L(fpcosh.o) $L(fpdig.o) $L(fpdim.o) $L(fpdiv.o) $L(fpdivi.o) $L(fpdp2m.o) \
	$L(fpequ.o) $L(fpexp.o) $L(fpi2m.o) $L(fpinp.o) $L(fpint.o) $L(fpipwr.o) \
	$L(fplg10.o) $L(fpln.o) $L(fplni.o) $L(fpm2dp.o) $L(fpm2i.o) $L(fpm2sp.o) \
	$L(fpmax.o) $L(fpmin.o) $L(fpmod.o) $L(fpmpy.o) $L(fpmpyi.o) $L(fpnint.o) \
	$L(fpout.o) $L(fppi.o) $L(fpprnt.o) $L(fppwr.o) $L(fpset.o) $L(fpsign.o) \
	$L(fpsin.o) $L(fpsinh.o) $L(fpsp2m.o) $L(fpsqrt.o) $L(fpsub.o) $L(fptan.o) \
	$L(fptanh.o) $L(fpulp.o) $L(fpstring.o) $L(fpneg.o) $L(fpzero.o)
	if [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ; then ranlib $L ; fi

tests:	libp lib test roots
	rm -f *.OUT
	./test
	./roots

# faster generation of library
fast:
	/bin/rm -f $(L)
	$(CC) $(CFLAGS) -c $(SORP)
	ar qv $(L) $(OBJP)
	/bin/rm -f $(OBJP)
	$(CC) $(CFLAGS) -c $(SORM)
	ar qv $(L) $(OBJM)
	/bin/rm -f $(OBJM)
	if [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ; then ranlib $L ; fi

clean:
	/bin/rm -f *.o roots test tt

veryclean: clean
	/bin/rm -f *.a

