278
def do_assignment(self, var, val):
279
self.clauses.append(KconfigData.AssignmentClause(var, val))
280
281
+ def do_cmdline_assignment(self, var, val):
282
+ assert var.startswith("CONFIG_")
283
+ self.do_assignment(self.do_var(var[7:]), val)
284
+
285
def do_default(self, var, val, cond=None):
286
val = self.value_mangler(val)
287
self.clauses.append(KconfigData.DefaultClause(var, val, cond))
342
class KconfigParser:
343
344
@classmethod
341
- def parse(cls, fp, mode=None):
342
- data = KconfigData(mode or defconfig)
343
- parser = cls(data)
344
- parser.parse_file(fp)
345
- return data
345
+ def parse(cls, fp, data):
346
+ cls(data).parse_file(fp)
347
348
def __init__(self, data):
349
self.data = data
362
self.get_token()
363
self.parse_config()
364
364
- def do_assignment(self, var, val):
365
- if not var.startswith("CONFIG_"):
366
- raise KconfigParserError(
367
- self, "assigned variable should start with CONFIG_"
368
- )
369
- var = self.data.do_var(var[7:])
370
- self.data.do_assignment(var, val)
371
-
365
# file management -----
366
367
def error_path(self):
681
sys.exit(1)
682
683
data = KconfigData(mode)
691
- parser = KconfigParser(data)
684
external_vars = set()
685
for arg in argv[3:]:
686
m = re.match(r'^(CONFIG_[A-Z0-9_]+)=([yn]?)$', arg)
687
if m is not None:
688
name, value = m.groups()
697
- parser.do_assignment(name, value == 'y')
689
+ data.do_cmdline_assignment(name, value == 'y')
690
external_vars.add(name[7:])
691
else:
700
- fp = open(arg, 'rt', encoding='utf-8')
701
- parser.parse_file(fp)
702
- fp.close()
692
+ with open(arg, 'rt', encoding='utf-8') as fp:
693
+ KconfigParser.parse(fp, data)
694
695
config = data.compute_config()
696
for key in sorted(config.keys()):