#                                                              -*- makefile -*-

# We keep a list of dependencies in `.depend' for each of the source
# files on which it depends.  When one of the source files is modified
# we remove its record from .depend and regenerate its dependencies,
# tacking them onto the end of .depend.  By including the .depend file
# into the makefile, we're telling make that the makefile depends on
# the dependency list in the .depend file.
#
# This is as fast as the `.d' method described in the GNU make manual
# for automatic dependencies, but has the added advantage that all
# dependencies are stored in one place.  The advantage over the
# `makedepend' program is that only those files that are out of date
# have dependency information rebuilt, and the Makefile is not
# modified.
#
# This is also where tracing information is updated.  The $(TRACE)
# program is run on each source file to make sure that the H5TRACE()
# macros are up to date.  If they are then the file is not modified,
# otherwise the file is changed and a backup is saved by appending a
# tilde to the file name.
#
.PRECIOUS: .depend .distdep
dep depend: .distdep

.distdep: .depend
	touch .distdep
	-perl -p $(ROOT)/bin/distdep .depend >.distdep

.depend: $(LIB_SRC) $(TEST_SRC) $(PROG_SRC)
	@touch .depend
	@for dep in $? dummy; do					      \
	   if [ $$dep != "dummy" ]; then				      \
	      echo Building dependencies for $$dep;			      \
	      obj=`echo $$dep | sed 's/\.c/\\\\.o/'`;			      \
	      sed "/$$obj/,/[^\\]$$/d" <$@ >$@- && mv $@- $@;		      \
	      $(TRACE) $$dep;						      \
	      $(CC) -M -MG $(CPPFLAGS) $$dep >>$@;			      \
	   fi;								      \
	done;
	-perl -p $(ROOT)/bin/distdep .depend >.distdep

-include .depend

