mirror of
https://git.yoctoproject.org/poky
synced 2026-02-26 19:39:40 +01:00
The preparation script itself prints out an error on failure, and we aren't redirecting its output anymore, so we no longer need to print out a message here when it fails. At the same time, make the message printed out by the script a little clearer - we're just writing the log out to the file, we shouldn't give the user an expectation that there will be extra details in there (other than the output produced by oe-init-build-env there won't be). (From OE-Core rev: 80dfaf40e087b34d6360188df372c1c3805a00bd) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
#!/usr/bin/env python
|
|
|
|
# Prepare the build system within the extensible SDK
|
|
|
|
import sys
|
|
import os
|
|
import subprocess
|
|
import signal
|
|
|
|
def reenable_sigint():
|
|
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
|
|
|
def run_command_interruptible(cmd):
|
|
"""
|
|
Run a command with output displayed on the console, but ensure any Ctrl+C is
|
|
processed only by the child process.
|
|
"""
|
|
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
|
try:
|
|
ret = subprocess.call(cmd, shell=True, preexec_fn=reenable_sigint)
|
|
finally:
|
|
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
|
return ret
|
|
|
|
def get_last_consolelog():
|
|
'''Return the most recent console log file'''
|
|
logdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'tmp', 'log', 'cooker')
|
|
if os.path.exists(logdir):
|
|
mcdir = os.listdir(logdir)
|
|
if mcdir:
|
|
logdir = os.path.join(logdir, mcdir[0])
|
|
logfiles = [os.path.join(logdir, fn) for fn in os.listdir(logdir)]
|
|
logfiles.sort(key=os.path.getmtime)
|
|
if logfiles:
|
|
return os.path.join(logdir, logfiles[-1])
|
|
return None
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
print('Please specify output log file')
|
|
return 1
|
|
logfile = sys.argv[1]
|
|
if len(sys.argv) < 3:
|
|
sdk_targets = []
|
|
else:
|
|
sdk_targets = ' '.join(sys.argv[2:]).split()
|
|
if not sdk_targets:
|
|
# Just do a parse so the cache is primed
|
|
ret = run_command_interruptible('bitbake -p --quiet')
|
|
return ret
|
|
|
|
with open(logfile, 'a') as logf:
|
|
logf.write('Preparing SDK for %s...\n' % ', '.join(sdk_targets))
|
|
|
|
ret = run_command_interruptible('BB_SETSCENE_ENFORCE=1 bitbake --quiet %s' % ' '.join(sdk_targets))
|
|
lastlog = get_last_consolelog()
|
|
if lastlog:
|
|
with open(lastlog, 'r') as f:
|
|
for line in f:
|
|
logf.write(line)
|
|
if ret:
|
|
print('ERROR: SDK preparation failed: error log written to %s' % logfile)
|
|
return ret
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
ret = main()
|
|
except Exception:
|
|
ret = 1
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(ret)
|