diff --git a/src/job.c b/src/job.c index 94df0197..ea885614 100644 --- a/src/job.c +++ b/src/job.c @@ -1420,9 +1420,16 @@ start_job_command (struct child *child) child->deleted = 0; #ifndef _AMIGA - /* Set up the environment for the child. */ + /* Set up the environment for the child. + It's a slight inaccuracy to set the environment for recursive make even + for command lines that aren't recursive, but I don't want to have to + recompute the target environment for each command. Better would be to + keep a separate entry for MAKEFLAGS in the environment so it could be + replaced on its own. For now just set it for all lines. + */ if (child->environment == 0) - child->environment = target_environment (child->file, child->recursive); + child->environment = target_environment (child->file, + child->file->cmds->any_recurse); #endif #if !defined(__MSDOS__) && !defined(_AMIGA) && !defined(WINDOWS32) diff --git a/tests/scripts/features/jobserver b/tests/scripts/features/jobserver index e12facf0..a2f06ee8 100644 --- a/tests/scripts/features/jobserver +++ b/tests/scripts/features/jobserver @@ -132,6 +132,42 @@ all a: ; @echo $@ '--jobserver-style=foo -j8', "#MAKE#: *** unknown jobserver auth style 'foo'. Stop.", 512); +# Ensure the jobserver is not disabled even if only later commands are recursive + +run_make_test(q! +.RECIPEPREFIX := > +all: +> @echo $@ 1 +> @echo $@ 2 +> @$(MAKE) -f #MAKEFILE# recurse + +recurse: ; @echo $@ +!, + "$np -j8", "all 1\nall 2\nrecurse"); + +if ($port_type ne 'W32') { + run_make_test(undef, "$np --jobserver-style=pipe -j8", + "all 1\nall 2\nrecurse"); +} + +# And with + instead of $(MAKE) + +run_make_test(q! +.RECIPEPREFIX := > +all: +> @echo $@ 1 +> @echo $@ 2 +> @+#MAKEPATH# -f #MAKEFILE# recurse + +recurse: ; @echo $@ +!, + "$np -j8", "all 1\nall 2\nrecurse"); + +if ($port_type ne 'W32') { + run_make_test(undef, "$np --jobserver-style=pipe -j8", + "all 1\nall 2\nrecurse"); +} + if (exists $FEATURES{'jobserver-fifo'}) { # sv 62908. # Test that when mkfifo fails, make switches to pipe and succeeds.