summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Debian/Debhelper/Dh_Lib.pm19
-rw-r--r--debian/changelog1
2 files changed, 16 insertions, 4 deletions
diff --git a/Debian/Debhelper/Dh_Lib.pm b/Debian/Debhelper/Dh_Lib.pm
index f0aa71df..a11c36a3 100644
--- a/Debian/Debhelper/Dh_Lib.pm
+++ b/Debian/Debhelper/Dh_Lib.pm
@@ -162,8 +162,7 @@ sub doit {
verbose_print(escape_shell(@_));
if (! $dh{NO_ACT}) {
- my $ret=system(@_);
- $ret == 0 || error("command returned error code $ret");
+ system(@_) == 0 || _error_exitcode($_[0]);
}
}
@@ -176,11 +175,23 @@ sub complex_doit {
if (! $dh{NO_ACT}) {
# The join makes system get a scalar so it forks off a shell.
- system(join(" ",@_)) == 0
- || error("command returned error code");
+ system(join(" ", @_)) == 0 || _error_exitcode(join(" ", @_))
}
}
+sub _error_exitcode {
+ my $command=shift;
+ if ($? == -1) {
+ error("$command failed to to execute: $!");
+ }
+ elsif ($? & 127) {
+ error("$command died with signal ".($? & 127));
+ }
+ else {
+ error("$command returned exit code ".($? >> 8));
+ }
+}
+
# Run a command that may have a huge number of arguments, like xargs does.
# Pass in a reference to an array containing the arguments, and then other
# parameters that are the command and any parameters that should be passed to
diff --git a/debian/changelog b/debian/changelog
index 89403bd8..4985542f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -14,6 +14,7 @@ debhelper (7.2.0) UNRELEASED; urgency=low
* dh: Support debian/rules calling make with -B,
which is useful to avoid issues with phony implicit
rules (see bug #509756).
+ * Improve error messages when child commands fail.
-- Joey Hess <joeyh@debian.org> Thu, 25 Dec 2008 16:26:36 -0500