base.bbclass: Use subprocess rather than os.system for do_unpack

gzip reports broken pipe errors with do_unpack on Fedora with
certain builds of gzip and bash. By avoding python's SIGPIPE handler
we can work correctly on these distributions.

Patch based on a patch from the OE-devel mailing list, thanks to
Khem Raj <raj.khem@gmail.com> and Holger Freyther <zecke@selfish.org>

Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
Richard Purdie 2009-08-25 16:37:50 +01:00
parent 7859b4c9bd
commit c2b4308119
1 changed files with 10 additions and 2 deletions

View File

@ -627,8 +627,16 @@ base_do_buildall() {
}
def subprocess_setup():
import signal
# Python installs a SIGPIPE handler by default. This is usually not what
# non-Python subprocesses expect.
# SIGPIPE errors are known issues with gzip/bash
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
def oe_unpack_file(file, data, url = None):
import bb, os
import bb, os, subprocess
if not url:
url = "file://%s" % file
dots = file.split(".")
@ -694,7 +702,7 @@ def oe_unpack_file(file, data, url = None):
cmd = "PATH=\"%s\" %s" % (bb.data.getVar('PATH', data, 1), cmd)
bb.note("Unpacking %s to %s/" % (file, os.getcwd()))
ret = os.system(cmd)
ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True)
os.chdir(save_cwd)