On Fri, Apr 15, 2011 at 6:45 AM, Eli Zaretskii <e...@gnu.org> wrote:
> I lack the higher-level picture.  Can you describe in a few words how
> will this work in a running Make?  I don't mean the details of how
> files are locked and unlocked (I understand that part), I mean the
> larger picture, like how it will look to the user, how several
> programs running in parallel will write their output and in what order
> it will appear eventually on the screen.

I'll try to illustrate with a different example. For a test case I've
taken an open-source package called jikes which compiles ~40 C++
files. I had to modify the automake-generated makefile to supply
illustrative verbosity; here's the compilation pattern rule:

%.o: %.cpp
        @echo "BEGINNING $@ ..." &&\
        g++ -DHAVE_CONFIG_H -I. -g -O2 -c -o $@ $< &&\
        echo "FINISHED $@ ...";

and I've attached output logs "without.txt" and "with.txt", both using
-j for unlimited jobs. You'll notice that in without.txt the output of
recipes is separated; all the BEGINNING lines show up as soon as the
job is forked, and all the ENDING lines show up as it finishes. In the
"with" case, the BEGINNING lines are effectively held and released in
sync with their matching ENDING lines.

The main problem being solved here is that error and warning messages
often get separated from their recipes in build logs. It's hard to
debug "foo: permission denied" when you can't figure out which recipe
generated that message.

Does that help?

David
BEGINNING case.o ...
FINISHED case.o
BEGINNING jikes.o ...
FINISHED jikes.o
BEGINNING tab.o ...
FINISHED tab.o
BEGINNING lpginput.o ...
FINISHED lpginput.o
BEGINNING code.o ...
FINISHED code.o
BEGINNING dump.o ...
FINISHED dump.o
BEGINNING op.o ...
FINISHED op.o
BEGINNING unzip.o ...
FINISHED unzip.o
BEGINNING unparse.o ...
FINISHED unparse.o
BEGINNING long.o ...
FINISHED long.o
BEGINNING segment.o ...
FINISHED segment.o
BEGINNING jikesapi.o ...
FINISHED jikesapi.o
BEGINNING init.o ...
FINISHED init.o
BEGINNING modifier.o ...
FINISHED modifier.o
BEGINNING zip.o ...
FINISHED zip.o
BEGINNING set.o ...
FINISHED set.o
BEGINNING parser.o ...
FINISHED parser.o
BEGINNING platform.o ...
FINISHED platform.o
BEGINNING scanner.o ...
FINISHED scanner.o
BEGINNING option.o ...
FINISHED option.o
BEGINNING depend.o ...
FINISHED depend.o
BEGINNING incrmnt.o ...
FINISHED incrmnt.o
BEGINNING stream.o ...
FINISHED stream.o
BEGINNING system.o ...
FINISHED system.o
BEGINNING diagnose.o ...
FINISHED diagnose.o
BEGINNING error.o ...
FINISHED error.o
BEGINNING lookup.o ...
FINISHED lookup.o
BEGINNING definite.o ...
FINISHED definite.o
BEGINNING double.o ...
FINISHED double.o
BEGINNING ast.o ...
FINISHED ast.o
BEGINNING javaact.o ...
FINISHED javaact.o
BEGINNING control.o ...
FINISHED control.o
BEGINNING body.o ...
FINISHED body.o
BEGINNING symbol.o ...
FINISHED symbol.o
BEGINNING decl.o ...
FINISHED decl.o
BEGINNING class.o ...
FINISHED class.o
BEGINNING expr.o ...
FINISHED expr.o
BEGINNING bytecode.o ...
FINISHED bytecode.o
rm -f jikes
g++ -g -O2 -o jikes ast.o body.o bytecode.o case.o class.o code.o control.o 
decl.o definite.o depend.o diagnose.o double.o dump.o error.o expr.o incrmnt.o 
init.o javaact.o jikes.o jikesapi.o long.o lookup.o lpginput.o modifier.o op.o 
option.o parser.o platform.o scanner.o segment.o set.o stream.o symbol.o 
system.o tab.o unparse.o unzip.o zip.o
BEGINNING ast.o ...
BEGINNING body.o ...
BEGINNING bytecode.o ...
BEGINNING case.o ...
BEGINNING class.o ...
BEGINNING code.o ...
BEGINNING decl.o ...
BEGINNING depend.o ...
BEGINNING diagnose.o ...
BEGINNING double.o ...
BEGINNING dump.o ...
BEGINNING error.o ...
BEGINNING expr.o ...
BEGINNING incrmnt.o ...
BEGINNING init.o ...
BEGINNING javaact.o ...
BEGINNING jikes.o ...
BEGINNING long.o ...
BEGINNING jikesapi.o ...
BEGINNING lookup.o ...
BEGINNING lpginput.o ...
BEGINNING op.o ...
BEGINNING option.o ...
BEGINNING modifier.o ...
BEGINNING parser.o ...
BEGINNING platform.o ...
BEGINNING segment.o ...
BEGINNING set.o ...
BEGINNING scanner.o ...
BEGINNING stream.o ...
BEGINNING symbol.o ...
BEGINNING system.o ...
BEGINNING tab.o ...
BEGINNING unparse.o ...
BEGINNING unzip.o ...
BEGINNING zip.o ...
FINISHED tab.o
FINISHED case.o
FINISHED dump.o
FINISHED jikes.o
FINISHED op.o
FINISHED code.o
FINISHED lpginput.o
FINISHED unparse.o
FINISHED long.o
FINISHED unzip.o
FINISHED jikesapi.o
FINISHED segment.o
FINISHED zip.o
FINISHED set.o
FINISHED parser.o
FINISHED modifier.o
FINISHED init.o
FINISHED platform.o
FINISHED scanner.o
FINISHED depend.o
FINISHED incrmnt.o
FINISHED error.o
FINISHED option.o
FINISHED stream.o
FINISHED system.o
FINISHED double.o
FINISHED diagnose.o
FINISHED definite.o
FINISHED lookup.o
FINISHED javaact.o
FINISHED ast.o
FINISHED body.o
FINISHED control.o
FINISHED class.o
FINISHED symbol.o
FINISHED decl.o
FINISHED expr.o
FINISHED bytecode.o
rm -f jikes
g++ -g -O2 -o jikes ast.o body.o bytecode.o case.o class.o code.o control.o 
decl.o definite.o depend.o diagnose.o double.o dump.o error.o expr.o incrmnt.o 
init.o javaact.o jikes.o jikesapi.o long.o lookup.o lpginput.o modifier.o op.o 
option.o parser.o platform.o scanner.o segment.o set.o stream.o symbol.o 
system.o tab.o unparse.o unzip.o zip.o
_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to