From 3a5893c4fe2dcab31fd835798d188254865199e6 Mon Sep 17 00:00:00 2001 From: psmith Date: Sun, 18 Sep 2011 23:39:26 +0000 Subject: [PATCH] When we re-exec the master makefile in a jobserver environment, ensure that MAKEFLAGS is set properly so the re-exec'd make runs in parallel. See Savannah bug #33873. --- ChangeLog | 4 ++++ main.c | 8 +++++--- tests/ChangeLog | 3 +++ tests/scripts/features/parallelism | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2a9786..adcab64 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-09-18 Paul Smith + * main.c (main): If we're re-exec'ing and we're the master make, + then restore the job_slots value so it goes back into MAKEFLAGS + properly. See Savannah bug #33873. + * remake.c (library_search): STD_DIRS is computed when other static vars like buflen etc. are computed, so it must be static as well. See Savannah bug #32511. diff --git a/main.c b/main.c index 51764dd..75eb494 100644 --- a/main.c +++ b/main.c @@ -2089,6 +2089,11 @@ main (int argc, char **argv, char **envp) ++restarts; + /* If we're re-exec'ing the first make, put back the number of + job slots so define_makefiles() will get it right. */ + if (master_job_slots) + job_slots = master_job_slots; + /* Reset makeflags in case they were changed. */ { const char *pv = define_makeflags (1, 1); @@ -2825,9 +2830,6 @@ define_makeflags (int all, int makefile) && (*(unsigned int *) cs->value_ptr == *(unsigned int *) cs->noarg_value)) ADD_FLAG ("", 0); /* Optional value omitted; see below. */ - else if (cs->c == 'j') - /* Special case for `-j'. */ - ADD_FLAG ("1", 1); else { char *buf = alloca (30); diff --git a/tests/ChangeLog b/tests/ChangeLog index 4629b18..e2048ff 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,8 @@ 2011-09-18 Paul Smith + * scripts/features/parallelism: On re-exec make sure we preserve + the value of MAKEFLAGS when necessary. See Savannah bug #33873. + * scripts/features/vpath3: Verify handling of -lfoo libraries found via vpath vs. the standard directory search. See Savannah bug #32511. diff --git a/tests/scripts/features/parallelism b/tests/scripts/features/parallelism index 22e4aeb..909c979 100644 --- a/tests/scripts/features/parallelism +++ b/tests/scripts/features/parallelism @@ -167,6 +167,23 @@ inc.mk: rmfiles('inc.mk'); +# TEST #11: Make sure -jN from MAKEFLAGS is processed even when we re-exec +# See Savannah bug #33873 + +$extraENV{MAKEFLAGS} = '-j4'; + +run_make_test(q! +things = thing1 thing2 +all: $(things) +$(things):; @echo '$@ start'; sleep 1; echo '$@ end' +-include inc.mk +inc.mk: ; @touch $@ +!, + '', "thing1 start\nthing2 start\nthing1 end\nthing2 end\n"); + +delete $extraENV{MAKEFLAGS}; +rmfiles('inc.mk'); + if ($all_tests) { # Implicit files aren't properly recreated during parallel builds # Savannah bug #26864 -- 2.11.4.GIT