bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Some serious issues with the new -O option


From: Eli Zaretskii
Subject: Re: Some serious issues with the new -O option
Date: Wed, 01 May 2013 18:26:10 +0300

> From: Paul Smith <address@hidden>
> Date: Wed, 01 May 2013 08:04:08 -0400
> Cc: address@hidden
> 
> > 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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]