diff options
author | James Laird <jlaird@hdfgroup.org> | 2005-07-21 19:28:11 (GMT) |
---|---|---|
committer | James Laird <jlaird@hdfgroup.org> | 2005-07-21 19:28:11 (GMT) |
commit | 7236935a9d666926b5843f317a84743ef3d4126a (patch) | |
tree | 21d7f4f7d0fbc1348c374ba39f9b2ca095841e81 | |
parent | bb31e94a924a1b3f6f1da6c10ffe95029c87d5c5 (diff) | |
download | hdf5-7236935a9d666926b5843f317a84743ef3d4126a.zip hdf5-7236935a9d666926b5843f317a84743ef3d4126a.tar.gz hdf5-7236935a9d666926b5843f317a84743ef3d4126a.tar.bz2 |
[svn-r11095] Purpose:
Configuration feature
Description:
Serial test output is now stored in log files and printed when all tests
in a directory complete, or when a test fails. This should make test output
more readable and useful.
Also made changes to clean up ii_files directories that are created by some
C++ compilers/linkers.
Also fixed a few minor Makefile bugs.
Solution:
When serial tests run, their output is saved in *.log or *.logsh. While
running, tests only print when they begin and when they complete; their
more specific output (from the log file) is printed if the test fails or
when all tests have completed.
Comments welcome.
Platforms tested:
mir, modi4 (parallel and serial), copper, shanti
42 files changed, 1937 insertions, 572 deletions
diff --git a/Makefile.am b/Makefile.am index a05876b..7374a1c 100755 --- a/Makefile.am +++ b/Makefile.am @@ -113,12 +113,17 @@ clean-local: fi; \ done +# Some C++ compilers/linkers will create a directory named ii_files in +# the root directory, which should be cleaned. mostlyclean-local: @@SETX@; for d in examples perform; do \ if test -f $$d/Makefile; then \ (cd $$d && $(MAKE) $(AM_MAKEFLAGS) mostlyclean) || exit 1; \ fi; \ - done + done; \ + if test -d ii_files; then \ + $(RM) -rf ii_files; \ + fi # 'make install-all' also installs examples install-all: @@ -143,9 +148,6 @@ uninstall-doc: # `make check-install' or `make installcheck' checks that examples can # be successfully built -check-install: - $(MAKE) $(AM_MAKEFLAGS) installcheck - installcheck-local: (cd examples && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; diff --git a/Makefile.in b/Makefile.in index a61a837..50f5e18 100644 --- a/Makefile.in +++ b/Makefile.in @@ -311,7 +311,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + @BUILD_PARALLEL_CONDITIONAL_FALSE@TESTPARALLEL_DIR = # Define subdirectories to build. @@ -758,6 +767,12 @@ uninstall-info: uninstall-info-recursive uninstall-info-am uninstall-local +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Define rules for lib, progs, check, and tests. # These simply involve recursing into subdirectories. test _test: check @@ -793,12 +808,17 @@ clean-local: fi; \ done +# Some C++ compilers/linkers will create a directory named ii_files in +# the root directory, which should be cleaned. mostlyclean-local: @@SETX@; for d in examples perform; do \ if test -f $$d/Makefile; then \ (cd $$d && $(MAKE) $(AM_MAKEFLAGS) mostlyclean) || exit 1; \ fi; \ - done + done; \ + if test -d ii_files; then \ + $(RM) -rf ii_files; \ + fi # 'make install-all' also installs examples install-all: @@ -823,9 +843,6 @@ uninstall-doc: # `make check-install' or `make installcheck' checks that examples can # be successfully built -check-install: - $(MAKE) $(AM_MAKEFLAGS) installcheck - installcheck-local: (cd examples && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; diff --git a/c++/Makefile.in b/c++/Makefile.in index 8130dbf..cbd29d9 100644 --- a/c++/Makefile.in +++ b/c++/Makefile.in @@ -281,7 +281,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + @BUILD_CXX_CONDITIONAL_TRUE@SUBDIRS = src test DIST_SUBDIRS = src test examples @@ -615,6 +624,12 @@ uninstall-info: uninstall-info-recursive tags tags-recursive uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Clean and mostlyclean need to recurse into examples directory clean-local: if test -f examples/Makefile; then \ @@ -638,14 +653,16 @@ installcheck-local: # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -657,6 +674,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -685,8 +704,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -694,26 +720,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -721,21 +753,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in index 047ae78..687e5b0 100644 --- a/c++/examples/Makefile.in +++ b/c++/examples/Makefile.in @@ -273,11 +273,19 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # These are the files that 'make clean' (and derivatives) will remove from this # directory. Since automake doesn't know about the examples, we need to # tell it to clean the example programs, too. -MOSTLYCLEANFILES = *.chkexe *.chksh *.h5 $(EXTRA_PROG:=.o) +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) *.h5 $(EXTRA_PROG:=.o) # Use h5c++ to build examples, instead of reguar C++ compiler H5CPP = $(bindir)/h5c++ @@ -484,6 +492,12 @@ uninstall-am: uninstall-info-am uninstall-local uninstall uninstall-am uninstall-info-am uninstall-local +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Some of the examples depend on files created by running other examples readdata.chkexe_: create.chkexe_ chunks.chkexe_: extend_ds.chkexe_ @@ -533,14 +547,16 @@ h5group: $(srcdir)/h5group.cpp # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -552,6 +568,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -580,8 +598,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -589,26 +614,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -616,21 +647,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/c++/src/Makefile.am b/c++/src/Makefile.am index 585f9c1..5c9a2de 100644 --- a/c++/src/Makefile.am +++ b/c++/src/Makefile.am @@ -53,6 +53,14 @@ include_HEADERS=H5Cpp.h H5AbstractDs.h H5AtomType.h H5Attribute.h H5Classes.h # distclean. DISTCLEANFILES=h5c++ libhdf5.settings +# Some C++ compilers/linkers (PGI?) create a directory named "ii_files" that +# holds *.ii files, which are template entity instantiations. +# This entire directory should be cleaned. +mostlyclean-local: + if test -d ii_files; then \ + $(RM) -rf ii_files; \ + fi + # Mark this directory as part of the C++ API HDF_CXX=yes diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in index a9c1266..ffea11b 100644 --- a/c++/src/Makefile.in +++ b/c++/src/Makefile.in @@ -315,7 +315,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include src directory INCLUDES = -I$(top_srcdir)/src @@ -685,7 +694,7 @@ maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool + mostlyclean-libtool mostlyclean-local pdf: pdf-am @@ -708,22 +717,38 @@ uninstall-am: uninstall-binSCRIPTS uninstall-includeHEADERS \ install-libLTLIBRARIES install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-binSCRIPTS \ - uninstall-includeHEADERS uninstall-info-am \ - uninstall-libLTLIBRARIES + mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ + pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binSCRIPTS uninstall-includeHEADERS \ + uninstall-info-am uninstall-libLTLIBRARIES + +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + +# Some C++ compilers/linkers (PGI?) create a directory named "ii_files" that +# holds *.ii files, which are template entity instantiations. +# This entire directory should be cleaned. +mostlyclean-local: + if test -d ii_files; then \ + $(RM) -rf ii_files; \ + fi # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -735,6 +760,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -763,8 +790,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -772,26 +806,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -799,21 +839,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/c++/test/Makefile.am b/c++/test/Makefile.am index a4c2cfc..43194e5 100644 --- a/c++/test/Makefile.am +++ b/c++/test/Makefile.am @@ -39,4 +39,12 @@ testhdf5_SOURCES=testhdf5.cpp tattr.cpp tfile.cpp th5s.cpp h5cpputil.cpp # Tell conclude.am that these are C++ tests. HDF_CXX=yes +# Some C++ compilers/linkers (PGI?) create a directory named "ii_files" that +# holds *.ii files, which are template entity instantiations. +# This entire directory should be cleaned. +mostlyclean-local: + if test -d ii_files; then \ + $(RM) -rf ii_files; \ + fi + include $(top_srcdir)/config/conclude.am diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in index 30eb6db..5167c34 100644 --- a/c++/test/Makefile.in +++ b/c++/test/Makefile.in @@ -304,7 +304,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include src, test, and c++/src directories INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/test -I$(top_srcdir)/c++/src @@ -577,7 +586,7 @@ maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool + mostlyclean-libtool mostlyclean-local pdf: pdf-am @@ -598,20 +607,36 @@ uninstall-am: uninstall-info-am install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am - + mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ + pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am + + +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + +# Some C++ compilers/linkers (PGI?) create a directory named "ii_files" that +# holds *.ii files, which are template entity instantiations. +# This entire directory should be cleaned. +mostlyclean-local: + if test -d ii_files; then \ + $(RM) -rf ii_files; \ + fi # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -623,6 +648,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -651,8 +678,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -660,26 +694,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -687,21 +727,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/config/commence.am b/config/commence.am index 6a3da3f..fc13cfb 100644 --- a/config/commence.am +++ b/config/commence.am @@ -54,4 +54,18 @@ AUTOMAKE=/afs/ncsa/projects/hdf/packages/automake_1.9.5/Linux_2.4/bin/automake AUTOCONF=/afs/ncsa/projects/hdf/packages/autoconf_2.59/Linux_2.4/bin/autoconf # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES=*.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES=$(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck diff --git a/config/conclude.am b/config/conclude.am index f3c0da1..9553fce 100644 --- a/config/conclude.am +++ b/config/conclude.am @@ -16,14 +16,16 @@ 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -35,6 +37,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -68,8 +72,16 @@ TEST_SCRIPT_CHKSH=$(TEST_SCRIPT:=.chksh_) TEST_SCRIPT_PARA_CHKSH=$(TEST_SCRIPT_PARA:=.chksh_) _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done + -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -77,26 +89,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -104,21 +122,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/examples/Makefile.in b/examples/Makefile.in index ee73209..dfac23d 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -273,9 +273,18 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # We need to tell automake what to clean -MOSTLYCLEANFILES = *.chkexe *.chksh *.h5 *.raw *.meta *.clog *.o +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) *.h5 *.raw *.meta *.clog \ + *.o @BUILD_PARALLEL_CONDITIONAL_TRUE@TEST_PROG_PARA = ph5example # Example programs. @@ -489,6 +498,12 @@ uninstall-am: uninstall-info-am uninstall-local uninstall uninstall-am uninstall-info-am uninstall-local +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Additional dependencies for each program are listed below. $(EXTRA_PROG): $(LIBHDF5) @BUILD_PARALLEL_CONDITIONAL_TRUE@ $(H5CC_PP) $(CFLAGS) -o $@ $(srcdir)/$@.c; @@ -547,14 +562,16 @@ h5_dtransform: $(srcdir)/h5_dtransform.c # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -566,6 +583,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -594,8 +613,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -603,26 +629,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -630,21 +662,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/fortran/Makefile.in b/fortran/Makefile.in index 69a0d9b..127300a 100644 --- a/fortran/Makefile.in +++ b/fortran/Makefile.in @@ -285,7 +285,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + @BUILD_PARALLEL_CONDITIONAL_TRUE@TESTPARALLEL_DIR = testpar # Subdirectories in build order, not including examples directory @@ -624,6 +633,12 @@ uninstall-info: uninstall-info-recursive tags tags-recursive uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Clean and mostlyclean need to recurse into examples directory clean-local: if test -f examples/Makefile; then \ @@ -647,14 +662,16 @@ installcheck-local: # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -666,6 +683,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -694,8 +713,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -703,26 +729,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -730,21 +762,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in index 22ee3ed..b9404dc 100644 --- a/fortran/examples/Makefile.in +++ b/fortran/examples/Makefile.in @@ -273,9 +273,17 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Tell automake which files to clean -MOSTLYCLEANFILES = *.chkexe *.chksh $(EXTRA_PROG:=.o) +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) $(EXTRA_PROG:=.o) # Compile parallel fortran examples only if parallel is enabled @BUILD_PARALLEL_CONDITIONAL_TRUE@TEST_PROG_PARA = ph5example @@ -490,6 +498,12 @@ uninstall-am: uninstall-info-am uninstall-local uninstall uninstall-am uninstall-info-am uninstall-local +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Some examples depend on files created by other examples. grpdsetexample.chkexe_: grpsexample.chkexe_ refregexample.chkexe_: refobjexample.chkexe_ @@ -555,14 +569,16 @@ ph5example: ph5example.f90 # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -574,6 +590,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -602,8 +620,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -611,26 +636,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -638,21 +669,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/fortran/src/Makefile.am b/fortran/src/Makefile.am index 83e71e8..cc46d1c 100644 --- a/fortran/src/Makefile.am +++ b/fortran/src/Makefile.am @@ -20,9 +20,9 @@ include $(top_srcdir)/config/commence.am # Include src directory in both Fortran and C flags (C compiler is used -# for linking) +# for linking). INCLUDES = -I$(top_srcdir)/src -AM_FCFLAGS=-I$(top_srcdir)/src +AM_FCFLAGS=-I$(top_srcdir)/src -I$(top_srcdir)/src/fortran AM_FCLIBS=$(LIBHDF5) @@ -124,11 +124,6 @@ H5fortran_types.f90 H5f90i_gen.h: H5match_types.c H5fort_type_defines.h $(MAKE) $(AM_MAKEFLAGS) H5match_types$(EXEEXT) $(RUNSERIAL) ./H5match_types$(EXEEXT) - -# JAMES: does it need to work like this? $(MAKE) $(AM_MAKEFLAGS) H5fort_type_defines.h -# JAMES $(MAKE) $(AM_MAKEFLAGS) H5match_types$(EXEEXT) -# JAMES $(RUNSERIAL) ./H5match_types$(EXEEXT) - # H5fort_type_defines.h is created by running H5fortran_detect. # Obviously, H5fortran_detect needs to be built first. H5fort_type_defines.h: H5fortran_detect$(EXEEXT) diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in index 879c5f0..5fb6ecf 100644 --- a/fortran/src/Makefile.in +++ b/fortran/src/Makefile.in @@ -340,17 +340,25 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # H5fortran_types.f90 and H5f90i.h are automatically generaed by # H5match_types, and must be cleaned explicitly. H5fort_type_defines.h # is generated by H5fortran_detect -MOSTLYCLEANFILES = *.chkexe *.chksh H5fortran_types.f90 H5f90i_gen.h \ - H5fort_type_defines.h H5fortran_detect.f90 +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) H5fortran_types.f90 \ + H5f90i_gen.h H5fort_type_defines.h H5fortran_detect.f90 # Include src directory in both Fortran and C flags (C compiler is used -# for linking) +# for linking). INCLUDES = -I$(top_srcdir)/src -AM_FCFLAGS = -I$(top_srcdir)/src +AM_FCFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/fortran AM_FCLIBS = $(LIBHDF5) # Fortran libraries are linked statically to solve a build problem. @@ -765,6 +773,12 @@ uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \ uninstall-settingsDATA +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Fortran module files can have different extensions and different names # (e.g., different capitalizations) on different platforms. Write rules # for them explicitly rather than trying to teach automake about them. @@ -800,10 +814,6 @@ H5fortran_types.f90 H5f90i_gen.h: H5match_types.c H5fort_type_defines.h $(MAKE) $(AM_MAKEFLAGS) H5match_types$(EXEEXT) $(RUNSERIAL) ./H5match_types$(EXEEXT) -# JAMES: does it need to work like this? $(MAKE) $(AM_MAKEFLAGS) H5fort_type_defines.h -# JAMES $(MAKE) $(AM_MAKEFLAGS) H5match_types$(EXEEXT) -# JAMES $(RUNSERIAL) ./H5match_types$(EXEEXT) - # H5fort_type_defines.h is created by running H5fortran_detect. # Obviously, H5fortran_detect needs to be built first. H5fort_type_defines.h: H5fortran_detect$(EXEEXT) @@ -844,14 +854,16 @@ HDF5mpio.lo: $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5Aff.lo \ # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -863,6 +875,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -891,8 +905,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -900,26 +921,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -927,21 +954,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/fortran/test/Makefile.in b/fortran/test/Makefile.in index 5c4e3ab..06dbb96 100644 --- a/fortran/test/Makefile.in +++ b/fortran/test/Makefile.in @@ -342,9 +342,17 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files -MOSTLYCLEANFILES = *.chkexe *.chksh *.h5 *.tmp +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) *.h5 *.tmp # Include files AM_FCFLAGS = -I$(top_builddir)/fortran/src $(F9XMODFLAG)$(top_builddir)/fortran/src @@ -807,16 +815,24 @@ uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES uninstall-am uninstall-info-am uninstall-libLTLIBRARIES +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -828,6 +844,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -856,8 +874,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -865,26 +890,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -892,21 +923,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/fortran/testpar/Makefile.in b/fortran/testpar/Makefile.in index b461725..374c2cb 100644 --- a/fortran/testpar/Makefile.in +++ b/fortran/testpar/Makefile.in @@ -297,7 +297,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include files AM_FCFLAGS = -I$(top_srcdir)/fortran/src -I$(top_srcdir)/fortran/test $(F9XMODFLAG)$(top_builddir)/fortran/src @@ -575,16 +584,24 @@ uninstall-am: uninstall-info-am tags uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -596,6 +613,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -624,8 +643,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -633,26 +659,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -660,21 +692,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/Makefile.in b/hl/Makefile.in index 91f1ddc..5e6b384 100755 --- a/hl/Makefile.in +++ b/hl/Makefile.in @@ -277,7 +277,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + @BUILD_FORTRAN_CONDITIONAL_TRUE@FORTRAN_DIR = fortran @BUILD_CXX_CONDITIONAL_TRUE@CXX_DIR = c++ @BUILD_HDF5_HL_CONDITIONAL_TRUE@SUBDIRS = src test $(CXX_DIR) $(FORTRAN_DIR) @@ -610,16 +619,24 @@ uninstall-info: uninstall-info-recursive tags tags-recursive uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -631,6 +648,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -659,8 +678,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -668,26 +694,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -695,21 +727,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/c++/Makefile.in b/hl/c++/Makefile.in index 801b497..b5fb124 100644 --- a/hl/c++/Makefile.in +++ b/hl/c++/Makefile.in @@ -282,7 +282,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + SUBDIRS = src test # Automake needs to be taught how to build lib, progs, and tests targets. @@ -613,16 +622,24 @@ uninstall-info: uninstall-info-recursive tags tags-recursive uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -634,6 +651,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -662,8 +681,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -671,26 +697,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -698,21 +730,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/c++/src/Makefile.in b/hl/c++/src/Makefile.in index b965230..e6b857f 100644 --- a/hl/c++/src/Makefile.in +++ b/hl/c++/src/Makefile.in @@ -304,7 +304,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include src directory INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/hl/src @@ -635,16 +644,24 @@ uninstall-am: uninstall-includeHEADERS uninstall-info-am \ uninstall-info-am uninstall-libLTLIBRARIES +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -656,6 +673,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -684,8 +703,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -693,26 +719,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -720,21 +752,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/c++/test/Makefile.in b/hl/c++/test/Makefile.in index c044eef..efce9d9 100644 --- a/hl/c++/test/Makefile.in +++ b/hl/c++/test/Makefile.in @@ -298,7 +298,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include directories INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/hl/src -I$(top_srcdir)/hl/c++/src -I$(top_srcdir)/test @@ -584,16 +593,24 @@ uninstall-am: uninstall-info-am tags uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -605,6 +622,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -633,8 +652,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -642,26 +668,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -669,21 +701,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/fortran/Makefile.in b/hl/fortran/Makefile.in index bfef25d..f58bf2f 100644 --- a/hl/fortran/Makefile.in +++ b/hl/fortran/Makefile.in @@ -277,7 +277,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + SUBDIRS = src test # Automake needs to be taught how to build lib, progs, and tests targets. @@ -608,16 +617,24 @@ uninstall-info: uninstall-info-recursive tags tags-recursive uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -629,6 +646,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -657,8 +676,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -666,26 +692,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -693,21 +725,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/fortran/src/Makefile.in b/hl/fortran/src/Makefile.in index 40205f9..e945d4e 100644 --- a/hl/fortran/src/Makefile.in +++ b/hl/fortran/src/Makefile.in @@ -298,7 +298,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/hl/src -I$(top_builddir)/hl/src \ -I$(top_srcdir)/fortran/src -I$(top_builddir)/fortran/src @@ -626,6 +635,12 @@ uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \ uninstall-libLTLIBRARIES uninstall-local +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + #libhdf5hl_fortran_la_LIBADD=$(LIBH5_HL) # Fortran module files can have different extensions and different names @@ -661,14 +676,16 @@ H5TBff.lo: $(srcdir)/H5TBff.f90 # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -680,6 +697,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -708,8 +727,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -717,26 +743,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -744,21 +776,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/fortran/test/Makefile.in b/hl/fortran/test/Makefile.in index afbcd3a..594253a 100644 --- a/hl/fortran/test/Makefile.in +++ b/hl/fortran/test/Makefile.in @@ -297,9 +297,18 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files. -MOSTLYCLEANFILES = *.chkexe *.chksh dsetf[1-4].h5 f1img.h5 f1tab.h5 +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) dsetf[1-4].h5 f1img.h5 \ + f1tab.h5 AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src -I$(top_srcdir)/hl/src AM_FCFLAGS = -I$(top_builddir)/fortran/src -I$(top_builddir)/hl/fortran/src $(F9XMODFLAG)$(top_builddir)/fortran/src $(F9XMODFLAG)$(top_builddir)/hl/fortran/src @@ -575,16 +584,24 @@ uninstall-am: uninstall-info-am tags uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -596,6 +613,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -624,8 +643,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -633,26 +659,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -660,21 +692,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/src/Makefile.in b/hl/src/Makefile.in index 4668a19..56a47b8 100644 --- a/hl/src/Makefile.in +++ b/hl/src/Makefile.in @@ -295,7 +295,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Add include directories to the C preprocessor flags AM_CPPFLAGS = -I$(top_srcdir)/src @@ -623,16 +632,24 @@ uninstall-am: uninstall-includeHEADERS uninstall-info-am \ uninstall-info-am uninstall-libLTLIBRARIES +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -644,6 +661,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -672,8 +691,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -681,26 +707,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -708,21 +740,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/test/Makefile.in b/hl/test/Makefile.in index 64b32a4..0e9ee01 100644 --- a/hl/test/Makefile.in +++ b/hl/test/Makefile.in @@ -307,9 +307,17 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files. These files are the ones created by running `make test'. -MOSTLYCLEANFILES = *.chkexe *.chksh combine_tables[1-2].h5 \ +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) combine_tables[1-2].h5 \ test_ds[1-6].h5 test_image[1-3].h5 test_lite[1-2].h5 \ test_table.h5 test_packet_table.h5 @@ -609,16 +617,24 @@ uninstall-am: uninstall-info-am tags uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -630,6 +646,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -658,8 +676,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -667,26 +692,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -694,21 +725,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/hl/tools/gif2h5/Makefile.in b/hl/tools/gif2h5/Makefile.in index 20ff80b..b5b639d 100644 --- a/hl/tools/gif2h5/Makefile.in +++ b/hl/tools/gif2h5/Makefile.in @@ -305,7 +305,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include src and tools/lib directories INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/tools/lib @@ -618,16 +627,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -639,6 +656,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -667,8 +686,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -676,26 +702,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -703,21 +735,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/perform/Makefile.in b/perform/Makefile.in index 8657b64..b05499f 100644 --- a/perform/Makefile.in +++ b/perform/Makefile.in @@ -326,7 +326,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/test -I$(top_srcdir)/tools/lib @BUILD_PARALLEL_CONDITIONAL_TRUE@TEST_PROG_PARA = h5perf @@ -677,16 +686,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-binPROGRAMS uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -698,6 +715,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -726,8 +745,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -735,26 +761,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -762,21 +794,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/src/Makefile.in b/src/Makefile.in index 2920b67..d280803 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -340,10 +340,18 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files -MOSTLYCLEANFILES = *.chkexe *.chksh H5detect.o H5detect.lo H5detect \ - H5Tinit.o H5Tinit.lo H5Tinit.c +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) H5detect.o H5detect.lo \ + H5detect H5Tinit.o H5Tinit.lo H5Tinit.c # Add libtool shared library version numbers to the HDF5 library # See libtool versioning documentation online. @@ -915,6 +923,12 @@ uninstall-am: uninstall-includeHEADERS uninstall-info-am \ uninstall-settingsDATA +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Error header generation # # Actually, H5Einit.h, H5Eterm.h, H5Edefin.h and H5Epubgen.h all @@ -937,14 +951,16 @@ H5Tinit.c: H5detect # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -956,6 +972,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -984,8 +1002,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -993,26 +1018,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -1020,21 +1051,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/test/Makefile.am b/test/Makefile.am index 6247d1a..a6693fe 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -29,7 +29,9 @@ check_SCRIPTS = $(TEST_SCRIPT) # These are our main targets. They should be listed in the order to be # executed, generally most specific tests to least specific tests. -TEST_PROG=testhdf5 lheap ohdr stab gheap cache b+tree btree2 blocktrack sheap \ +# As an exception, long-running tests should occur earlier in the list. +# This gives them more time to run when tests are executing in parallel. +TEST_PROG=testhdf5 lheap ohdr stab gheap btree2 cache b+tree blocktrack sheap \ pool hyperslab istore bittests dt_arith \ dtypes dsets cmpd_dset extend external links unlink big mtime \ fillval mount flush1 flush2 enum \ diff --git a/test/Makefile.in b/test/Makefile.in index ce95a9b..df37afe 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -71,8 +71,8 @@ libh5test_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libh5test_la_OBJECTS = h5test.lo testframe.lo libh5test_la_OBJECTS = $(am_libh5test_la_OBJECTS) am__EXEEXT_1 = testhdf5$(EXEEXT) lheap$(EXEEXT) ohdr$(EXEEXT) \ - stab$(EXEEXT) gheap$(EXEEXT) cache$(EXEEXT) b+tree$(EXEEXT) \ - btree2$(EXEEXT) blocktrack$(EXEEXT) sheap$(EXEEXT) \ + stab$(EXEEXT) gheap$(EXEEXT) btree2$(EXEEXT) cache$(EXEEXT) \ + b+tree$(EXEEXT) blocktrack$(EXEEXT) sheap$(EXEEXT) \ pool$(EXEEXT) hyperslab$(EXEEXT) istore$(EXEEXT) \ bittests$(EXEEXT) dt_arith$(EXEEXT) dtypes$(EXEEXT) \ dsets$(EXEEXT) cmpd_dset$(EXEEXT) extend$(EXEEXT) \ @@ -493,22 +493,31 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files. These files are the ones created by setting the # HDF5_NOCLEANUP environment variable and running `make test' without # specifying a file prefix or low-level driver. Changing the file # prefix or low-level driver with environment variables will influence # the temporary file name in ways that the makefile is not aware of. -MOSTLYCLEANFILES = *.chkexe *.chksh cmpd_dset.h5 compact_dataset.h5 \ - dataset.h5 extend.h5 istore.h5 tfile[1-4].h5 th5s[1-3].h5 \ - lheap.h5 ohdr.h5 stab[1-2].h5 extern_[1-3].h5 \ - extern_[1-4][ab].raw gheap[0-4].h5 dt_arith[1-2] links.h5 \ - links[1-3].h5 big.data big[0-9][0-9][0-9][0-9][0-9].h5 \ - dtypes[1-8].h5 dt_arith[1-2].h5 tattr.h5 tselect.h5 mtime.h5 \ - unlink.h5 unicode.h5 fillval_[0-9].h5 fillval.raw \ - mount_[0-9].h5 testmeta.h5 ttime.h5 trefer[1-3].h5 tvltypes.h5 \ - tvlstr.h5 tvlstr2.h5 flush.h5 enum1.h5 titerate.h5 ttsafe.h5 \ - tarray1.h5 tgenprop.h5 tmisc[0-9]*.h5 set_extent_read.h5 \ +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) cmpd_dset.h5 \ + compact_dataset.h5 dataset.h5 extend.h5 istore.h5 \ + tfile[1-4].h5 th5s[1-3].h5 lheap.h5 ohdr.h5 stab[1-2].h5 \ + extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5 \ + dt_arith[1-2] links.h5 links[1-3].h5 big.data \ + big[0-9][0-9][0-9][0-9][0-9].h5 dtypes[1-8].h5 \ + dt_arith[1-2].h5 tattr.h5 tselect.h5 mtime.h5 unlink.h5 \ + unicode.h5 fillval_[0-9].h5 fillval.raw mount_[0-9].h5 \ + testmeta.h5 ttime.h5 trefer[1-3].h5 tvltypes.h5 tvlstr.h5 \ + tvlstr2.h5 flush.h5 enum1.h5 titerate.h5 ttsafe.h5 tarray1.h5 \ + tgenprop.h5 tmisc[0-9]*.h5 set_extent_read.h5 \ set_extent_create.h5 getname.h5 getname[1-3].h5 sec2_file.h5 \ family_file000[0-3][0-9].h5 multi_file-[rs].h5 core_file \ new_move_[ab].h5 ntypes.h5 dangle.h5 error_test.h5 \ @@ -523,7 +532,9 @@ check_SCRIPTS = $(TEST_SCRIPT) # These are our main targets. They should be listed in the order to be # executed, generally most specific tests to least specific tests. -TEST_PROG = testhdf5 lheap ohdr stab gheap cache b+tree btree2 blocktrack sheap \ +# As an exception, long-running tests should occur earlier in the list. +# This gives them more time to run when tests are executing in parallel. +TEST_PROG = testhdf5 lheap ohdr stab gheap btree2 cache b+tree blocktrack sheap \ pool hyperslab istore bittests dt_arith \ dtypes dsets cmpd_dset extend external links unlink big mtime \ fillval mount flush1 flush2 enum \ @@ -1023,6 +1034,12 @@ uninstall-am: uninstall-info-am tags uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # Additional target for running timing test timings _timings: testmeta @for timing in $(TIMINGS) dummy; do \ @@ -1037,14 +1054,16 @@ flush2.chkexe_: flush1.chkexe_ # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -1056,6 +1075,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -1084,8 +1105,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -1093,26 +1121,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -1120,21 +1154,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/testpar/Makefile.in b/testpar/Makefile.in index a672310..147a05f 100644 --- a/testpar/Makefile.in +++ b/testpar/Makefile.in @@ -306,12 +306,20 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files # MPItest.h5 is from t_mpi # Para*.h5 are from testphdf # *.clog are from MPE option -MOSTLYCLEANFILES = *.chkexe *.chksh MPItest.h5 Para*.h5 *.clog +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) MPItest.h5 Para*.h5 *.clog INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/test # Test programs and scripts. These are our main targets. @@ -614,16 +622,24 @@ uninstall-am: uninstall-info-am tags uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -635,6 +651,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -663,8 +681,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -672,26 +697,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -699,21 +730,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/Makefile.in b/tools/Makefile.in index 95b14cf..4d5182e 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -282,7 +282,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # All subdirectories SUBDIRS = lib h5dump h5diff h5ls misc gifconv h5import h5repack h5jam @@ -615,16 +624,24 @@ uninstall-info: uninstall-info-recursive tags tags-recursive uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -636,6 +653,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -664,8 +683,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -673,26 +699,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -700,21 +732,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/gifconv/Makefile.in b/tools/gifconv/Makefile.in index 20ff80b..b5b639d 100644 --- a/tools/gifconv/Makefile.in +++ b/tools/gifconv/Makefile.in @@ -305,7 +305,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include src and tools/lib directories INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/tools/lib @@ -618,16 +627,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -639,6 +656,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -667,8 +686,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -676,26 +702,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -703,21 +735,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/h5diff/Makefile.in b/tools/h5diff/Makefile.in index accb120..b5e7c41 100644 --- a/tools/h5diff/Makefile.in +++ b/tools/h5diff/Makefile.in @@ -313,10 +313,19 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files. *.h5 are generated by h5diff. They should # be copied to the testfiles/ directory if update is required -MOSTLYCLEANFILES = *.chkexe *.chksh *.h5 expect_sorted actual_sorted +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) *.h5 expect_sorted \ + actual_sorted # Include src and tools/lib directories INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/tools/lib @@ -656,16 +665,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-binPROGRAMS uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -677,6 +694,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -705,8 +724,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -714,26 +740,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -741,21 +773,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/h5dump/Makefile.in b/tools/h5dump/Makefile.in index fd8d44e..f8d1b96 100644 --- a/tools/h5dump/Makefile.in +++ b/tools/h5dump/Makefile.in @@ -306,10 +306,18 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files. *.h5 are generated by h5dumpgentest. They should # copied to the testfiles/ directory if update is required. -MOSTLYCLEANFILES = *.chkexe *.chksh *.h5 +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) *.h5 # Include files in /src directory and /tools/lib directory INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/tools/lib @@ -632,16 +640,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-binPROGRAMS uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -653,6 +669,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -681,8 +699,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -690,26 +715,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -717,21 +748,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/h5import/Makefile.in b/tools/h5import/Makefile.in index 0e501c4..4f1a039 100755 --- a/tools/h5import/Makefile.in +++ b/tools/h5import/Makefile.in @@ -306,7 +306,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include src and tools/lib directories INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/tools/lib @@ -625,16 +634,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-binPROGRAMS uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -646,6 +663,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -674,8 +693,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -683,26 +709,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -710,21 +742,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/h5jam/Makefile.in b/tools/h5jam/Makefile.in index d8054b0..6d0c4a7 100644 --- a/tools/h5jam/Makefile.in +++ b/tools/h5jam/Makefile.in @@ -301,7 +301,15 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh *.h5 *.txt +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) *.h5 *.txt # # Copyright by the Board of Trustees of the University of Illinois. @@ -649,16 +657,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-binPROGRAMS uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -670,6 +686,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -698,8 +716,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -707,26 +732,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -734,21 +765,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/h5ls/Makefile.in b/tools/h5ls/Makefile.in index 838665f..37187e3 100644 --- a/tools/h5ls/Makefile.in +++ b/tools/h5ls/Makefile.in @@ -299,7 +299,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include src and tools/lib directories INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/tools/lib @@ -605,16 +614,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -626,6 +643,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -654,8 +673,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -663,26 +689,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -690,21 +722,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/h5repack/Makefile.in b/tools/h5repack/Makefile.in index 8bbfaf0..cc8452c 100644 --- a/tools/h5repack/Makefile.in +++ b/tools/h5repack/Makefile.in @@ -321,10 +321,18 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files. *.h5 are generated by h5repack. They should # copied to the testfiles/ directory if update is required. -MOSTLYCLEANFILES = *.chkexe *.chksh *.h5 +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) *.h5 # Include src, test, and tools/lib directories INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/test -I$(top_srcdir)/tools/lib @@ -682,16 +690,24 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -703,6 +719,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -731,8 +749,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -740,26 +765,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -767,21 +798,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/lib/Makefile.in b/tools/lib/Makefile.in index b3ed9cd..8509c3d 100644 --- a/tools/lib/Makefile.in +++ b/tools/lib/Makefile.in @@ -303,7 +303,16 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. -MOSTLYCLEANFILES = *.chkexe *.chksh +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) + # Include files in /src directory INCLUDES = -I$(top_srcdir)/src @@ -622,16 +631,24 @@ uninstall-am: uninstall-info-am tags uninstall uninstall-am uninstall-info-am +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -643,6 +660,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -671,8 +690,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -680,26 +706,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -707,21 +739,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ diff --git a/tools/misc/Makefile.in b/tools/misc/Makefile.in index 1dad6ab..0f0eded 100644 --- a/tools/misc/Makefile.in +++ b/tools/misc/Makefile.in @@ -326,12 +326,20 @@ H5FC = $(bindir)/h5fc H5FC_PP = $(bindir)/h5pfc # .chkexe and .chksh files are used to mark tests that have run successfully. +# Serial tests create .log and .logsh files. It's important only to clean log +# files generated by HDF5's tests, because the .log suffix is used for +# other files (e.g., config.log)! # Temporary files. *.h5 are generated by h5repart_gentest. They should # copied to the testfiles/ directory if update is required. fst_family*.h5 # and scd_family*.h5 were created by setting the HDF5_NOCLEANUP variable. -MOSTLYCLEANFILES = *.chkexe *.chksh *.h5 ../testfiles/fst_family*.h5 \ - ../testfiles/scd_family*.h5 +MOSTLYCLEANFILES = $(TEST_PROG_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_PROG_PARA_CHKEXE:.chkexe_=.chkexe) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.chksh) \ + $(TEST_SCRIPT_PARA_CHKSH:.chksh_=.chksh) \ + $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh) *.h5 \ + ../testfiles/fst_family*.h5 ../testfiles/scd_family*.h5 # Include src directory INCLUDES = -I$(top_srcdir)/src @@ -706,6 +714,12 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-local +# check-install is a synonym for installcheck. +# Add this build rule here (rather than in conclude.am, where build rules +# normally go) because it should be included in the top-level Makefile.am +# as well. +check-install: installcheck + install-exec-local: $(INSTALL) h5cc $(bindir)/$(H5CC_NAME) uninstall-local: @@ -717,14 +731,16 @@ h5redeploy: h5redeploy.in # 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) +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., Fortran type detection) +build-lib: $(BUILT_SOURCES) $(LIB) +build-progs: $(BUILT_SOURCES) $(LIB) $(PROGS) +build-tests: $(BUILT_SOURCES) $(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 \ + if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done @@ -736,6 +752,8 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -764,8 +782,15 @@ build-check-s: $(LIB) $(PROGS) $(TESTS) fi _exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + @for d in dummy $(TEST_PROG_CHKEXE:.chkexe_=.log) \ + $(TEST_SCRIPT_CHKSH:.chksh_=.logsh); do \ + if test $$d != dummy && test $$d != .log && \ + test $$d != .logsh; then \ + cat `basename $$d`; \ + fi; \ + done -# The .chkexe_ here is the "dummy" that prevents the target from being +# The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ @@ -773,26 +798,32 @@ $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $(@:.chkexe_=)$(EXEEXT); then \ echo "No need to test $(@:.chkexe_=)$(EXEEXT) again."; \ else \ + echo "============================" > $(@:.chkexe_=.log); \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "Fortran API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "C++ API: $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log);\ else \ echo "Testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ + echo "$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) Test Log" >> $(@:.chkexe_=.log); \ fi; \ - echo "============================"; \ + echo "============================" >> $(@:.chkexe_=.log); \ srcdir="$(srcdir)" \ - $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) \ + $(RUNTESTS) ./$(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS) 2>&1 >> $(@:.chkexe_=.log) \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat $(@:.chkexe_=.log) && false) || exit 1; \ + echo "" >> $(@:.chkexe_=.log); \ + echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)" >> $(@:.chkexe_=.log); \ + echo "============================" >> $(@:.chkexe_=.log); \ echo "Finished testing $(@:.chkexe_=)$(EXEEXT) $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ fi -# The .chksh_ here is the "dummy" that prevents the target from being +# The dummy.chksh here prevents the target from being # empty if there are no tests in the current directory. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: @if test "X$@" != "X.chksh_" && test "X$@" != "Xdummy.chksh_"; then \ @@ -800,21 +831,27 @@ $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummy.chksh_: if $(top_srcdir)/bin/newer `basename $(@:.chksh_=.chksh)` $(@:.chksh_=); then \ echo "No need to test `basename $(@:.chksh_=)` again."; \ else \ + echo "============================" > `basename $(@:.chksh_=.logsh)`; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "Fortran API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "C++ API: `basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `baename $(@:.chksh_=.logsh)`; \ else \ echo "Testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ + echo "`basename $(@:.chksh_=)` $(TEST_FLAGS) Test Log" >> `basename $(@:.chksh_=.logsh)`; \ fi; \ - echo "============================"; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ - $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) \ + $(SHELL) $(@:.chksh_=) $(TEST_FLAGS) 2>&1 >> `basename $(@:.chksh_=.logsh)` \ && touch `basename $(@:.chksh_=.chksh)` || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ - exit 1; \ - echo ""; \ + (cat `basename $(@:.chksh_=.logsh)` && false) || exit 1; \ + echo "" >> `basename $(@:.chksh_=.logsh)`; \ + echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)" >> `basename $(@:.chksh_=.logsh)`; \ + echo "============================" >> `basename $(@:.chksh_=.logsh)`; \ echo "Finished testing `basename $(@:.chksh_=)` $(TEST_FLAGS)"; \ fi; \ echo "============================"; \ |