* debian/bin/kconfig.py: Add option overrides.
* debian/lib/python/debian_linux/kconfig.py: Add set method for externaly parsed options. svn path=/dists/trunk/linux-2.6/; revision=15565
This commit is contained in:
parent
d2fac94fbf
commit
8adf3a084f
|
@ -1,13 +1,37 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import optparse, os.path, sys
|
import optparse
|
||||||
|
import os.path
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
from debian_linux.kconfig import *
|
from debian_linux.kconfig import *
|
||||||
|
|
||||||
def merge(output, *config):
|
def merge(output, configs, overrides):
|
||||||
kconfig = KconfigFile()
|
kconfig = KconfigFile()
|
||||||
for c in config:
|
for c in configs:
|
||||||
kconfig.read(file(c))
|
kconfig.read(file(c))
|
||||||
|
for key, value in overrides.iteritems():
|
||||||
|
kconfig.set(key, value)
|
||||||
file(output, "w").write(str(kconfig))
|
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__':
|
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)
|
||||||
|
|
|
@ -55,19 +55,22 @@ class KconfigFile(SortedDict):
|
||||||
i = line.find('=')
|
i = line.find('=')
|
||||||
option = line[7:i]
|
option = line[7:i]
|
||||||
value = line[i+1:]
|
value = line[i+1:]
|
||||||
if value in ('y', 'm'):
|
self.set(option, value)
|
||||||
entry = EntryTristate(option, value)
|
|
||||||
else:
|
|
||||||
entry = EntryString(option, value)
|
|
||||||
self[option] = entry
|
|
||||||
elif line.startswith("# CONFIG_"):
|
elif line.startswith("# CONFIG_"):
|
||||||
option = line[9:-11]
|
option = line[9:-11]
|
||||||
self[option] = EntryTristate(option)
|
self.set(option, 'n')
|
||||||
elif line.startswith("#") or not line:
|
elif line.startswith("#") or not line:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
raise RuntimeError, "Can't recognize %s" % line
|
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):
|
def str_iter(self):
|
||||||
for key, value in self.iteritems():
|
for key, value in self.iteritems():
|
||||||
yield str(value)
|
yield str(value)
|
||||||
|
|
Loading…
Reference in New Issue