Repository navigation
Closed
Milestone
Description
Goal: under the holder's make -jN bootstrap (or validate, park, resume), a member's make runs its jobs together where it can share the holder's jobserver safely, and one at a time, with no warning, everywhere else.
Filed by lane openRepoShape-4 from lane 5's checklist candidate C1 in its review of #950 (#888) at 4758e645, #950 issuecomment-6253417294. Lane 4's round-1 plan said it would be filed (#950 issuecomment-6253442578). Lane 5's re-check found #950 READY at 1e94ce04 (#950 issuecomment-6254597377); this issue is read against that head.
Line
- Under GNU make 4.4 and later, a member's make runs one job at a time where it probably ran them together before the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder's
make -jN, somake -j2 bootstrap,validate,parkandresumeno longer warnjobserver unavailableof a rule the person does not own (#888) #950.- the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder's
make -jN, somake -j2 bootstrap,validate,parkandresumeno longer warnjobserver unavailableof a rule the person does not own (#888) #950 (the family root's Makefile: undermake -jN, every member's make warnsjobserver unavailable: using -j1and runs one job at a time #888) takes the jobserver word and every-jout of theMAKEFLAGSa member's make inherits (member_make_env, in both scripts), whereverMAKEFLAGSnames a jobserver. On GNU Make 4.3 (measured) that only removes thejobserver unavailable: using -j1. Add '+' to parent make rule.warning: the member's make ran serially before and still does. - GNU make 4.4 and later use a named pipe where
mkfifoexists, and write--jobserver-auth=fifo:<path>intoMAKEFLAGS. Their NEWS says a sub-make then connects to the jobserver even where it is not marked recursive. So before the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder'smake -jN, somake -j2 bootstrap,validate,parkandresumeno longer warnjobserver unavailableof a rule the person does not own (#888) #950, a member's make under a 4.4 holder probably opened the holder's fifo by path and ran its jobs together. Now it runs them one at a time. the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder'smake -jN, somake -j2 bootstrap,validate,parkandresumeno longer warnjobserver unavailableof a rule the person does not own (#888) #950's body says so under "Choices for the reviewer" (1 and 2). - Not measured: no GNU make 4.4 is on lane 4's host.
- Why the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder's
make -jN, somake -j2 bootstrap,validate,parkandresumeno longer warnjobserver unavailableof a rule the person does not own (#888) #950 did not keepfifo:: the member's make is$MAKEormakeon PATH, not the make that ran the holder (GNU make exports noMAKEto a recipe; measured). A GNU make 4.2 or 4.3 given 4.4'sfifo:word stops withinternal error: invalid --jobserver-auth string ..., exit 2 (measured on 4.3). - Direction, one of:
- keep the
fifo:word and the-jNbeside it where the member's make is known to be GNU make 4.4 or later. That could come from one<make> --versionper run, read before the first member (GNU make exports neitherMAKEnor, by default,MAKE_VERSIONto a recipe). Take them out everywhere else, as now; - or document that a member's make runs one job at a time under any
-j, 4.4 included, and close this.
- keep the
- Whatever is kept: never a pipe's descriptor numbers (
3,4), whichPopencloses and the holder's rules do not pass; never a-jwith no jobserver beside it, which alone means unbounded jobs; and nothing a member's make of another version cannot read. - Whatever changes keeps the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder's
make -jN, somake -j2 bootstrap,validate,parkandresumeno longer warnjobserver unavailableof a rule the person does not own (#888) #950's reading ofMAKEFLAGS: words split as make splits them, only at a space or a tab, a backslash keeping either in a value, so a value holding U+00A0, U+202F or a newline stays one word (the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder'smake -jN, somake -j2 bootstrap,validate,parkandresumeno longer warnjobserver unavailableof a rule the person does not own (#888) #950's round 1); and the two scripts' copies ofmember_make_envheld to one answer bytests/test_family_member_make_jobserver.py.
- the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder's
Verify:
- Under GNU make 4.4+ (
--jobserver-style=fifo, the default wheremkfifoexists), with the holder'smake -j2 bootstrapand a member whosebootstraptarget has two independent prerequisites that each write a trace: the two run together and no warning is printed. - Under GNU make 4.3, and under a 4.4 holder whose
makeon PATH is 4.3: no warning, noinvalid --jobserver-auth string, and the member runs serially, as after the family root's bootstrap.py and siblings.py: a member's make inherits no jobserver from the holder'smake -jN, somake -j2 bootstrap,validate,parkandresumeno longer warnjobserver unavailableof a rule the person does not own (#888) #950. tests/test_family_member_make_jobserver.pyand the trio pass. Each changed pinned file costs every holder oneupstream-changedrow (FAMILY_COPIED_VERBATIM).
Milestone: none set; lane 3's call. Under 4.4 this is lost parallelism with no warning and no wrong result; no verdict changes.
Lane: openreposhape-4 (openRepoShape-4)
Metadata
Metadata
Assignees
Labels
No labels
Activity
the family root's bootstrap.py and siblings.py: a member's make inher…
brettheap commentedon Oct 19, 2026
CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-19T18:36:28Z, for #987
Logged in
lanes/log/openRepoShape-4.mdatcaaa495de7e5c96ee90299bc3cb2d4fcd6c025e0.The three reads (lane-collision-protocol Rule 1):
the family root's siblings.py takes `member_make_env` from its bootst…
the family root's bootstrap.py and siblings.py: the jobserver functio…
Merge main 1a47ed0 into fix/987-make-44-fifo-jobserver (#987)