> From: Paul Smith <psm...@gnu.org> > Date: Wed, 01 May 2013 08:04:08 -0400 > Cc: bug-make@gnu.org > > > This should work very well with -Otarget then, except for the > > colorization/highlighting issue... once it works as expected. I'll look > > into this issue later and I would be interested to see your experience > > with it once it's resolved. > > OK, I found this bug. Definitely make recursion was not being handled > properly with -Otarget and -Ojob in some situations; this broke as a > side effect of my cleanup to reuse the same temporary file for the > entire target, regardless of the output mode.
You forgot to make the same change in the WINDOWS32 branch. I did that in commit a87ff20. > This should be fixed now. Those who use recursive makefiles and were > seeing annoying delays in output with -O, please try again with the > latest commit and see if it works any better for you now. Unfortunately, the delays are still here. Moreover, it looks like this change introduced some kind of regression. With the following Makefile: all: simple recursive simple: one two one two: @echo start $@ @sleep 1 @echo stop $@ @-false recursive: rec1 rec2 rec1 rec2: @echo start $@ $(MAKE) -f mkfsync simple @echo stop $@ I see this output with the previous version: D:\gnu\make-3.82.90_GIT_2013-04-20>gnumake -f mkfsync -j -O gnumake -f mkfsync simple gnumake -f mkfsync simple mkfsync:6: recipe for target 'one' failed gnumake: [one] Error 1 (ignored) start one stop one mkfsync:6: recipe for target 'two' failed gnumake: [two] Error 1 (ignored) start two stop two start rec2 gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' mkfsync:6: recipe for target 'one' failed gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: [one] Error 1 (ignored) gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' start one stop one gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' mkfsync:6: recipe for target 'two' failed gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: [two] Error 1 (ignored) gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' start two stop two gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' stop rec2 start rec1 gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' mkfsync:6: recipe for target 'one' failed gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: [one] Error 1 (ignored) gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' start one stop one gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' mkfsync:6: recipe for target 'two' failed gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: [two] Error 1 (ignored) gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' start two stop two gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-04-20' stop rec1 Notice in particular how start rec1..stop rec1 occludes its sub-targets, and the same for rec2. After the change I see this: D:\gnu\make-3.82.90_GIT_2013-05-01>gnumake -f mkfsync -j -O gnumake -f mkfsync simple gnumake -f mkfsync simple gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' start one stop one mkfsync:6: recipe for target 'one' failed gnumake: [one] Error 1 (ignored) start two stop two mkfsync:6: recipe for target 'two' failed gnumake: [two] Error 1 (ignored) gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' start one stop one mkfsync:6: recipe for target 'one' failed gnumake[1]: [one] Error 1 (ignored) gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' start two stop two mkfsync:6: recipe for target 'two' failed gnumake[1]: [two] Error 1 (ignored) gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' start one stop one mkfsync:6: recipe for target 'one' failed gnumake[1]: [one] Error 1 (ignored) gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' gnumake[1]: Entering directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' start two stop two mkfsync:6: recipe for target 'two' failed gnumake[1]: [two] Error 1 (ignored) gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' gnumake[1]: Leaving directory 'D:/gnu/make-3.82.90_GIT_2013-05-01' start rec1 stop rec1 start rec2 stop rec2 And now rec1 and rec2 are announced only at the end. I see the same result on GNU/Linux, so this isn't a Windows specific problem. _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make