diff options
-rw-r--r-- | scripts/lib/devtool/__init__.py | 18 | ||||
-rw-r--r-- | scripts/lib/devtool/standard.py | 30 | ||||
-rw-r--r-- | scripts/lib/devtool/upgrade.py | 20 |
3 files changed, 36 insertions, 32 deletions
diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py index 3ea38028d4..07a3636e9b 100644 --- a/scripts/lib/devtool/__init__.py +++ b/scripts/lib/devtool/__init__.py @@ -152,3 +152,21 @@ def check_workspace_recipe(workspace, pn, checksrc=True): raise DevtoolError("Source tree %s for recipe %s does not exist" % (srctree, pn)) if not os.listdir(srctree): raise DevtoolError("Source tree %s for recipe %s is empty" % (srctree, pn)) + +def use_external_build(same_dir, no_same_dir, d): + """ + Determine if we should use B!=S (separate build and source directories) or not + """ + b_is_s = True + if no_same_dir: + logger.info('Using separate build directory since --no-same-dir specified') + b_is_s = False + elif same_dir: + logger.info('Using source tree as build directory since --same-dir specified') + elif bb.data.inherits_class('autotools-brokensep', d): + logger.info('Using source tree as build directory since recipe inherits autotools-brokensep') + elif d.getVar('B', True) == os.path.abspath(d.getVar('S', True)): + logger.info('Using source tree as build directory since that would be the default for this recipe') + else: + b_is_s = False + return b_is_s diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index ec21b3c139..700a56b4ed 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py @@ -25,7 +25,7 @@ import logging import argparse import scriptutils import errno -from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, DevtoolError +from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, use_external_build, DevtoolError from devtool import parse_recipe logger = logging.getLogger('devtool') @@ -107,17 +107,26 @@ def add(args, config, basepath, workspace): (stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srctree) initial_rev = stdout.rstrip() + tinfoil = setup_tinfoil(config_only=True) + rd = oe.recipeutils.parse_recipe(recipefile, None, tinfoil.config_data) + if not rd: + return 1 + appendfile = os.path.join(appendpath, '%s.bbappend' % bp) with open(appendfile, 'w') as f: f.write('inherit externalsrc\n') f.write('EXTERNALSRC = "%s"\n' % srctree) - if args.same_dir: + + b_is_s = use_external_build(args.same_dir, args.no_same_dir, rd) + if b_is_s: f.write('EXTERNALSRC_BUILD = "%s"\n' % srctree) if initial_rev: f.write('\n# initial_rev: %s\n' % initial_rev) _add_md5(config, args.recipename, appendfile) + tinfoil.shutdown() + return 0 @@ -483,18 +492,7 @@ def modify(args, config, basepath, workspace): f.write('# NOTE: We use pn- overrides here to avoid affecting multiple variants in the case where the recipe uses BBCLASSEXTEND\n') f.write('EXTERNALSRC_pn-%s = "%s"\n' % (args.recipename, srctree)) - b_is_s = True - if args.no_same_dir: - logger.info('using separate build directory since --no-same-dir specified') - b_is_s = False - elif args.same_dir: - logger.info('using source tree as build directory since --same-dir specified') - elif bb.data.inherits_class('autotools-brokensep', rd): - logger.info('using source tree as build directory since original recipe inherits autotools-brokensep') - elif rd.getVar('B', True) == s: - logger.info('using source tree as build directory since that is the default for this recipe') - else: - b_is_s = False + b_is_s = use_external_build(args.same_dir, args.no_same_dir, rd) if b_is_s: f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (args.recipename, srctree)) @@ -876,7 +874,9 @@ def register_commands(subparsers, context): description='Adds a new recipe') parser_add.add_argument('recipename', help='Name for new recipe to add') parser_add.add_argument('srctree', help='Path to external source tree') - parser_add.add_argument('--same-dir', '-s', help='Build in same directory as source', action="store_true") + group = parser_add.add_mutually_exclusive_group() + group.add_argument('--same-dir', '-s', help='Build in same directory as source', action="store_true") + group.add_argument('--no-same-dir', help='Force build in a separate build directory', action="store_true") parser_add.add_argument('--fetch', '-f', help='Fetch the specified URI and extract it to create the source tree', metavar='URI') parser_add.add_argument('--version', '-V', help='Version to use within recipe (PV)') parser_add.set_defaults(func=add) diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py index 86443b0735..6c1dfee3fe 100644 --- a/scripts/lib/devtool/upgrade.py +++ b/scripts/lib/devtool/upgrade.py @@ -29,7 +29,7 @@ import errno import bb import oe.recipeutils from devtool import standard -from devtool import exec_build_env_command, setup_tinfoil, DevtoolError, parse_recipe +from devtool import exec_build_env_command, setup_tinfoil, DevtoolError, parse_recipe, use_external_build logger = logging.getLogger('devtool') @@ -126,21 +126,6 @@ def _rename_recipe_files(bpn, oldpv, newpv, path): _rename_recipe_dirs(oldpv, newpv, path) return _rename_recipe_file(bpn, oldpv, newpv, path) -def _use_external_build(same_dir, no_same_dir, d): - b_is_s = True - if no_same_dir: - logger.info('using separate build directory since --no-same-dir specified') - b_is_s = False - elif same_dir: - logger.info('using source tree as build directory since --same-dir specified') - elif bb.data.inherits_class('autotools-brokensep', d): - logger.info('using source tree as build directory since original recipe inherits autotools-brokensep') - elif d.getVar('B', True) == os.path.abspath(d.getVar('S', True)): - logger.info('using source tree as build directory since that is the default for this recipe') - else: - b_is_s = False - return b_is_s - def _write_append(rc, srctree, same_dir, no_same_dir, rev, workspace, d): """Writes an append file""" if not os.path.exists(rc): @@ -161,7 +146,8 @@ def _write_append(rc, srctree, same_dir, no_same_dir, rev, workspace, d): f.write(('# NOTE: We use pn- overrides here to avoid affecting' 'multiple variants in the case where the recipe uses BBCLASSEXTEND\n')) f.write('EXTERNALSRC_pn-%s = "%s"\n' % (pn, srctree)) - if _use_external_build(same_dir, no_same_dir, d): + b_is_s = use_external_build(same_dir, no_same_dir, d) + if b_is_s: f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (pn, srctree)) if rev: f.write('\n# initial_rev: %s\n' % rev) |