1*4882a593Smuzhiyun# Development tool - package command plugin 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Copyright (C) 2014-2015 Intel Corporation 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 6*4882a593Smuzhiyun# 7*4882a593Smuzhiyun"""Devtool plugin containing the package subcommands""" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunimport os 10*4882a593Smuzhiyunimport subprocess 11*4882a593Smuzhiyunimport logging 12*4882a593Smuzhiyunfrom bb.process import ExecutionError 13*4882a593Smuzhiyunfrom devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, DevtoolError 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunlogger = logging.getLogger('devtool') 16*4882a593Smuzhiyun 17*4882a593Smuzhiyundef package(args, config, basepath, workspace): 18*4882a593Smuzhiyun """Entry point for the devtool 'package' subcommand""" 19*4882a593Smuzhiyun check_workspace_recipe(workspace, args.recipename) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun tinfoil = setup_tinfoil(basepath=basepath, config_only=True) 22*4882a593Smuzhiyun try: 23*4882a593Smuzhiyun image_pkgtype = config.get('Package', 'image_pkgtype', '') 24*4882a593Smuzhiyun if not image_pkgtype: 25*4882a593Smuzhiyun image_pkgtype = tinfoil.config_data.getVar('IMAGE_PKGTYPE') 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun deploy_dir_pkg = tinfoil.config_data.getVar('DEPLOY_DIR_%s' % image_pkgtype.upper()) 28*4882a593Smuzhiyun finally: 29*4882a593Smuzhiyun tinfoil.shutdown() 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun package_task = config.get('Package', 'package_task', 'package_write_%s' % image_pkgtype) 32*4882a593Smuzhiyun try: 33*4882a593Smuzhiyun exec_build_env_command(config.init_path, basepath, 'bitbake -c %s %s' % (package_task, args.recipename), watch=True) 34*4882a593Smuzhiyun except bb.process.ExecutionError as e: 35*4882a593Smuzhiyun # We've already seen the output since watch=True, so just ensure we return something to the user 36*4882a593Smuzhiyun return e.exitcode 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun logger.info('Your packages are in %s' % deploy_dir_pkg) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun return 0 41*4882a593Smuzhiyun 42*4882a593Smuzhiyundef register_commands(subparsers, context): 43*4882a593Smuzhiyun """Register devtool subcommands from the package plugin""" 44*4882a593Smuzhiyun if context.fixed_setup: 45*4882a593Smuzhiyun parser_package = subparsers.add_parser('package', 46*4882a593Smuzhiyun help='Build packages for a recipe', 47*4882a593Smuzhiyun description='Builds packages for a recipe\'s output files', 48*4882a593Smuzhiyun group='testbuild', order=-5) 49*4882a593Smuzhiyun parser_package.add_argument('recipename', help='Recipe to package') 50*4882a593Smuzhiyun parser_package.set_defaults(func=package) 51