Subject: Re: CVS commit: src
To: None <tech-userlevel@netbsd.org>
From: Christos Zoulas <christos@zoulas.com>
List: tech-userlevel
Date: 11/11/1998 19:45:31
In article <199811111530.KAA05766@antaeus.grey17.org> ghudson@MIT.EDU (Greg Hudson) writes:
>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.



You are absolutely right. This was the reason I had ifdef'ed out the code
in the first place. Unfortunately I did not put a comment why I ifdef'ed
out the code... Anyway it is fixed properly now, and maybe even the emacs
problem might go away.

christos