diff --git a/debian/bin/kconfig.py b/debian/bin/kconfig.py index a8fee4946..d5df64f18 100755 --- a/debian/bin/kconfig.py +++ b/debian/bin/kconfig.py @@ -1,13 +1,37 @@ #!/usr/bin/env python -import optparse, os.path, sys +import optparse +import os.path +import re +import sys + from debian_linux.kconfig import * -def merge(output, *config): +def merge(output, configs, overrides): kconfig = KconfigFile() - for c in config: + for c in configs: kconfig.read(file(c)) + for key, value in overrides.iteritems(): + kconfig.set(key, value) file(output, "w").write(str(kconfig)) +def opt_callback_dict(option, opt, value, parser): + match = re.match('^\s*(\S+)=(\S+)\s*$', value) + if not match: + raise optparse.OptionValueError('not key=value') + dest = option.dest + data = getattr(parser.values, dest) + data[match.group(1)] = match.group(2) + if __name__ == '__main__': - sys.exit(merge(*sys.argv[1:])) + parser = optparse.OptionParser(usage = "%prog [OPTION]... FILE...") + parser.add_option('-o', '--override', + action='callback', + callback=opt_callback_dict, + default={}, + dest='overrides', + help="Override option", + type='string') + options, args = parser.parse_args() + + merge(args[0], args[1:], options.overrides) diff --git a/debian/lib/python/debian_linux/kconfig.py b/debian/lib/python/debian_linux/kconfig.py index c5192d10d..e655e5e24 100644 --- a/debian/lib/python/debian_linux/kconfig.py +++ b/debian/lib/python/debian_linux/kconfig.py @@ -55,19 +55,22 @@ class KconfigFile(SortedDict): i = line.find('=') option = line[7:i] value = line[i+1:] - if value in ('y', 'm'): - entry = EntryTristate(option, value) - else: - entry = EntryString(option, value) - self[option] = entry + self.set(option, value) elif line.startswith("# CONFIG_"): option = line[9:-11] - self[option] = EntryTristate(option) + self.set(option, 'n') elif line.startswith("#") or not line: pass else: raise RuntimeError, "Can't recognize %s" % line + def set(self, key, value): + if value in ('y', 'm', 'n'): + entry = EntryTristate(key, value) + else: + entry = EntryString(key, value) + self[key] = entry + def str_iter(self): for key, value in self.iteritems(): yield str(value)