# Make interface compatibility test
# Ada source use GNAT version 3.00 or higher

# Fortran compiler
# GNU g77

#FORTRAN = g77 
#LIBF = -lf2c

# Sun F77
FORTRAN = g77
LIBF = -lg2c -lm

all: base basic_type matrix_type func_type

BASIC = cxbi cxbs cxbd cxbc cxbz cxbch cxbsh cxbl

basic_type: $(BASIC) 

cxbi: cxbi.ali ifinc.o
	gnatbl cxbi.ali ifinc.o $(LIBF)

cxbs: cxbs.ali sfinc.o
	gnatbl cxbs.ali sfinc.o $(LIBF)

cxbd: cxbd.ali dfinc.o
	gnatbl cxbd.ali dfinc.o $(LIBF)

cxbc: cxbc.ali cfinc.o
	gnatbl cxbc.ali cfinc.o $(LIBF)

cxbz: cxbz.ali zfinc.o
	gnatbl cxbz.ali zfinc.o $(LIBF)

cxbch: cxbch.ali chfinc.o
	gnatbl cxbch.ali chfinc.o $(LIBF)

cxbsh: cxbsh.ali shfinc.o
	gnatbl cxbsh.ali shfinc.o $(LIBF)

cxbl: cxbl.ali lfinc.o
	gnatbl cxbl.ali lfinc.o $(LIBF)

MATRIX = cxbim cxbsm cxbdm cxbcm cxbzm cxblm

matrix_type: $(MATRIX) 

cxbim: cxbim.ali imfinc.o 
	gnatbl cxbim.ali imfinc.o $(LIBF)

cxbsm: cxbsm.ali smfinc.o
	gnatbl cxbsm.ali smfinc.o $(LIBF)

cxbdm: cxbdm.ali dmfinc.o
	gnatbl cxbdm.ali dmfinc.o $(LIBF)

cxbcm: cxbcm.ali cmfinc.o
	gnatbl cxbcm.ali cmfinc.o $(LIBF)

cxbzm: cxbzm.ali zmfinc.o
	gnatbl cxbzm.ali zmfinc.o $(LIBF)

cxblm: cxblm.ali lmfinc.o
	gnatbl cxblm.ali lmfinc.o $(LIBF)

FUNC = cxbfun1 cxbfun3
func_type: $(FUNC)

cxbfun1: cxbfun1.ali ffun.o
	gnatbl cxbfun1.ali ffun.o $(LIBF)

cxbfun3: cxbfun2.adb cxbfun2.ads cxbfun3.adb ffun.o
	gnatmake -c cxbfun2.adb
	gnatmake -c cxbfun3.adb
	gnatbl cxbfun3.ali ffun.o $(LIBF) 

base: cxbbase.ali

cxbbase.ali: cxbbase.ads
	gnatmake -c cxbbase.ads


%.ali: %.adb
	gnatgcc -c  $<
	gnatbind $@

%.o : %.f
	$(FORTRAN) -c $<

testing : $(BASIC) $(MATRIX)
	echo "Ada - Fortran interface checking" > Test.Out;\
        for file in $(BASIC) $(MATRIX) $(FUNC); do \
	  echo $$file >> Test.Out; \
	  ./$$file >> Test.Out; \
	done

clean:
	rm -f *.o *.ali $(BASIC) $(MATRIX) $(FUNC) *.c Test.Out

