# | # o---------------------------------------------------------------------o # | # | MAD makefile - numdiff tester settings # | # o---------------------------------------------------------------------o # | # | Methodical Accelerator Design # | # | Copyright (c) 2011+ CERN, mad@cern.ch # | # | For more information, see http://cern.ch/mad # | # o---------------------------------------------------------------------o # | # | $Id$ # | # # numdiff paths # ifndef NDIFF NDIFFCMD := $(firstword $(wildcard \ $(ND)_dev$(ARCH)$(BINARY_EXT) $(ND)_dev$(BINARY_EXT) \ $(ND)-dev$(ARCH)$(BINARY_EXT) $(ND)-dev$(BINARY_EXT) \ $(ND)$(ARCH)$(BINARY_EXT) $(ND)$(BINARY_EXT) )) NDIFF_R := $(if $(NDIFFCMD),..$/..$/$(NDIFFCMD),$(ND)$(BINARY_EXT)) NDIFF_I := $(if $(NDIFFCMD),.$/$(NDIFFCMD),$(ND)$(BINARY_EXT)) else NDIFF_R := $(NDIFF) NDIFF_I := $(NDIFF) endif # # numdiff summary # NDSUM = tests-summary.txt # # numdiff flags # quiet, ingore blanks, check constraints, list mode, serie mode, debug mode, test title NDFLAGS = -q -b -c -l -n $(if $(call eq,$(NDDEBUG),yes),-debug,) \ $(if $(call eq,$(NDTRACE),yes),-trace,) -a ..$/$(NDSUM) -t $@ # # init-test macro # define init-test $_ $(RM) tests$/$(NDSUM) \ $(if $(call eq,$(OSTYPE),Windows),2> _err.txt && $(RM) _err.txt,) && \ $(call ND_tr,$(NDIFF_I) -q -a tests$/$(NDSUM)) endef # # fini-test macro # define fini-test $_ $(CAT) tests$/$(NDSUM) endef # # run-test macro # # $@ = test name & directory NDFILES = $(basename $(NDFILES_REF)) NDFILES_OUT = $(addsuffix .out,$(NDFILES)) $(NDFILES) NDFILES_REF = $(wildcard tests/$@/$@.ref) \ $(filter-out tests/$@/$@.ref, $(sort $(wildcard tests/$@/*.ref))) # Remarks line-by-line # check for .ref files unless NREF=yes # check for testsuite name ; go to test directory # delete generated files + cleanup output on Windows (case file not found) # run the test command (generate outputs) # for each reference file, diff with the generated file + constraints define run-test $(if $(call eq,$(NREF),yes),,$(call exists,$(NDFILES_REF),invalid test $@ -- no reference file found)) -$_ $(if $(TESTSUITE),echo [ $(TESTSUITE) ] &&,) cd tests$/$@ && \ $(RM) $(notdir $(NDFILES_OUT)) \ $(if $(call eq,$(OSTYPE),Windows),2> _err.txt && $(RM) _err.txt,) && \ $(TESTCMD) > $@.out && \ $(call ND_tr,$(NDIFF_R) $(NDFLAGS)) $(notdir $(NDFILES)) || \ echo "error: $@ failed, check tests$/$@$/$@.out for details" endef # end of makefile