summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfjoe <fjoe@FreeBSD.org>2009-10-18 11:28:31 +0000
committerfjoe <fjoe@FreeBSD.org>2009-10-18 11:28:31 +0000
commit8c2c0fd2b0706b366cd32fd428fbf34dce9fc50b (patch)
tree0fed040c6b5785fcde6b17eb5f0e5594ee2c0ae5
parent066984a67bf026974c93b93a50b195ad3e8a6c7d (diff)
downloadFreeBSD-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.
-rw-r--r--usr.bin/make/main.c36
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);
OpenPOWER on IntegriCloud