Subject: CVS commit: basesrc/usr.bin/make
To: None <source-changes@netbsd.org>
From: Paul Kranenburg <pk@netbsd.org>
List: source-changes
Date: 02/07/2002 18:48:24
Module Name:	basesrc
Committed By:	pk
Date:		Thu Feb  7 16:48:23 UTC 2002

Modified Files:
	basesrc/usr.bin/make: compat.c make.c

Log Message:
When making a node which is the source of both a .MADE target and a
normal target (the latter dependency being the reason why it's made),
the .MADE parent should not be put on the `toBeMade' list again (in
Make_Update()) since it was already put on it in Make_ExpandUse().
Doing so would cause the rules for the .MADE target to be executed
(at least) twice, and also mess up the unmade children count of _its_
parent, resulting in spurious graph cylce detection.

To achieve this, make sure the unmade children count of the .MADE target
is set to zero before enqueueing it on the `toBeMade' list in
Make_ExpandUse(). Then, in Make_Update(), check if the parent has the
.MADE attribute before diddling with the queue.

For the same reason the status of a node must not be set to UPTODATE
unconditionally in compat mode, since that will prevent the node from
being built even if it is the source of a normal target. Instead,
check both its state and the type of the parent to decide whether to
continue on behalf of the current parent.


To generate a diff of this commit:
cvs rdiff -r1.39 -r1.40 basesrc/usr.bin/make/compat.c
cvs rdiff -r1.41 -r1.42 basesrc/usr.bin/make/make.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.