1*4882a593Smuzhiyun# Recipe creation tool - set variable plugin 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Copyright (C) 2015 Intel Corporation 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 6*4882a593Smuzhiyun# 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunimport sys 9*4882a593Smuzhiyunimport os 10*4882a593Smuzhiyunimport argparse 11*4882a593Smuzhiyunimport glob 12*4882a593Smuzhiyunimport fnmatch 13*4882a593Smuzhiyunimport re 14*4882a593Smuzhiyunimport logging 15*4882a593Smuzhiyunimport scriptutils 16*4882a593Smuzhiyun 17*4882a593Smuzhiyunlogger = logging.getLogger('recipetool') 18*4882a593Smuzhiyun 19*4882a593Smuzhiyuntinfoil = None 20*4882a593Smuzhiyunplugins = None 21*4882a593Smuzhiyun 22*4882a593Smuzhiyundef tinfoil_init(instance): 23*4882a593Smuzhiyun global tinfoil 24*4882a593Smuzhiyun tinfoil = instance 25*4882a593Smuzhiyun 26*4882a593Smuzhiyundef setvar(args): 27*4882a593Smuzhiyun import oe.recipeutils 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun if args.delete: 30*4882a593Smuzhiyun if args.value: 31*4882a593Smuzhiyun logger.error('-D/--delete and specifying a value are mutually exclusive') 32*4882a593Smuzhiyun return 1 33*4882a593Smuzhiyun value = None 34*4882a593Smuzhiyun else: 35*4882a593Smuzhiyun if args.value is None: 36*4882a593Smuzhiyun logger.error('You must specify a value if not using -D/--delete') 37*4882a593Smuzhiyun return 1 38*4882a593Smuzhiyun value = args.value 39*4882a593Smuzhiyun varvalues = {args.varname: value} 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun if args.recipe_only: 42*4882a593Smuzhiyun patches = [oe.recipeutils.patch_recipe_file(args.recipefile, varvalues, patch=args.patch)] 43*4882a593Smuzhiyun else: 44*4882a593Smuzhiyun rd = tinfoil.parse_recipe_file(args.recipefile, False) 45*4882a593Smuzhiyun if not rd: 46*4882a593Smuzhiyun return 1 47*4882a593Smuzhiyun patches = oe.recipeutils.patch_recipe(rd, args.recipefile, varvalues, patch=args.patch) 48*4882a593Smuzhiyun if args.patch: 49*4882a593Smuzhiyun for patch in patches: 50*4882a593Smuzhiyun for line in patch: 51*4882a593Smuzhiyun sys.stdout.write(line) 52*4882a593Smuzhiyun return 0 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun 55*4882a593Smuzhiyundef register_commands(subparsers): 56*4882a593Smuzhiyun parser_setvar = subparsers.add_parser('setvar', 57*4882a593Smuzhiyun help='Set a variable within a recipe', 58*4882a593Smuzhiyun description='Adds/updates the value a variable is set to in a recipe') 59*4882a593Smuzhiyun parser_setvar.add_argument('recipefile', help='Recipe file to update') 60*4882a593Smuzhiyun parser_setvar.add_argument('varname', help='Variable name to set') 61*4882a593Smuzhiyun parser_setvar.add_argument('value', nargs='?', help='New value to set the variable to') 62*4882a593Smuzhiyun parser_setvar.add_argument('--recipe-only', '-r', help='Do not set variable in any include file if present', action='store_true') 63*4882a593Smuzhiyun parser_setvar.add_argument('--patch', '-p', help='Create a patch to make the change instead of modifying the recipe', action='store_true') 64*4882a593Smuzhiyun parser_setvar.add_argument('--delete', '-D', help='Delete the specified value instead of setting it', action='store_true') 65*4882a593Smuzhiyun parser_setvar.set_defaults(func=setvar) 66