summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-25 16:52:07 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-25 17:42:58 +0000
commit7a8f3f7a012fd323df8d812d969d4190d956a82e (patch)
tree635eb88e6c6dc62f5e66fec38aab605890171782 /meta
parentd12980ff1d47df0b6b8c10c595779af16cb76ffa (diff)
downloadast2050-yocto-poky-7a8f3f7a012fd323df8d812d969d4190d956a82e.zip
ast2050-yocto-poky-7a8f3f7a012fd323df8d812d969d4190d956a82e.tar.gz
package.bbclass: Handle subprocess errors correctly
If an error occurs in subprocess.call() we currently don't catch it. In particular we have issues where debugedit is segfaulting unnoticed. This fixes up various code paths to catch the errors. [YOCTO #4089] (From OE-Core rev: 262a69ffd33e9d001a7a15fc73671a015e3b5dd1) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/package.bbclass32
1 files changed, 26 insertions, 6 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index b6f8767..5dca104 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -254,14 +254,23 @@ def splitdebuginfo(file, debugfile, debugsrcdir, d):
# We need to extract the debug src information here...
if debugsrcdir:
- subprocess.call("'%s' -b '%s' -d '%s' -i -l '%s' '%s'" % (debugedit, workparentdir, debugsrcdir, sourcefile, file), shell=True)
+ cmd = "'%s' -b '%s' -d '%s' -i -l '%s' '%s'" % (debugedit, workparentdir, debugsrcdir, sourcefile, file)
+ retval = subprocess.call(cmd, shell=True)
+ if retval:
+ bb.fatal("debugedit failed with exit code %s (cmd was %s)" % (retval, cmd))
bb.utils.mkdirhier(os.path.dirname(debugfile))
- subprocess.call("'%s' --only-keep-debug '%s' '%s'" % (objcopy, file, debugfile), shell=True)
+ cmd = "'%s' --only-keep-debug '%s' '%s'" % (objcopy, file, debugfile)
+ retval = subprocess.call(cmd, shell=True)
+ if retval:
+ bb.fatal("objcopy failed with exit code %s (cmd was %s)" % (retval, cmd))
# Set the debuglink to have the view of the file path on the target
- subprocess.call("'%s' --add-gnu-debuglink='%s' '%s'" % (objcopy, debugfile, file), shell=True)
+ cmd = "'%s' --add-gnu-debuglink='%s' '%s'" % (objcopy, debugfile, file)
+ retval = subprocess.call(cmd, shell=True)
+ if retval:
+ bb.fatal("objcopy failed with exit code %s (cmd was %s)" % (retval, cmd))
if newmode:
os.chmod(file, origmode)
@@ -298,10 +307,18 @@ def copydebugsources(debugsrcdir, d):
processdebugsrc += "fgrep -z '%s' | "
processdebugsrc += "(cd '%s' ; cpio -pd0mlL --no-preserve-owner '%s%s' 2>/dev/null)"
- subprocess.call(processdebugsrc % (sourcefile, workbasedir, workparentdir, dvar, debugsrcdir), shell=True)
+ cmd = processdebugsrc % (sourcefile, workbasedir, workparentdir, dvar, debugsrcdir)
+ retval = subprocess.call(cmd, shell=True)
+ # Can "fail" if internal headers/transient sources are attempted
+ #if retval:
+ # bb.fatal("debug source copy failed with exit code %s (cmd was %s)" % (retval, cmd))
+
# The copy by cpio may have resulted in some empty directories! Remove these
- subprocess.call("find %s%s -empty -type d -delete" % (dvar, debugsrcdir), shell=True)
+ cmd = "find %s%s -empty -type d -delete" % (dvar, debugsrcdir)
+ retval = subprocess.call(cmd, shell=True)
+ if retval:
+ bb.fatal("empty directory removal failed with exit code %s (cmd was %s)" % (retval, cmd))
# Also remove debugsrcdir if its empty
for p in nosuchdir[::-1]:
@@ -431,7 +448,10 @@ python perform_packagecopy () {
# Start by package population by taking a copy of the installed
# files to operate on
# Preserve sparse files and hard links
- subprocess.call('tar -cf - -C %s -ps . | tar -xf - -C %s' % (dest, dvar), shell=True)
+ cmd = 'tar -cf - -C %s -ps . | tar -xf - -C %s' % (dest, dvar)
+ retval = subprocess.call(cmd, shell=True)
+ if retval:
+ bb.fatal("file copy failed with exit code %s (cmd was %s)" % (retval, cmd))
# replace RPATHs for the nativesdk binaries, to make them relocatable
if bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('cross-canadian', d):
OpenPOWER on IntegriCloud