##------------------------------------------------------------ -*- makefile -*- # Copyright by The HDF Group. # Copyright by the Board of Trustees of the University of Illinois. # All rights reserved. # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in # the files COPYING and Copyright.html. COPYING can be found at the root # of the source code distribution tree; Copyright.html can be found at the # root level of an installed copy of the electronic HDF5 document set and # is linked from the top-level documents page. It can also be found at # http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have # access to either file, you may request a copy from help@hdfgroup.org. ## ## ## The following section of this makefile comes from the ## `./config/conclude' file which was generated with config.status ## from `./config/conclude.in'. ##----------------------------------------------------------------------------- ## This is the target for the library described in the main body of the ## makefile. ## lib: $(LIB) $(LIB) __no_library__: $(LIB_OBJ) @$(LT_LINK_LIB) -o $@ $(CFLAGS) $(LIB_OBJ) $(LDFLAGS) $(LIBS) @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d && $(MAKE) lib) || exit 1; \ fi; \ done progs: $(LIB) $(PROGS) @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d && $(MAKE) progs) || exit 1; \ fi; \ done ## Build a tags file in this directory. ## TAGS: $(LIB_SRC) $(RM) $@ -etags $(LIB_SRC) ## Runs each test in order, passing $(TEST_FLAGS) to the program. ## Since tests are done in a shell loop, "make -i" does apply inside it. ## Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop. ## The timestamps give a rough idea how much time the tests use. ## tests: $(TEST_PROGS) $(TEST_PROGS_PARA) $(TEST_SCRIPTS) $(LIB) check test _test: tests @echo "===Tests in `echo ${PWD} | sed -e s:.*/::` begin `date`===" $(MAKE) _check-s $(MAKE) _check-p @echo "===Tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===" ## serial tests check-s: tests @echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`===" $(MAKE) _check-s @echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===" ## parallel tests check-p: tests @echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`===" $(MAKE) _check-p @echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===" ## setup for non-repeating tests. TEST_PROG_CHKEXE=$(TEST_PROGS:=.chkexe_) TEST_PROG_PARA_CHKEXE=$(TEST_PROGS_PARA:=.chkexe_) TEST_SCRIPT_CHKSH=$(TEST_SCRIPTS:=.chkexe_) TEST_SCRIPT_PARA_CHKSH=$(TEST_SCRIPTS_PARA:=.chkexe_) # .chkexe files are used to mark tests that have run successfully. # .chklog files are output from those tests. # *.clog are from the MPE option. CHECK_CLEANFILES=*.chkexe *.chklog *.clog _check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) # The dummy.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ tname=$(@:.chkexe_=)$(EXEEXT);\ log=$(@:.chkexe_=.chklog); \ echo "============================"; \ if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \ echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\ else \ echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \ echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ srcdir="$(srcdir)" \ $(TIME) $(RUNTESTS) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $(@:.chkexe_=.chkexe) || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ fi # The dummysh.chkexe here prevents the target from being # empty if there are no tests in the current directory. # $${log} is the log file. # $${tname} is the name of test. $(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_: @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ cmd=$(@:.chkexe_=);\ tname=`basename $$cmd`;\ chkname=`basename $(@:.chkexe_=.chkexe)`;\ log=`basename $(@:.chkexe_=.chklog)`; \ echo "============================"; \ if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ echo "No need to test $${tname} again."; \ else \ echo "============================" > $${log}; \ if test "X$(HDF_FORTRAN)" = "Xyes"; then \ echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ elif test "X$(HDF_CXX)" = "Xyes"; then \ echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \ echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ else \ echo "Testing $${tname} $(TEST_FLAGS)"; \ echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ fi; \ echo "============================" >> $${log}; \ RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ srcdir="$(srcdir)" \ $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ && touch $${chkname} || \ (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ (cat $${log} && false) || exit 1; \ echo "" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ echo "============================" >> $${log}; \ echo "Finished testing $${tname} $(TEST_FLAGS)"; \ cat $${log}; \ fi; \ echo "============================"; \ fi # Actual execution of check-p. _check-p: $(LIB) $(PROGS) $(TESTS) @if test -n "$(TEST_PROGS_PARA)$(TEST_SCRIPTS_PARA)"; then \ echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ fi @if test -n "$(TEST_PROGS_PARA)"; then \ echo "**** Hint ****"; \ echo "Parallel test files reside in the current directory" \ "by default."; \ echo "Set HDF5_PARAPREFIX to use another directory. E.g.,"; \ echo " HDF5_PARAPREFIX=/PFS/user/me"; \ echo " export HDF5_PARAPREFIX"; \ echo " make check"; \ echo "**** end of Hint ****"; \ fi @for test in $(TEST_PROGS_PARA) dummy; do \ if test $$test != dummy; then \ $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \ RUNTESTS="$(RUNPARALLEL)" || exit 1; \ fi; \ done @for test in $(TEST_SCRIPTS_PARA) dummy; do \ if test $$test != dummy; then \ $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \ fi; \ done @if test -n "$(TEST_PROGS_PARA)$(TEST_SCRIPTS_PARA)"; then \ echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ fi ## Run test with different Virtual File Driver check-vfd: @for vfd in $(VFD_LIST) dummy; do \ if test $$vfd != dummy; then \ echo "============================"; \ echo "Testing Virtual File Driver $$vfd"; \ echo "============================"; \ $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1; \ HDF5_DRIVER=$$vfd $(MAKE) check; \ fi; \ done ## Make installation directories directories if they don't exist. ## $(libdir): -$(top_srcdir)/bin/mkdirs $(DESTDIR)$@ $(includedir): -$(top_srcdir)/bin/mkdirs $(DESTDIR)$@ $(bindir): -$(top_srcdir)/bin/mkdirs $(DESTDIR)$@ $(DOCDIR): -$(top_srcdir)/bin/mkdirs $(DESTDIR)$@ $(EXAMPLEDIR): -$(top_srcdir)/bin/mkdirs $(DESTDIR)$@ ## Install the library, the public header files, and public programs. ## install: $(AUX_LIB) $(PUB_LIB) $(PUB_HDR) $(PUB_PROGS) $(libdir) $(includedir) $(bindir) @for f in X $(PUB_LIB); do \ if test $$f != X; then \ ($(LT_INSTALL_LIB) $$f $(DESTDIR)$(libdir)/. || exit 1); \ fi; \ done @if test -f libhdf5.settings; then \ (set -x; $(INSTALL_DATA) libhdf5.settings $(DESTDIR)$(libdir)/. || exit 1); \ fi @for f in X $(PUB_HDR); do \ if test $$f != X; then \ if test -f $$f; then \ (set -x; $(INSTALL_DATA) $$f $(DESTDIR)$(includedir)/. || exit 1); \ else \ (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/. || \ exit 1); \ fi; \ fi; \ done @for f in X $(PUB_PROGS); do \ if test $$f != X; then \ if test "X$(PARALLEL)" != "Xno"; then \ if test $$f = "h5cc"; then \ ($(LT_INSTALL_PROG) $$f $(DESTDIR)$(bindir)/h5pcc || exit 1); \ elif test $$f = "h5fc"; then \ ($(LT_INSTALL_PROG) $$f $(DESTDIR)$(bindir)/h5pfc || exit 1); \ else \ ($(LT_INSTALL_PROG) $$f $(DESTDIR)$(bindir)/. || exit 1); \ fi; \ else \ ($(LT_INSTALL_PROG) $$f $(DESTDIR)$(bindir)/. || exit 1); \ fi; \ fi; \ done @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d && $(MAKE) $@) || exit 1; \ fi; \ done install-examples: $(EXAMPLE_PROGS) $(EXAMPLEDIR) @for f in X $(EXAMPLE_PROGS); do \ if test $$f != X; then \ (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(EXAMPLEDIR)/. || exit 1);\ fi; \ done uninstall-examples: @if test -n "$(EXAMPLE_PROGS)"; then \ set -x; cd $(DESTDIR)$(EXAMPLEDIR) && $(RM) $(EXAMPLE_PROGS); \ fi ## Install the documents. ## install-doc: $(PUB_DOCS) $(DOCDIR) @if test -n "$(DOCDIR)"; then \ if test -d "$(DESTDIR)$(DOCDIR)"; then \ :; \ else \ mkdir $(DESTDIR)$(DOCDIR) && chmod 755 $(DESTDIR)$(DOCDIR); \ fi; \ fi @if test -n "$(SUBDOCDIR)"; then \ if test -d "$(DESTDIR)$(SUBDOCDIR)" ; then \ :; \ else \ mkdir $(DESTDIR)$(SUBDOCDIR) && chmod 755 $(DESTDIR)$(SUBDOCDIR); \ fi; \ fi @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d && $(MAKE) $@) || exit 1; \ fi; \ done @for f in X $(PUB_DOCS); do \ if test $$f != X; then \ if test -f $$f; then \ (set -x; $(INSTALL_DATA) $$f $(DESTDIR)$(DOCDIR)/. || exit 1); \ else \ (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(DOCDIR)/. || \ exit 1); \ fi; \ fi; \ done @for f in X $(PUB_SUBDOCS); do \ if test $$f != X; then \ if test -f $$f; then \ (set -x; $(INSTALL_DATA) $$f $(DESTDIR)$(SUBDOCDIR)/. || exit 1); \ else \ (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(SUBDOCDIR)/. || \ exit 1); \ fi; \ fi; \ done ## Removes those things that `make install' (would have) installed. ## uninstall: @for f in libhdf5.settings $(LIB); do \ $(LT_UNINSTALL) $(DESTDIR)$(libdir)/$$f; \ done @if test -n "$(PUB_HDR)"; then \ set -x; cd $(DESTDIR)$(includedir) && $(RM) $(PUB_HDR); \ fi @for f in X $(PUB_PROGS); do \ if test $$f != X; then \ $(LT_UNINSTALL) $(DESTDIR)$(bindir)/$$f; \ fi; \ done ## Removes those things that `make install-doc' (would have) installed. ## uninstall-doc: @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d && $(MAKE) $@) || exit 1; \ fi; \ done @if test -n "$(PUB_DOCS)"; then \ set -x; cd $(DESTDIR)$(DOCDIR) && $(RM) $(PUB_DOCS); \ fi @if test -n "$(PUB_SUBDOCS)"; then \ set -x; cd $(DESTDIR)$(DOCDIR) && $(RM) $(PUB_SUBDOCS); \ fi # General rule for recursive cleaning targets. Like the rule above, # but doesn't require building BUILT_SOURCES. check-clean: @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; @for d in X $(SUBDIRS); do \ if test $$d != X && test $$d != .; then \ (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ fi; \ done # clean up files generated by tests so they can be re-run. build-check-clean: $(RM) -rf $(CHECK_CLEANFILES) ## Removes temporary files without removing the final target files. That is, ## remove things like object files but not libraries or executables. ## mostlyclean: build-check-clean @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d; $(MAKE) $@) || exit 1; \ fi; \ done @if test -n "$(LIB_OBJ)"; then \ $(RM) $(LIB_OBJ) $(LIB_OBJ:.lo=.o); \ fi @if test -n "$(TEST_OBJ)"; then \ $(RM) $(TEST_OBJ) $(TEST_OBJ:.lo=.o); \ fi @if test -n "$(PROG_OBJ)" || test -n "$(MOSTLYCLEAN)"; then \ $(RM) $(PROG_OBJ) $(PROG_OBJ:.lo=.o) $(MOSTLYCLEAN); \ fi ## Like `mostlyclean' except it also removes the final targets: things like ## libraries and executables. This target doesn't remove any file that ## is part of the HDF5 distribution. ## clean: mostlyclean @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d; $(MAKE) $@) || exit 1; \ fi; \ done @if test -n "$(LIB)" -o -n "$(TEST_PROGS)" -o -n "$(TEST_PROGS_PARA)" -o -n "$(PROGS)" -o -n "$(CLEAN)"; then \ $(RM) $(LIB) $(TEST_PROGS) $(TEST_PROGS_PARA) $(PROGS) $(CLEAN); \ fi; -$(RM) -r .libs ## Like `clean' except it also removes files that were created by running ## configure. If you've unpacked the source and built HDF5 without creating ## any other files, then `make distclean' will leave only the files that were ## in the distribution. ## distclean: clean -$(RM) .depend TAGS *~ core *.core *.bak *.old *.new $(DISTCLEAN) @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d; $(MAKE) $@) || exit 1; \ fi; \ done @if test -f $(srcdir)/Makefile.in; then \ (set -x; $(RM) Makefile); \ fi ## Like `distclean' except it deletes all files that can be regenerated from ## the makefile, including those generated from autoheader and autoconf. ## maintainer-clean: distclean @for d in X $(SUBDIRS); do \ if test $$d != X; then \ (set -x; cd $$d; $(MAKE) $@) || exit 1; \ fi; \ done -$(RM) *~ core core.* *.core *.bak *.contrib gmon.out ## Implicit rules ## .c.o: $(CC) $(CFLAGS) $(CPPFLAGS) -c $< .c.lo: @$(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) -c $< ##----------------------------------------------------------------------------- ## The following section of this makefile contains dependencies between the ## source files and the header files. ##----------------------------------------------------------------------------- .PHONY: dep depend dep depend: $(srcdir)/Dependencies @DEPEND@