Hi,
I have done some more characterization.
To recap, edit job.c to call fatal_error_signal(SIGTERM) as show here:
http://lists.gnu.org/archive/html/help-make/2009-02/msg00002.html
The goal is to get make to terminate at the first error.
The problem is I am getting mixed success, and it seems to depend on the
commands for the targets. I have chosen to use "sleep" to emulate a long
compile time in the examples below.
Behavior 1 (bad)
----------------
The "sleep" command does not die.
$ cat makefile
all: t1 t2
t1:
sleep 60 && echo done || echo failed
t2:
sleep 2 && exit 1
$ make -j 2
sleep 60 && echo done || echo failed
sleep 2 && exit 1
make: *** [t2] Error 1
make: *** Waiting for unfinished jobs....
make: *** [t1] Terminated
Terminated
$ ps -ef | grep sleep
martin 22343 1 0 18:36 pts/5 00:00:00 sleep 60
Using process substitution takes the whole 60 seconds to return, despite
that the plain command without process substitution returns to the prompt
as soon as target t2 exits:
$ time t=$(make -j 2)
make: *** [t2] Error 1
make: *** Waiting for unfinished jobs....
make: *** [t1] Terminated
real 1m0.007s
...
$
Behavior 2 (good)
-----------------
The "sleep" command dies.
$ cat makefile
all: t1 t2
t1:
sleep 60
t2:
sleep 2 && exit 1
$ make -j 2
sleep 60
sleep 2 && exit 1
make: *** [t2] Error 1
make: *** Waiting for unfinished jobs....
make: *** [t1] Terminated
Terminated
$ ps -ef | grep sleep
In this case, process substitution returns as quickly as target t1 exits:
$ time t=$(make -j 2)
make: *** [t2] Error 1
make: *** Waiting for unfinished jobs....
make: *** [t1] Terminated
real 0m2.008s
...
$
I have tried two versions of bash (3.2.39 and 4.0-rc1), and they behave
the same.
What kind of problem is this?
Have I placed the fatal_error_signal(SIGTERM) call in the right place?
Martin
_______________________________________________
Help-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-make