Use a recursive environment if any command needs it

We only create one target environment for all commands in a recipe.
Ensure it's set for recursive make if ANY command is recursive, not
just the first one.

* src/job.c (start_job_command): Check for any recursive command.
* tests/scripts/features/jobserver: Test recursion on second line.
This commit is contained in:
Paul Smith
2023-02-21 20:32:12 -05:00
parent 9b6fedef1c
commit 8b8cc3a825
2 changed files with 45 additions and 2 deletions

View File

@@ -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)