
FDEMO		= fdemo
FSUBS		= fsubs
FUNC_WRAPPERS	= sfwrap_$(FSUBS)
CSUBS		= csubs
CDEMO		= cdemo
MODULE_NAME	= fsubs

OTHER_CFLAGS	= $(FCFLAGS) -g
OTHER_ALL	= $(CDEMO) $(FDEMO)
OTHER_CLEAN	= $(TEST_OUTPUT) $(GLUE).c $(TEST_BASELINE) \
  		$(MODULE_NAME).f.h fdemo cdemo *.out $(FUNC_WRAPPERS).*

sanity:
	@if [ -z $(FC) ] ; then \
	   echo "No FORTRAN compiler was found on your system." ; \
	else \
	   $(MAKE) all ; \
	fi

include ../Makefile.inc

MODULE_DEPS = $(GLUE).o $(FSUBS).o $(CSUBS).o $(FUNC_WRAPPERS).o 

EXAMPLE_SCRIPT = example.sl

demo:	$(MODULE)
	@echo
	@echo Now running the example script ...
	@echo
	$(SLSH) -n $(EXAMPLE_SCRIPT)

$(MODULE): $(MODULE_DEPS)
	@echo
	$(ELF_LINK_CMD) -o $@ $(MODULE_DEPS) $(SLANGLIB) $(FCLIBS)
	@echo

$(GLUE).o: $(GLUE).c
	@echo
	$(ELF_COMPILE) $(GLUE).c

$(GLUE).c: slirprc $(FSUBS).f $(CSUBS).h
	@echo
	@echo Generating mixed FORTRAN/C wrappers ...
	@echo
	$(SLIRP) $(FSUBS).f $(CSUBS).h

$(FSUBS).o: $(FSUBS).f
	@echo
	$(FORTRAN_COMPILE) $(FSUBS).f

TEST_SCRIPT = ./sldemo.sl
TEST_SCRIPT_REF = test.ref
DEMO_EXE_REF = test.ref
DEMO_INPUT = coeffs.dat

test:
	@if [ -z $(FC) ] ; then \
	   echo "No FORTRAN compiler was found on your system." 1>&2 ; \
	else \
	   $(MAKE) test_fdemo test_cdemo test_sldemo test_misc ; \
	fi

$(FUNC_WRAPPERS).o: $(FUNC_WRAPPERS).f

# C compiler used to link cdemo, to help avoid main() issues with FORTRAN
CDEMO_DEPS = $(CDEMO).o $(FSUBS).o $(FUNC_WRAPPERS).o $(CSUBS).o
$(CDEMO): $(MODULE) $(CDEMO_DEPS)
	$(CC) -o $@ $(CDEMO_DEPS) $(FCLIBS)

$(FDEMO): $(FSUBS).o $(FDEMO).f
	$(FORTRAN_LINK) $(FCFLAGS) -o $@ $@.f $(FSUBS).o $(FCLIBS)

test_cdemo: $(CDEMO)
	./$(CDEMO) < $(DEMO_INPUT) > $(CDEMO).out
	diff $(DEMO_EXE_REF) $(CDEMO).out
	@echo

test_fdemo: $(FDEMO)
	@# Avoid problems with FORTRAN compilers that choke on read-only files
	@chmod +w $(DEMO_INPUT)
	./$(FDEMO) > $(FDEMO).out
	diff -b $(DEMO_EXE_REF) $(FDEMO).out
	@echo

test_sldemo: $(MODULE) $(TEST_SCRIPT) $(TEST_SCRIPT_REF)
	$(SLSH) -n $(TEST_SCRIPT) < $(DEMO_INPUT) > $(TEST_SCRIPT).out 2>&1
	diff $(TEST_SCRIPT_REF) $(TEST_SCRIPT).out

test_misc: $(MODULE) misc.sl
	$(SLSH) -n misc.sl > misc.out 2>&1
	diff -b misc.ref misc.out
