#  standard CUTEst compilation and run instructions

#  Nick Gould, for GALAHAD production
#  This version: 2024-04-08

#  compilation agenda

all: $(package)

#  basic packages

$(package): $(package)_$(PRECIS)
	@printf ' %-21s\n' "CUTEst: $(package) ($(PRECIS) $(SUCC)"
$(package)_single: $($(PACKAGE))
$(package)_double: $($(PACKAGE))
$(package)_quadruple: $($(PACKAGE))

#  compile tools

tools:
	( cd ../tools ; $(MAKE) -f $(CUTEST)/makefiles/$(VERSION) \
                     cutest PRECIS=$(PRECIS) PWD=$(PWD)/../tools )
utools:
	( cd ../tools ; $(MAKE) -f $(CUTEST)/makefiles/$(VERSION) \
                     cutest_unconstrained PRECIS=$(PRECIS) PWD=$(PWD)/../tools )
ctools:
	( cd ../tools ; $(MAKE) -f $(CUTEST)/makefiles/$(VERSION) \
                     cutest_constrained PRECIS=$(PRECIS) PWD=$(PWD)/../tools )

#  compile test example

test_cutest: test_cutest_unconstrained test_cutest_constrained

test_cutest_unconstrained:
	( cd ../test ; $(MAKE) -f $(CUTEST)/makefiles/$(VERSION) \
            test_cutest_unconstrained PRECIS=$(PRECIS) PWD=$(PWD)/../test )

test_cutest_constrained:
	( cd ../test ; $(MAKE) -f $(CUTEST)/makefiles/$(VERSION) \
            test_cutest_constrained PRECIS=$(PRECIS) PWD=$(PWD)/../test )

test_cutest_quadratic:
	( cd ../test ; $(MAKE) -f $(CUTEST)/makefiles/$(VERSION) \
            test_cutest_quadratic PRECIS=$(PRECIS) PWD=$(PWD)/../test )

#  run example tests

run_unconstrained_test: tools test_cutest_unconstrained $(package) \
                          $(OBJ)/$(package)_test.o
	echo " Test of unconstrained $(package)"
	cd $(OBJ) ; $(FORTRAN) $(RUNFFLAGS) $(SPECIAL) -o run_test \
            $(package)_main.o $(package)_test.o $(U_TEST) -L$(OBJ) $(LIBS)
	ln -fs $(CUTEST)/src/test/u_OUTSDIF.d ../$(package)/OUTSDIF.d
	- $(OBJ)/run_test >& ../$(package)/u_test.output
	cat ../$(package)/u_test.output
	rm $(OBJ)/run_test ../$(package)/OUTSDIF.d $(OBJ)/$(package)_test.o

run_constrained_test: tools test_cutest_constrained $(package) \
                        $(OBJ)/$(package)_test.o
	echo " Test of constrained $(package)"
	cd $(OBJ) ; $(FORTRAN) $(RUNFFLAGS) $(SPECIAL) -o run_test \
            $(package)_main.o $(package)_test.o $(C_TEST) -L$(OBJ) $(LIBS)
	ln -fs $(CUTEST)/src/test/c_OUTSDIF.d ../$(package)/OUTSDIF.d
	- $(OBJ)/run_test >& ../$(package)/u_test.output
	cat ../$(package)/u_test.output
	rm $(OBJ)/run_test ../$(package)/OUTSDIF.d $(OBJ)/$(package)_test.o

run_both_tests: tools test_cutest $(package) $(OBJ)/$(package)_test.o
	echo " Test of unconstrained $(package)"
	cd $(OBJ) ; $(FORTRAN) $(RUNFFLAGS) $(SPECIAL) -o run_test \
            $(package)_main.o $(package)_test.o $(U_TEST) -L$(OBJ) $(LIBS)
	ln -fs $(CUTEST)/src/test/u_OUTSDIF.d ../$(package)/OUTSDIF.d
	- $(OBJ)/run_test >& ../$(package)/u_test.output
	cat ../$(package)/u_test.output
	echo " Test of constrained $(package)"
	cd $(OBJ) ; $(FORTRAN) $(RUNFFLAGS) $(SPECIAL) -o run_test \
            $(package)_main.o $(package)_test.o $(C_TEST) -L$(OBJ) $(LIBS)
	ln -fs $(CUTEST)/src/test/c_OUTSDIF.d ../$(package)/OUTSDIF.d
	- $(OBJ)/run_test >& ../$(package)/u_test.output
	cat ../$(package)/u_test.output
	rm $(OBJ)/run_test ../$(package)/OUTSDIF.d $(OBJ)/$(package)_test.o

run_qp_test: tools test_cutest_quadratic $(package) $(OBJ)/$(package)_test.o
	echo " Test of quadratic programming $(package)"
	cd $(OBJ) ; $(FORTRAN) $(RUNFFLAGS) $(SPECIAL) -o run_test \
            $(package)_main.o $(package)_test.o $(Q_TEST) -L$(OBJ) $(LIBS)
	ln -fs $(CUTEST)/src/test/q_OUTSDIF.d ../$(package)/OUTSDIF.d
	- $(OBJ)/run_test >& ../$(package)/q_test.output
	cat ../$(package)/q_test.output
	rm $(OBJ)/run_test ../$(package)/OUTSDIF.d $(OBJ)/$(package)_test.o

#  book keeping

clean:
	@printf ' %-9s\t\t' "Cleaning"
	$(RM) $(OBJ)/$(package)*
	@printf '[ OK ]\n'

cleanall:
	@printf ' %-14s\t\t' \
          "Removing all $(PRECIS) precision object and module files"
	$(RM) $(OBJ)/* $(MOD)/*
	@printf '[ OK ]\n'

