Module Name: src Committed By: christos Date: Tue Mar 12 01:52:20 UTC 2013
Modified Files: src/tools/host-mkdep: host-mkdep.in Log Message: Perform shell fd gymnastics to capture the error in the pipeline and exit. To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/tools/host-mkdep/host-mkdep.in Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tools/host-mkdep/host-mkdep.in diff -u src/tools/host-mkdep/host-mkdep.in:1.24 src/tools/host-mkdep/host-mkdep.in:1.25 --- src/tools/host-mkdep/host-mkdep.in:1.24 Mon Mar 4 22:06:21 2013 +++ src/tools/host-mkdep/host-mkdep.in Mon Mar 11 21:52:20 2013 @@ -1,6 +1,6 @@ #!@BSHELL@ - # -# $NetBSD: host-mkdep.in,v 1.24 2013/03/05 03:06:21 christos Exp $ +# $NetBSD: host-mkdep.in,v 1.25 2013/03/12 01:52:20 christos Exp $ # # Copyright (c) 1991, 1993 # The Regents of the University of California. All rights reserved. @@ -69,6 +69,13 @@ set_objlist() fi } +# Send the command output to 4, and a command to set the exit code to 5 +exec 5>&1 +run_cmd() { + "$@" 1>&4 4>&- + echo rv=$? 1>&5 5>&- +} + # A getopt compatible command line parser in shell comands. # (don't trust the shell builtin getopts to be in a known state on error) while [ $# -gt 0 ]; do @@ -226,12 +233,13 @@ if $MERGE; then done <$f done >$TMP else + exec 5>&1 for f in $SRCS; do file=${f##*/} file=${file%.*} set_objlist $file - @CPP@ "$@" $f | @AWK@ ' + eval $( (run_cmd @CPP@ "$@" $f 4>&1 | @AWK@ ' /^#/ { # Be as tolerant as possible. sub(/^#(line)? [ 0-9]*\"?/, "") @@ -247,7 +255,11 @@ else print "'"$objlist"'" ": " $0 '"$AWK_OPTIONAL"' } - ' >> $TMP + ' >> $TMP) 5>&1) + case "$rv" in + 0);; + *) exit $rv;; + esac done fi