Help with some makefile hackery
Dag-Erling Smørgrav
des at des.no
Wed Jun 23 09:32:56 UTC 2010
Patrick Mahan <mahan at mahan.org> writes:
> My issue is that if there is a build failure at any point, the
> status does not seem to be propagated upward. For example, if
> the kernel fails to build due to incorrect code, the script
> <machine>-kernel64.sh stops (verifable by examining the logfile),
> however, the make will continue to the next target, src-world,
> and continue building. How do I propagate the status up to the
> top-level make?
Your shell script needs to exit with a non-zero status if it fails.
There are several ways to do this. For instance, if your shell script
looks like this:
#!/bin/sh
make TARGET=amd64 kernel-toolchain
you can:
- prefix "make" with "exec": sh will exec make instead of running it in
a subshell, and the exit status will be whatever make returns.
- add the following line at the bottom:
exit $?
which causes the shell script to exit with the same exit status as
the last command it ran, in this case make.
- append "|| exit 1" to the the "make" command line; this will cause
the script to exit immediately with status 1 if make fails, otherwise
it will continue (in case you want to do something else if make
succeeds)
- wrap the make command line in an if statement, which allows you do
additional work depending on the outcome, and end the failure case
with "exit 1" or similar
- insert the following line at any point between the shebang and the
make command line:
set -e
this will cause sh to terminate the script immediately with a
non-zero exit status if any command after the "set" line fails.
However, I don't see the point of using shell scripts in the first
place...
DES
--
Dag-Erling Smørgrav - des at des.no
More information about the freebsd-hackers
mailing list