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 /c++ | |
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
Diffstat (limited to 'c++')
-rw-r--r-- | c++/Makefile.in | 68 | ||||
-rw-r--r-- | c++/examples/Makefile.in | 67 | ||||
-rw-r--r-- | c++/src/Makefile.am | 8 | ||||
-rw-r--r-- | c++/src/Makefile.in | 86 | ||||
-rw-r--r-- | c++/test/Makefile.am | 8 | ||||
-rw-r--r-- | c++/test/Makefile.in | 84 |
6 files changed, 252 insertions, 69 deletions
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 "============================"; \ |