diff options
author | fjoe <fjoe@FreeBSD.org> | 2009-10-18 11:28:31 +0000 |
---|---|---|
committer | fjoe <fjoe@FreeBSD.org> | 2009-10-18 11:28:31 +0000 |
commit | 8c2c0fd2b0706b366cd32fd428fbf34dce9fc50b (patch) | |
tree | 0fed040c6b5785fcde6b17eb5f0e5594ee2c0ae5 /usr.bin | |
parent | 066984a67bf026974c93b93a50b195ad3e8a6c7d (diff) | |
download | FreeBSD-src-8c2c0fd2b0706b366cd32fd428fbf34dce9fc50b.zip FreeBSD-src-8c2c0fd2b0706b366cd32fd428fbf34dce9fc50b.tar.gz |
Reset UPTODATE gnodes after remaking makefiles when make
is not going to be restarted: such nodes could be marked UPTODATE
without doing rebuild due to remakingMakefiles being TRUE.
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/make/main.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/usr.bin/make/main.c b/usr.bin/make/main.c index 0e16506..eec6bbf 100644 --- a/usr.bin/make/main.c +++ b/usr.bin/make/main.c @@ -706,6 +706,7 @@ Main_AddSourceMakefile(const char *name) static void Remake_Makefiles(void) { + Lst cleanup; LstNode *ln; int error_cnt = 0; int remade_cnt = 0; @@ -716,6 +717,7 @@ Remake_Makefiles(void) Fatal("Failed to change directory to %s.", curdir); } + Lst_Init(&cleanup); LST_FOREACH(ln, &source_makefiles) { LstNode *ln2; struct GNode *gn; @@ -791,21 +793,7 @@ Remake_Makefiles(void) gn->name); error_cnt++; } else if (gn->made == UPTODATE) { - Lst examine; - - Lst_Init(&examine); - Lst_EnQueue(&examine, gn); - while (!Lst_IsEmpty(&examine)) { - LstNode *eln; - GNode *egn = Lst_DeQueue(&examine); - - egn->make = FALSE; - LST_FOREACH(eln, &egn->children) { - GNode *cgn = Lst_Datum(eln); - - Lst_EnQueue(&examine, cgn); - } - } + Lst_EnQueue(&cleanup, gn); } } @@ -827,6 +815,24 @@ Remake_Makefiles(void) } } + while (!Lst_IsEmpty(&cleanup)) { + GNode *gn = Lst_DeQueue(&cleanup); + + gn->unmade = 0; + gn->make = FALSE; + gn->made = UNMADE; + gn->childMade = FALSE; + gn->mtime = gn->cmtime = 0; + gn->cmtime_gn = NULL; + + LST_FOREACH(ln, &gn->children) { + GNode *cgn = Lst_Datum(ln); + + gn->unmade++; + Lst_EnQueue(&cleanup, cgn); + } + } + if (curdir != objdir) { if (chdir(objdir) < 0) Fatal("Failed to change directory to %s.", objdir); |