[OE-core] [PATCH 4/6] devtool: also load plugins from BBPATH
ChenQi
Qi.Chen at windriver.com
Wed Jul 29 06:58:37 UTC 2015
Hi Christopher,
I suspect this patch is causing failure for 'populate_sdk_ext' task.
Could you please take a look at it?
See error message below.
Best Regards,
Chen Qi
=======================
ERROR: Error executing a python function in
/buildarea2/chenqi/poky/meta/recipes-core/images/core-image-minimal.bb:
The stack trace of python calls that resulted in this exception/failure was:
File: 'copy_buildsystem', lineno: 127, function: <module>
0123: with open(baseoutpath + '/conf/work-config.inc', 'w') as f:
0124: pass
0125:
0126:
*** 0127:copy_buildsystem(d)
0128:
File: 'copy_buildsystem', lineno: 53, function: copy_buildsystem
0049: with open(os.path.join(baseoutpath, 'conf',
'devtool.conf'), 'w') as f:
0050: config.write(f)
0051:
0052: # Create a layer for new recipes / appends
*** 0053: bb.process.run("devtool --basepath %s create-workspace
--create-only %s" % (baseoutpath, os.path.join(baseoutpath, 'workspace')))
0054:
0055: # Create bblayers.conf
0056: bb.utils.mkdirhier(baseoutpath + '/conf')
0057: with open(baseoutpath + '/conf/bblayers.conf', 'w') as f:
File: '/buildarea2/chenqi/poky/bitbake/lib/bb/process.py', lineno: 152,
function: run
0148: else:
0149: stdout, stderr = pipe.communicate(input)
0150:
0151: if pipe.returncode != 0:
*** 0152: raise ExecutionError(cmd, pipe.returncode, stdout,
stderr)
0153: return stdout, stderr
Exception: ExecutionError: Execution of 'devtool --basepath
/buildarea2/chenqi/poky/build-systemd/tmp-2/work/qemuarm-poky-linux-gnueabi/core-image-minimal/1.0-r0/sdk-ext/image//opt/poky/1.8+snapshot
create-workspace --create-only
/buildarea2/chenqi/poky/build-systemd/tmp-2/work/qemuarm-poky-linux-gnueabi/core-image-minimal/1.0-r0/sdk-ext/image//opt/poky/1.8+snapshot/workspace'
failed with exit code 1:
ERROR: Only one copy of bitbake should be run against a build directory
Traceback (most recent call last):
File "/buildarea2/chenqi/poky/scripts/devtool", line 281, in <module>
ret = main()
File "/buildarea2/chenqi/poky/scripts/devtool", line 242, in main
tinfoil = setup_tinfoil(config_only=True)
File "/buildarea2/chenqi/poky/scripts/lib/devtool/__init__.py", line
108, in setup_tinfoil
tinfoil = bb.tinfoil.Tinfoil()
File
"/buildarea2/chenqi/poky/build-systemd/tmp-2/work/qemuarm-poky-linux-gnueabi/core-image-minimal/1.0-r0/sdk-ext/image//opt/poky/1.8+snapshot/layers/poky/bitbake/lib/bb/tinfoil.py",
line 54, in __init__
self.cooker = BBCooker(self.config, features)
File
"/buildarea2/chenqi/poky/build-systemd/tmp-2/work/qemuarm-poky-linux-gnueabi/core-image-minimal/1.0-r0/sdk-ext/image//opt/poky/1.8+snapshot/layers/poky/bitbake/lib/bb/cooker.py",
line 155, in __init__
bb.fatal("Only one copy of bitbake should be run against a build
directory")
BBHandledException
ERROR: Function failed: copy_buildsystem
ERROR: Logfile of failure stored in:
/buildarea2/chenqi/poky/build-systemd/tmp-2/work/qemuarm-poky-linux-gnueabi/core-image-minimal/1.0-r0/temp/log.do_populate_sdk_ext.3616
ERROR: Task 12
(/buildarea2/chenqi/poky/meta/recipes-core/images/core-image-minimal.bb,
do_populate_sdk_ext) failed with exit code '1'
On 07/14/2015 11:57 PM, Christopher Larson wrote:
> From: Christopher Larson <chris_larson at mentor.com>
>
> This makes it easier to extend, as a layer can add its own sub-commands.
>
> tinfoil is now passed into the commands, as we needed to parse the
> configuration metadata to get BBPATH, and we don't want to construct tinfoil
> more than once, otherwise we have to deal with startup and shutdown of cooker.
>
> [YOCTO #7625]
>
> Signed-off-by: Christopher Larson <chris_larson at mentor.com>
> ---
> scripts/devtool | 57 +++++++++++++++++++++++++----------------
> scripts/lib/devtool/__init__.py | 4 +--
> scripts/lib/devtool/deploy.py | 6 ++---
> scripts/lib/devtool/standard.py | 15 +++++------
> 4 files changed, 46 insertions(+), 36 deletions(-)
>
> diff --git a/scripts/devtool b/scripts/devtool
> index fa799f6..01bb412 100755
> --- a/scripts/devtool
> +++ b/scripts/devtool
> @@ -35,7 +35,7 @@ context = None
> scripts_path = os.path.dirname(os.path.realpath(__file__))
> lib_path = scripts_path + '/lib'
> sys.path = sys.path + [lib_path]
> -from devtool import DevtoolError
> +from devtool import DevtoolError, setup_tinfoil
> import scriptutils
> logger = scriptutils.logger_create('devtool')
>
> @@ -186,37 +186,28 @@ def main():
> pth = os.path.dirname(pth)
>
> parser = argparse.ArgumentParser(description="OpenEmbedded development tool",
> + add_help=False,
> epilog="Use %(prog)s <subcommand> --help to get help on a specific command")
> parser.add_argument('--basepath', help='Base directory of SDK / build directory')
> parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true')
> parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true')
> parser.add_argument('--color', choices=['auto', 'always', 'never'], default='auto', help='Colorize output (where %(metavar)s is %(choices)s)', metavar='COLOR')
>
> - subparsers = parser.add_subparsers(dest="subparser_name", title='subcommands', metavar='<subcommand>')
> + initial_args, unparsed_args = parser.parse_known_args()
>
> - if not context.fixed_setup:
> - parser_create_workspace = subparsers.add_parser('create-workspace',
> - help='Set up a workspace',
> - description='Sets up a new workspace. NOTE: other devtool subcommands will create a workspace automatically as needed, so you only need to use %(prog)s if you want to specify where the workspace should be located.')
> - parser_create_workspace.add_argument('layerpath', nargs='?', help='Path in which the workspace layer should be created')
> - parser_create_workspace.add_argument('--create-only', action="store_true", help='Only create the workspace layer, do not alter configuration')
> - parser_create_workspace.set_defaults(func=create_workspace)
> + # Help is added here rather than via add_help=True, as we don't want it to
> + # be handled by parse_known_args()
> + parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS,
> + help='show this help message and exit')
>
> - scriptutils.load_plugins(logger, plugins, os.path.join(scripts_path, 'lib', 'devtool'))
> - for plugin in plugins:
> - if hasattr(plugin, 'register_commands'):
> - plugin.register_commands(subparsers, context)
> -
> - args = parser.parse_args()
> -
> - if args.debug:
> + if initial_args.debug:
> logger.setLevel(logging.DEBUG)
> - elif args.quiet:
> + elif initial_args.quiet:
> logger.setLevel(logging.ERROR)
>
> - if args.basepath:
> + if initial_args.basepath:
> # Override
> - basepath = args.basepath
> + basepath = initial_args.basepath
> elif not context.fixed_setup:
> basepath = os.environ.get('BUILDDIR')
> if not basepath:
> @@ -246,13 +237,35 @@ def main():
> logger.debug('Using standard bitbake path %s' % bitbakepath)
> scriptpath.add_oe_lib_path()
>
> - scriptutils.logger_setup_color(logger, args.color)
> + scriptutils.logger_setup_color(logger, initial_args.color)
> +
> + tinfoil = setup_tinfoil(config_only=True)
> + for path in ([scripts_path] +
> + tinfoil.config_data.getVar('BBPATH', True).split(':')):
> + pluginpath = os.path.join(path, 'lib', 'devtool')
> + scriptutils.load_plugins(logger, plugins, pluginpath)
> +
> + subparsers = parser.add_subparsers(dest="subparser_name", title='subcommands', metavar='<subcommand>')
> +
> + if not context.fixed_setup:
> + parser_create_workspace = subparsers.add_parser('create-workspace',
> + help='Set up a workspace',
> + description='Sets up a new workspace. NOTE: other devtool subcommands will create a workspace automatically as needed, so you only need to use %(prog)s if you want to specify where the workspace should be located.')
> + parser_create_workspace.add_argument('layerpath', nargs='?', help='Path in which the workspace layer should be created')
> + parser_create_workspace.add_argument('--create-only', action="store_true", help='Only create the workspace layer, do not alter configuration')
> + parser_create_workspace.set_defaults(func=create_workspace)
> +
> + for plugin in plugins:
> + if hasattr(plugin, 'register_commands'):
> + plugin.register_commands(subparsers, context)
> +
> + args = parser.parse_args(unparsed_args, namespace=initial_args)
>
> if args.subparser_name != 'create-workspace':
> read_workspace()
>
> try:
> - ret = args.func(args, config, basepath, workspace)
> + ret = args.func(args, config, basepath, workspace, tinfoil)
> except DevtoolError as err:
> if str(err):
> logger.error(str(err))
> diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py
> index 61b810c..b54ddf5 100644
> --- a/scripts/lib/devtool/__init__.py
> +++ b/scripts/lib/devtool/__init__.py
> @@ -96,7 +96,7 @@ def exec_fakeroot(d, cmd, **kwargs):
> newenv[splitval[0]] = splitval[1]
> return subprocess.call("%s %s" % (fakerootcmd, cmd), env=newenv, **kwargs)
>
> -def setup_tinfoil():
> +def setup_tinfoil(config_only=False):
> """Initialize tinfoil api from bitbake"""
> import scriptpath
> bitbakepath = scriptpath.add_bitbake_lib_path()
> @@ -106,7 +106,7 @@ def setup_tinfoil():
>
> import bb.tinfoil
> tinfoil = bb.tinfoil.Tinfoil()
> - tinfoil.prepare(False)
> + tinfoil.prepare(config_only)
> tinfoil.logger.setLevel(logger.getEffectiveLevel())
> return tinfoil
>
> diff --git a/scripts/lib/devtool/deploy.py b/scripts/lib/devtool/deploy.py
> index 448db96..3bc59de 100644
> --- a/scripts/lib/devtool/deploy.py
> +++ b/scripts/lib/devtool/deploy.py
> @@ -28,7 +28,7 @@ def plugin_init(pluginlist):
> pass
>
>
> -def deploy(args, config, basepath, workspace):
> +def deploy(args, config, basepath, workspace, tinfoil):
> """Entry point for the devtool 'deploy' subcommand"""
> import re
> import oe.recipeutils
> @@ -46,7 +46,7 @@ def deploy(args, config, basepath, workspace):
> deploy_dir = os.path.join(basepath, 'target_deploy', args.target)
> deploy_file = os.path.join(deploy_dir, args.recipename + '.list')
>
> - tinfoil = setup_tinfoil()
> + tinfoil.parseRecipes()
> try:
> rd = oe.recipeutils.parse_recipe_simple(tinfoil.cooker, args.recipename, tinfoil.config_data)
> except Exception as e:
> @@ -100,7 +100,7 @@ def deploy(args, config, basepath, workspace):
>
> return 0
>
> -def undeploy(args, config, basepath, workspace):
> +def undeploy(args, config, basepath, workspace, tinfoil):
> """Entry point for the devtool 'undeploy' subcommand"""
> deploy_file = os.path.join(basepath, 'target_deploy', args.target, args.recipename + '.list')
> if not os.path.exists(deploy_file):
> diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
> index ea21877..8fe32b7 100644
> --- a/scripts/lib/devtool/standard.py
> +++ b/scripts/lib/devtool/standard.py
> @@ -193,12 +193,11 @@ def _ls_tree(directory):
> return ret
>
>
> -def extract(args, config, basepath, workspace):
> +def extract(args, config, basepath, workspace, tinfoil):
> """Entry point for the devtool 'extract' subcommand"""
> import bb
>
> - tinfoil = setup_tinfoil()
> -
> + tinfoil.parseRecipes()
> rd = _parse_recipe(config, tinfoil, args.recipename, True)
> if not rd:
> return 1
> @@ -409,7 +408,7 @@ def _check_preserve(config, recipename):
> tf.write(line)
> os.rename(newfile, origfile)
>
> -def modify(args, config, basepath, workspace):
> +def modify(args, config, basepath, workspace, tinfoil):
> """Entry point for the devtool 'modify' subcommand"""
> import bb
> import oe.recipeutils
> @@ -423,8 +422,7 @@ def modify(args, config, basepath, workspace):
> "(specify -x to extract source from recipe)" %
> args.srctree)
>
> - tinfoil = setup_tinfoil()
> -
> + tinfoil.parseRecipes()
> rd = _parse_recipe(config, tinfoil, args.recipename, True)
> if not rd:
> return 1
> @@ -747,7 +745,7 @@ def _update_recipe_patch(args, config, srctree, rd, config_data):
>
> _remove_patch_files(args, removepatches, destpath)
>
> -def update_recipe(args, config, basepath, workspace):
> +def update_recipe(args, config, basepath, workspace, tinfoil):
> """Entry point for the devtool 'update-recipe' subcommand"""
> if not args.recipename in workspace:
> raise DevtoolError("no recipe named %s in your workspace" %
> @@ -761,8 +759,7 @@ def update_recipe(args, config, basepath, workspace):
> raise DevtoolError('conf/layer.conf not found in bbappend '
> 'destination layer "%s"' % args.append)
>
> - tinfoil = setup_tinfoil()
> -
> + tinfoil.parseRecipes()
> rd = _parse_recipe(config, tinfoil, args.recipename, True)
> if not rd:
> return 1
More information about the Openembedded-core
mailing list