summaryrefslogtreecommitdiffstats
path: root/c++
diff options
context:
space:
mode:
authorJames Laird <jlaird@hdfgroup.org>2005-07-21 19:28:11 (GMT)
committerJames Laird <jlaird@hdfgroup.org>2005-07-21 19:28:11 (GMT)
commit7236935a9d666926b5843f317a84743ef3d4126a (patch)
tree21d7f4f7d0fbc1348c374ba39f9b2ca095841e81 /c++
parentbb31e94a924a1b3f6f1da6c10ffe95029c87d5c5 (diff)
downloadhdf5-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.in68
-rw-r--r--c++/examples/Makefile.in67
-rw-r--r--c++/src/Makefile.am8
-rw-r--r--c++/src/Makefile.in86
-rw-r--r--c++/test/Makefile.am8
-rw-r--r--c++/test/Makefile.in84
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 "============================"; \