Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Jun 2010 11:30:43 +0200
From:      =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= <des@des.no>
To:        Patrick Mahan <mahan@mahan.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Help with some makefile hackery
Message-ID:  <86hbkujdto.fsf@ds4.des.no>
In-Reply-To: <4C21A743.6040306@mahan.org> (Patrick Mahan's message of "Tue, 22 Jun 2010 23:18:43 -0700")
References:  <4C21A743.6040306@mahan.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Patrick Mahan <mahan@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=3Damd64 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
--=20
Dag-Erling Sm=C3=B8rgrav - des@des.no



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86hbkujdto.fsf>