Noisy make -j output

On Sun, Jan 25, 2009 at 10:27:51PM +0000, Kris Kennaway wrote:
> David O'Brien wrote:
>> On Sat, Jan 24, 2009 at 04:01:04PM +0000, Kris Kennaway wrote:
>>> After a fresh buildworld on a system last built in November:
>>> hydra2# make buildworld -j8 -s
>>> --- upgrade_checks ---
>>> --- make ---
>>> [...]
>>>>>> Why the extra-spammy output now?
>> It's the intended operation of pmake/bmake from 4.4BSD. One reason I
>> believe we haven't trusted 'make -j' in the past is it can be very hard
>> to unwind the output when there is a build error. It turns out this is
>> because dg in the past neutered them (presumably he didn't understand
>> their value). After having used a bmake with the stock behavior I've
>> seen how valuable the markers are.
>> I consider the change to be exposing debug-level information that is too
> noisy to be on by default.
What is "debug-level" information?
I really don't consider this to be "debug information" any more than the
invocation of the compiler. Nor the output from things like 'make obj':
===> share/info (obj)
===> lib (obj)
===> lib/csu/amd64 (obj)
===> lib/libc (obj)
..snip..
With the markers it is easy to write scripts that de-multiplex a build
log, giving output roughly what a non-// run would be. This makes it
easy to extract errors from build logs.
> Also I'm concerned that you've broken things
> that expect 'make -s' to actually be silent.
'make -s' : relates to commands executed, not making the output "quiet".
>From the man page:
Do not echo any commands as they are executed. Equivalent to
specifying `@' before each command line in the makefile.
If something expects 'make -s' to be minimal output it is broken and
non-portable as its assuming '-s' does more than SUSv3 requires of it.
-s
Do not write makefile command lines or touch messages (see -t) to
standard output before executing. This mode shall be the same as if
the special target .SILENT were specified without prerequisites.
.SILENT
Prerequisites of this special target are targets themselves; this
shall cause commands associated with them not to be written to the
standard output before they are executed. Subsequent occurrences of
.SILENT shall add to the list of targets with silent commands. If no
prerequisites are specified, make shall behave as if the -s option
had been specified and no commands or touch messages associated with
any target shall be written to standard output.
'make -Q' (or the special target .POSIX:) can be used to quiet the
output from 'make -j'.
To see just how silent things in our world are I tried
'(cd /usr/src ; make -Q -s -j8 world)', which gives output such as:
===> lib/libdwarf (obj,depend,all,install)
===> cddl/usr.bin/ctfconvert (obj,depend,all,install)
===> cddl/usr.bin/ctfmerge (obj,depend,all,install)
===> games/fortune/strfile (obj,depend,all,install)
===> gnu/usr.bin/gperf (obj,depend,all,install)
===> gnu/usr.bin/gperf/doc (obj)
===> gnu/usr.bin/gperf/doc (depend)
===> gnu/usr.bin/gperf/doc (all)
===> gnu/usr.bin/gperf/doc (install)
===> gnu/usr.bin/groff/tmac (obj,depend,all,install)
I then configured a GENERIC and ran
'(cd ../../GENERIC ; make -j8 -s -Q)', which gives output such as:
===> aic7xxx (obj)
===> aic7xxx/aicasm (obj)
===> aic7xxx/ahc (obj)
===> aic7xxx/ahc/ahc_eisa (obj)
./aicasm: 880 instructions used
./aicasm: 880 instructions used
./aicasm: 880 instructions used
./aicasm: 826 instructions used
./aicasm: 826 instructions used
./aicasm: 826 instructions used
===> aic7xxx/ahc/ahc_isa (obj)
===> aic7xxx/ahc/ahc_pci (obj)
===> aic7xxx/ahd (obj)
which also isn't very silent.
Wouldn't this behavior of our mk files also break things that expect
'make -s' to be silent?
Do you have a test case I could ponder? Maybe -s should imply -Q? But
it looks like there is really more work to be done for -s to really be
silent.
--
-- David (obrien at FreeBSD.org)