svn commit: r251422 - in head: contrib/bmake usr.bin/bmake

Simon J. Gerraty sjg at
Fri Jul 5 20:51:27 UTC 2013

On Fri, 5 Jul 2013 18:06:37 +0200, Tijl Coosemans writes:
>> I've been noticing that bmake doesn't run parallel jobs as like fmake.

No it doesn't.
fmake exports the name of a FIFO, which any submake can open.
bmake passes open descriptors to a pipe, but only if the target is
flagged .MAKE.

.MAKE's other property is to run the target even when -n is given.
This feature, while documented in fmake's man page doesn't work.

>> I've attached a Makefile that I think shows what's going wrong.

Hmm I can't see the makefile, but if you add .MAKE to the target which
run's the sub-makes you will see things work as expected.

>> Bmake outputs the target name in -j mode (e.g. "--- all ---"), but
>> there's no "--- sub_1 ---" and "--- sub_3 ---" which suggests -j isn't

Because the -J flag although passed, the descriptors were closed, this
cause the sub-make to ignore -j and -J not to be added to .MAKEFLAGS

>> I suspect the descriptors for the job server have to remain open so
>> submakes can pick them up. At least, when I comment out the two fcntl

Correct, and if the target is flagged .MAKE, the close-on-exec flag will
be cleared in the child.

>Now that I've taken a closer look at the code it seems bmake requires
>targets that run make to be marked with .MAKE. Several targets in
>Makefile and Makefile.inc1 already have this, but some don't, such as
>bootstrap-tools. Can this be added there?

I expect so. 

I was being somewhat cautious.   As noted above .MAKE is also
supposed to cause the target to run even when -n is given.
I noted that some targets which might otherwise warrant .MAKE also did
things which might not be a good idea with -n.
FWIW make -N would supresses the behavior of .MAKE, but few are likely
to have noted that.

I don't see any reason to not add .MAKE to bootstrap-tools.

More information about the svn-src-head mailing list