diff options
Diffstat (limited to 'scripts/lib/devtool/standard.py')
| -rw-r--r-- | scripts/lib/devtool/standard.py | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index 02ed23574b..4b9b173156 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py | |||
| @@ -30,7 +30,7 @@ import errno | |||
| 30 | import glob | 30 | import glob |
| 31 | import filecmp | 31 | import filecmp |
| 32 | from collections import OrderedDict | 32 | from collections import OrderedDict |
| 33 | from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, use_external_build, setup_git_repo, recipe_to_append, get_bbclassextend_targets, DevtoolError | 33 | from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, use_external_build, setup_git_repo, recipe_to_append, get_bbclassextend_targets, ensure_npm, DevtoolError |
| 34 | from devtool import parse_recipe | 34 | from devtool import parse_recipe |
| 35 | 35 | ||
| 36 | logger = logging.getLogger('devtool') | 36 | logger = logging.getLogger('devtool') |
| @@ -128,6 +128,9 @@ def add(args, config, basepath, workspace): | |||
| 128 | color = args.color | 128 | color = args.color |
| 129 | extracmdopts = '' | 129 | extracmdopts = '' |
| 130 | if args.fetchuri: | 130 | if args.fetchuri: |
| 131 | if args.fetchuri.startswith('npm://'): | ||
| 132 | ensure_npm(config, basepath, args.fixed_setup) | ||
| 133 | |||
| 131 | source = args.fetchuri | 134 | source = args.fetchuri |
| 132 | if srctree: | 135 | if srctree: |
| 133 | extracmdopts += ' -x %s' % srctree | 136 | extracmdopts += ' -x %s' % srctree |
| @@ -150,13 +153,23 @@ def add(args, config, basepath, workspace): | |||
| 150 | 153 | ||
| 151 | tempdir = tempfile.mkdtemp(prefix='devtool') | 154 | tempdir = tempfile.mkdtemp(prefix='devtool') |
| 152 | try: | 155 | try: |
| 153 | try: | 156 | while True: |
| 154 | stdout, _ = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s" %s' % (color, tempdir, source, extracmdopts)) | 157 | try: |
| 155 | except bb.process.ExecutionError as e: | 158 | stdout, _ = exec_build_env_command(config.init_path, basepath, 'recipetool --color=%s create -o %s "%s" %s' % (color, tempdir, source, extracmdopts)) |
| 156 | if e.exitcode == 15: | 159 | except bb.process.ExecutionError as e: |
| 157 | raise DevtoolError('Could not auto-determine recipe name, please specify it on the command line') | 160 | if e.exitcode == 14: |
| 158 | else: | 161 | # FIXME this is a horrible hack that is unfortunately |
| 159 | raise DevtoolError('Command \'%s\' failed:\n%s' % (e.command, e.stdout)) | 162 | # necessary due to the fact that we can't run bitbake from |
| 163 | # inside recipetool since recipetool keeps tinfoil active | ||
| 164 | # with references to it throughout the code, so we have | ||
| 165 | # to exit out and come back here to do it. | ||
| 166 | ensure_npm(config, basepath, args.fixed_setup) | ||
| 167 | continue | ||
| 168 | elif e.exitcode == 15: | ||
| 169 | raise DevtoolError('Could not auto-determine recipe name, please specify it on the command line') | ||
| 170 | else: | ||
| 171 | raise DevtoolError('Command \'%s\' failed:\n%s' % (e.command, e.stdout)) | ||
| 172 | break | ||
| 160 | 173 | ||
| 161 | recipes = glob.glob(os.path.join(tempdir, '*.bb')) | 174 | recipes = glob.glob(os.path.join(tempdir, '*.bb')) |
| 162 | if recipes: | 175 | if recipes: |
| @@ -1567,7 +1580,7 @@ def register_commands(subparsers, context): | |||
| 1567 | parser_add.add_argument('--binary', '-b', help='Treat the source tree as something that should be installed verbatim (no compilation, same directory structure). Useful with binary packages e.g. RPMs.', action='store_true') | 1580 | parser_add.add_argument('--binary', '-b', help='Treat the source tree as something that should be installed verbatim (no compilation, same directory structure). Useful with binary packages e.g. RPMs.', action='store_true') |
| 1568 | parser_add.add_argument('--also-native', help='Also add native variant (i.e. support building recipe for the build host as well as the target machine)', action='store_true') | 1581 | parser_add.add_argument('--also-native', help='Also add native variant (i.e. support building recipe for the build host as well as the target machine)', action='store_true') |
| 1569 | parser_add.add_argument('--src-subdir', help='Specify subdirectory within source tree to use', metavar='SUBDIR') | 1582 | parser_add.add_argument('--src-subdir', help='Specify subdirectory within source tree to use', metavar='SUBDIR') |
| 1570 | parser_add.set_defaults(func=add) | 1583 | parser_add.set_defaults(func=add, fixed_setup=context.fixed_setup) |
| 1571 | 1584 | ||
| 1572 | parser_modify = subparsers.add_parser('modify', help='Modify the source for an existing recipe', | 1585 | parser_modify = subparsers.add_parser('modify', help='Modify the source for an existing recipe', |
| 1573 | description='Sets up the build environment to modify the source for an existing recipe. The default behaviour is to extract the source being fetched by the recipe into a git tree so you can work on it; alternatively if you already have your own pre-prepared source tree you can specify -n/--no-extract.', | 1586 | description='Sets up the build environment to modify the source for an existing recipe. The default behaviour is to extract the source being fetched by the recipe into a git tree so you can work on it; alternatively if you already have your own pre-prepared source tree you can specify -n/--no-extract.', |
