summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/lib/devtool/__init__.py9
-rw-r--r--scripts/lib/devtool/standard.py22
2 files changed, 24 insertions, 7 deletions
diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py
index 88665124d1..5a06c78b57 100644
--- a/scripts/lib/devtool/__init__.py
+++ b/scripts/lib/devtool/__init__.py
@@ -44,13 +44,14 @@ def exec_build_env_command(init_path, builddir, cmd, watch=False, **options):
44 if watch: 44 if watch:
45 if sys.stdout.isatty(): 45 if sys.stdout.isatty():
46 # Fool bitbake into thinking it's outputting to a terminal (because it is, indirectly) 46 # Fool bitbake into thinking it's outputting to a terminal (because it is, indirectly)
47 cmd = 'script -q -c "%s" /dev/null' % cmd 47 cmd = 'script -e -q -c "%s" /dev/null' % cmd
48 return exec_watch('%s%s' % (init_prefix, cmd), **options) 48 return exec_watch('%s%s' % (init_prefix, cmd), **options)
49 else: 49 else:
50 return bb.process.run('%s%s' % (init_prefix, cmd), **options) 50 return bb.process.run('%s%s' % (init_prefix, cmd), **options)
51 51
52def exec_watch(cmd, **options): 52def exec_watch(cmd, **options):
53 """Run program with stdout shown on sys.stdout""" 53 """Run program with stdout shown on sys.stdout"""
54 import bb
54 if isinstance(cmd, basestring) and not "shell" in options: 55 if isinstance(cmd, basestring) and not "shell" in options:
55 options["shell"] = True 56 options["shell"] = True
56 57
@@ -67,7 +68,11 @@ def exec_watch(cmd, **options):
67 buf += out 68 buf += out
68 elif out == '' and process.poll() != None: 69 elif out == '' and process.poll() != None:
69 break 70 break
70 return buf 71
72 if process.returncode != 0:
73 raise bb.process.ExecutionError(cmd, process.returncode, buf, None)
74
75 return buf, None
71 76
72def setup_tinfoil(): 77def setup_tinfoil():
73 """Initialize tinfoil api from bitbake""" 78 """Initialize tinfoil api from bitbake"""
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index 2f8b194c5f..61c0df9b11 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -97,8 +97,12 @@ def add(args, config, basepath, workspace):
97 source = srctree 97 source = srctree
98 if args.version: 98 if args.version:
99 extracmdopts += ' -V %s' % args.version 99 extracmdopts += ' -V %s' % args.version
100 stdout, _ = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s" %s' % (color, recipefile, source, extracmdopts)) 100 try:
101 logger.info('Recipe %s has been automatically created; further editing may be required to make it fully functional' % recipefile) 101 stdout, _ = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s" %s' % (color, recipefile, source, extracmdopts))
102 logger.info('Recipe %s has been automatically created; further editing may be required to make it fully functional' % recipefile)
103 except bb.process.ExecutionError as e:
104 logger.error('Command \'%s\' failed:\n%s' % (e.command, e.stdout))
105 return 1
102 106
103 _add_md5(config, args.recipename, recipefile) 107 _add_md5(config, args.recipename, recipefile)
104 108
@@ -688,7 +692,7 @@ def status(args, config, basepath, workspace):
688 692
689def reset(args, config, basepath, workspace): 693def reset(args, config, basepath, workspace):
690 """Entry point for the devtool 'reset' subcommand""" 694 """Entry point for the devtool 'reset' subcommand"""
691 import bb.utils 695 import bb
692 if args.recipename: 696 if args.recipename:
693 if args.all: 697 if args.all:
694 logger.error("Recipe cannot be specified if -a/--all is used") 698 logger.error("Recipe cannot be specified if -a/--all is used")
@@ -708,7 +712,11 @@ def reset(args, config, basepath, workspace):
708 for pn in recipes: 712 for pn in recipes:
709 if not args.no_clean: 713 if not args.no_clean:
710 logger.info('Cleaning sysroot for recipe %s...' % pn) 714 logger.info('Cleaning sysroot for recipe %s...' % pn)
711 exec_build_env_command(config.init_path, basepath, 'bitbake -c clean %s' % pn) 715 try:
716 exec_build_env_command(config.init_path, basepath, 'bitbake -c clean %s' % pn)
717 except bb.process.ExecutionError as e:
718 logger.error('Command \'%s\' failed, output:\n%s\nIf you wish, you may specify -n/--no-clean to skip running this command when resetting' % (e.command, e.stdout))
719 return 1
712 720
713 _check_preserve(config, pn) 721 _check_preserve(config, pn)
714 722
@@ -735,7 +743,11 @@ def build(args, config, basepath, workspace):
735 logger.error("no recipe named %s in your workspace" % args.recipename) 743 logger.error("no recipe named %s in your workspace" % args.recipename)
736 return -1 744 return -1
737 build_task = config.get('Build', 'build_task', 'populate_sysroot') 745 build_task = config.get('Build', 'build_task', 'populate_sysroot')
738 exec_build_env_command(config.init_path, basepath, 'bitbake -c %s %s' % (build_task, args.recipename), watch=True) 746 try:
747 exec_build_env_command(config.init_path, basepath, 'bitbake -c %s %s' % (build_task, args.recipename), watch=True)
748 except bb.process.ExecutionError as e:
749 # We've already seen the output since watch=True, so just ensure we return something to the user
750 return e.exitcode
739 751
740 return 0 752 return 0
741 753