## config/conclude.am ## Textually included at the end of most HDF5 Makefiles.am. ## Contains build rules. # Automake needs to be taught how to build lib, progs, and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and # EXTRA_TEST variables are supplied to allow the user to force targets to # be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ $(EXTRA_PROG) TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) build-progs: $(LIB) $(PROGS) build-tests: $(LIB) $(PROGS) $(TESTS) lib progs tests check-s check-p :: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X -a $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # Tell Automake to build tests when the user types `make all' (this is # not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since # Automake won't build them automatically, either. all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. install-doc uninstall-doc: @echo "Nothing to be done." # Run each test in order, passing $(TEST_FLAGS) to the program. # Since tests are done in a shell loop, "make -i" does apply inside it. # Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop. # The timestamps give a rough idea how much time the tests use. # # Note that targets in TESTS (defined above) will be built when the user # types 'make tests' or 'make check', but only programs in TEST_PROG, # TEST_PROG_PARA, or TEST_SCRIPT will actually be executed. check-TESTS: test test _test: @$(MAKE) build-check-s @$(MAKE) build-check-p # Actual execution of check-s. build-check-s: $(LIB) $(PROGS) $(TESTS) @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi TEST_PROG_CHKEXE=$(TEST_PROG:=.chkexe_) TEST_PROG_PARA_CHKEXE=$(TEST_PROG_PARA:=.chkexe_) TEST_SCRIPT_CHKSH=$(TEST_SCRIPT:=.chksh_) TEST_SCRIPT_PARA_CHKSH=$(TEST_SCRIPT_PARA:=.chksh_) _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The .chkexe_ here is the "dummy" that prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) .chkexe_: @if test "X$@" != "X.chkexe_"; then \ echo "============================"; \ if test -e $(@:.chkexe_=.chkexe) && \ test $(@:.chkexe_=.chkexe) -nt $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ srcdir="$(srcdir)" \ $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ exit 1; \ echo ""; \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi # The .chksh_ here is the "dummy" that prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) .chksh_: @if test "X$@" != "X.chksh_"; then \ echo "============================"; \ if test -e $(@:.chksh_=.chksh) && \ test $(@:.chksh_=.chksh) -nt $(@:.chksh_=); then \ echo "No need to test $(@:.chksh_=) again."; \ else \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chksh_=) $(TEST_FLAGS)"; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chksh_=) $(TEST_FLAGS)"; \ else \ echo "Testing $(@:.chksh_=) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ $(SHELL) ./$(@:.chksh_=) $(TEST_FLAGS) \ && touch $(@:.chksh_=.chksh) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ exit 1; \ echo ""; \ echo "Finished testing $(@:.chksh_=) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi # Actual execution of check-p. build-check-p: $(LIB) $(PROGS) $(TESTS) @if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then \ echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @if test -n "$(TEST_PROG_PARA)"; then \ echo "**** Hint ****"; \ echo "Parallel test files reside in the current directory" \ "by default."; \ echo "Set HDF5_PARAPREFIX to use another directory. E.g.,"; \ echo " HDF5_PARAPREFIX=/PFS/user/me"; \ echo " export HDF5_PARAPREFIX"; \ echo " make check"; \ echo "**** end of Hint ****"; \ fi @for test in $(TEST_PROG_PARA) dummy; do \ if test $$test != dummy; then \ $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \ RUNTESTS="$(RUNPARALLEL)"; \ fi; \ done; \ test $$test = dummy || false @for test in $(TEST_SCRIPT_PARA) dummy; do \ if test $$test != dummy; then \ $(MAKE) $(AM_MAKEFLAGS) $$test.chksh_; \ fi; \ done; \ test $$test = dummy || false @if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then \ echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi # Run test with different Virtual File Driver check-vfd: @for vfd in $(VFD_LIST) dummy; do \ if test $$vfd != dummy; then \ echo "============================"; \ echo "Testing Virtual File Driver $$vfd"; \ echo "============================"; \ HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check; \ fi; \ done