Lst_Member(toBeMade, (ClientData)succ) == NULL)
Lst_Member(toBeMade, succ) == NULL)
Make_Update (cgn)    register GNode *cgn;	/* the child node */{    register GNode 	*pgn;	/* the parent node */    register char  	*cname;	/* the child's name */    register LstNode	ln; 	/* Element in parents and iParents lists */    cname = Var_Value(TARGET, cgn);    /*     * If the child was actually made, see what its modification time is     * now -- some rules won't actually update the file. If the file still     * doesn't exist, make its mtime now.     */    if (cgn->made != UPTODATE) {#ifndef RECHECK	/*	 * We can't re-stat the thing, but we can at least take care of rules	 * where a target depends on a source that actually creates the	 * target, but only if it has changed, e.g.	 *	 * parse.h : parse.o	 *	 * parse.o : parse.y	 *  	yacc -d parse.y	 *  	cc -c y.tab.c	 *  	mv y.tab.o parse.o	 *  	cmp -s y.tab.h parse.h || mv y.tab.h parse.h	 *	 * In this case, if the definitions produced by yacc haven't changed	 * from before, parse.h won't have been updated and cgn->mtime will	 * reflect the current modification time for parse.h. This is	 * something of a kludge, I admit, but it's a useful one..	 * XXX: People like to use a rule like	 *	 * FRC:	 *	 * To force things that depend on FRC to be made, so we have to	 * check for gn->children being empty as well...	 */	if (!Lst_IsEmpty(cgn->commands) || Lst_IsEmpty(cgn->children)) {	    cgn->mtime = now;	}#else	/*	 * This is what Make does and it's actually a good thing, as it	 * allows rules like	 *	 *	cmp -s y.tab.h parse.h || cp y.tab.h parse.h	 *	 * to function as intended. Unfortunately, thanks to the stateless	 * nature of NFS (by which I mean the loose coupling of two clients	 * using the same file from a common server), there are times	 * when the modification time of a file created on a remote	 * machine will not be modified before the local stat() implied by	 * the Dir_MTime occurs, thus leading us to believe that the file	 * is unchanged, wreaking havoc with files that depend on this one.	 *	 * I have decided it is better to make too much than to make too	 * little, so this stuff is commented out unless you're sure it's ok.	 * -- ardeb 1/12/88	 */	/*	 * Christos, 4/9/92: If we are  saving commands pretend that	 * the target is made now. Otherwise archives with ... rules	 * don't work!	 */	if (noExecute || (cgn->type & OP_SAVE_CMDS) || Dir_MTime(cgn) == FALSE) {	    cgn->mtime = now;	}	if (DEBUG(MAKE)) {	    printf("update time: %s\n", Targ_FmtTime(cgn->mtime));	}#endif    }    if (Lst_Open (cgn->parents) == SUCCESS) {	while ((ln = Lst_Next (cgn->parents)) != NULL) {	    pgn = (GNode *)Lst_Datum (ln);	    if (pgn->make) {		pgn->unmade -= 1;		if ( ! (cgn->type & (OP_EXEC|OP_USE))) {		    if (cgn->made == MADE) {			pgn->childMade = TRUE;			if (pgn->cmtime < cgn->mtime) {			    pgn->cmtime = cgn->mtime;			}		    } else {			(void)Make_TimeStamp (pgn, cgn);		    }		}		if (pgn->unmade == 0) {		    /*		     * Queue the node up -- any unmade predecessors will		     * be dealt with in MakeStartJobs.		     */		    (void)Lst_EnQueue (toBeMade, (ClientData)pgn);		} else if (pgn->unmade < 0) {		    Error ("Graph cycles through %s", pgn->name);		}	    }	}	Lst_Close (cgn->parents);    }    /*     * Deal with successor nodes. If any is marked for making and has an unmade     * count of 0, has not been made and isn't in the examination queue,     * it means we need to place it in the queue as it restrained itself     * before.     */    for (ln = Lst_First(cgn->successors); ln != NULL; ln = Lst_Succ(ln)) {	GNode	*succ = (GNode *)Lst_Datum(ln);	if (succ->make && succ->unmade == 0 && succ->made == UNMADE &&	    Lst_Member(toBeMade, (ClientData)succ) == NULL)	{	    Lst_EnQueue(toBeMade, (ClientData)succ);	}    }    /*     * Set the .PREFIX and .IMPSRC variables for all the implied parents     * of this node.     */    if (Lst_Open (cgn->iParents) == SUCCESS) {	char	*cpref = Var_Value(PREFIX, cgn);	while ((ln = Lst_Next (cgn->iParents)) != NULL) {	    pgn = (GNode *)Lst_Datum (ln);	    if (pgn->make) {		Var_Set (IMPSRC, cname, pgn);		Var_Set (PREFIX, cpref, pgn);	    }	}	Lst_Close (cgn->iParents);    }}