return FALSE;
return false;
Job_CheckCommands(gn, abortProc)    GNode	   *gn; 	    /* The target whose commands need				     * verifying */    void	 (*abortProc)(char *, ...);			/* Function to abort with message */{    if (OP_NOP(gn->type) && Lst_IsEmpty(&gn->commands) &&	(gn->type & OP_LIB) == 0) {	/*	 * No commands. Look for .DEFAULT rule from which we might infer	 * commands	 */	if (DEFAULT != NULL && !Lst_IsEmpty(&DEFAULT->commands)) {	    /*	     * Make only looks for a .DEFAULT if the node was never the	     * target of an operator, so that's what we do too. If	     * a .DEFAULT was given, we substitute its commands for gn's	     * commands and set the IMPSRC variable to be the target's name	     * The DEFAULT node acts like a transformation rule, in that	     * gn also inherits any attributes or sources attached to	     * .DEFAULT itself.	     */	    Make_HandleUse(DEFAULT, gn);	    Varq_Set(IMPSRC_INDEX, Varq_Value(TARGET_INDEX, gn), gn);	} else if (is_out_of_date(Dir_MTime(gn))) {	    /*	     * The node wasn't the target of an operator we have no .DEFAULT	     * rule to go on and the target doesn't already exist. There's	     * nothing more we can do for this branch. If the -k flag wasn't	     * given, we stop in our tracks, otherwise we just don't update	     * this node's parents so they never get examined.	     */	    static const char msg[] = "make: don't know how to make";	    if (gn->type & OP_OPTIONAL) {		(void)fprintf(stdout, "%s %s(ignored)\n", msg, gn->name);		(void)fflush(stdout);	    } else if (keepgoing) {		(void)fprintf(stdout, "%s %s(continuing)\n", msg, gn->name);		(void)fflush(stdout);		return FALSE;	    } else {		(*abortProc)("%s %s. Stop in %s.", msg, gn->name,			Var_Value(".CURDIR"));		return FALSE;	    }	}    }    return TRUE;}