Subject: Re: CVS commit: src
To: None <christos@netbsd.org>
From: Greg Hudson <ghudson@MIT.EDU>
List: tech-userlevel
Date: 11/11/1998 10:30:00
In a recent CVS commit to src/usr.bin/make/make.c, you wrote:
> The fix is to consider the parent unmade when children have been
> updated.

This was in response to PR 6426 from Jim Bernard, where a bogus target
like FORCE gets updated to the current time and a directory which
already has that time (to the nearest second) won't get remade.

First, I am confused.  I thought our version of make already did this,
because of previous problems I've had in the past, but neither 1.2 nor
1.3.2 appear to behave this way.  (The problems I've had relate to the
emacs Makefile always rebuilding the emacs binary because of the
really-lwlib target; I can analyze that more carefully.)

Second, I'm concerned.  People often write Makefiles like:

	foo: bar
		touch foo

	bar: baz
		cmp -s bar baz || cp baz bar

The idea is that bar will commonly be out of date with respect to baz,
but foo only needs to be remade when baz is actually different from
bar.  The common case is that baz a y.tab.h file produced by "yacc -d"
which often doesn't change when the grammar file changes.  This
practice is documented in Kernighan and Pike, _The Unix Programming
Environment_.  It won't work with your change, as I understand it.