diff options
author | sjg <sjg@FreeBSD.org> | 2013-02-01 22:55:27 +0000 |
---|---|---|
committer | sjg <sjg@FreeBSD.org> | 2013-02-01 22:55:27 +0000 |
commit | f817112dff6d3bf2855772b5112bf05748266394 (patch) | |
tree | 203f81f05d53b13df9fb85ffa3d26ac6a5f93a55 /contrib/bmake/meta.c | |
parent | 6a1efe1ad9984c8085ef28facb9d7f1cc2f01b6a (diff) | |
parent | 69db492ce55c9787def3ba14dca33e52909dd5ca (diff) | |
download | FreeBSD-src-f817112dff6d3bf2855772b5112bf05748266394.zip FreeBSD-src-f817112dff6d3bf2855772b5112bf05748266394.tar.gz |
Merge bmake-20130123
Approved by: marcel (mentor)
Diffstat (limited to 'contrib/bmake/meta.c')
-rw-r--r-- | contrib/bmake/meta.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/contrib/bmake/meta.c b/contrib/bmake/meta.c index 77af4e8..d6110d9 100644 --- a/contrib/bmake/meta.c +++ b/contrib/bmake/meta.c @@ -1,4 +1,4 @@ -/* $NetBSD: meta.c,v 1.25 2012/06/27 17:22:58 sjg Exp $ */ +/* $NetBSD: meta.c,v 1.26 2013/01/19 04:23:37 sjg Exp $ */ /* * Implement 'meta' mode. @@ -843,7 +843,7 @@ meta_oodate(GNode *gn, Boolean oodate) static size_t cwdlen = 0; static size_t tmplen = 0; FILE *fp; - Boolean ignoreOODATE = FALSE; + Boolean needOODATE = FALSE; Lst missingFiles; if (oodate) @@ -1197,15 +1197,15 @@ meta_oodate(GNode *gn, Boolean oodate) } else { char *cmd = (char *)Lst_Datum(ln); - if (!ignoreOODATE) { + if (!needOODATE) { if (strstr(cmd, "$?")) - ignoreOODATE = TRUE; + needOODATE = TRUE; else if ((cp = strstr(cmd, ".OODATE"))) { /* check for $[{(].OODATE[)}] */ if (cp > cmd + 2 && cp[-2] == '$') - ignoreOODATE = TRUE; + needOODATE = TRUE; } - if (ignoreOODATE && DEBUG(META)) + if (needOODATE && DEBUG(META)) fprintf(debug_file, "%s: %d: cannot compare commands using .OODATE\n", fname, lineno); } cmd = Var_Subst(NULL, cmd, gn, TRUE); @@ -1235,7 +1235,7 @@ meta_oodate(GNode *gn, Boolean oodate) if (buf[x - 1] == '\n') buf[x - 1] = '\0'; } - if (!ignoreOODATE && + if (!needOODATE && !(gn->type & OP_NOMETA_CMP) && strcmp(p, cmd) != 0) { if (DEBUG(META)) @@ -1279,14 +1279,16 @@ meta_oodate(GNode *gn, Boolean oodate) oodate = TRUE; } } - if (oodate && ignoreOODATE) { + if (oodate && needOODATE) { /* - * Target uses .OODATE, so we need to re-compute it. - * We need to clean up what Make_DoAllVar() did. + * Target uses .OODATE which is empty; or we wouldn't be here. + * We have decided it is oodate, so .OODATE needs to be set. + * All we can sanely do is set it to .ALLSRC. */ - Var_Delete(ALLSRC, gn); Var_Delete(OODATE, gn); - gn->flags &= ~DONE_ALLSRC; + Var_Set(OODATE, Var_Value(ALLSRC, gn, &cp), gn, 0); + if (cp) + free(cp); } return oodate; } |