f030ad5dbf
svn path=/dists/trunk/linux-2.6/; revision=8985
71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
__all__ = (
|
|
"KconfigFile",
|
|
)
|
|
|
|
class EntryString(object):
|
|
__slots__ = "name", "value"
|
|
|
|
def __init__(self, name, value):
|
|
self.name = name
|
|
self.value = value
|
|
|
|
def __str__(self):
|
|
return "CONFIG_%s=%s" % (self.name, self.value)
|
|
|
|
class EntryTristate(object):
|
|
__slots__ = "name", "value"
|
|
|
|
VALUE_NO = 0
|
|
VALUE_YES = 1
|
|
VALUE_MOD = 2
|
|
|
|
def __init__(self, name, value = None):
|
|
self.name = name
|
|
if value == 'n' or value is None:
|
|
self.value = self.VALUE_NO
|
|
elif value == 'y':
|
|
self.value = self.VALUE_YES
|
|
elif value == 'm':
|
|
self.value = self.VALUE_MOD
|
|
|
|
def __str__(self):
|
|
conf = "CONFIG_%s" % self.name
|
|
if self.value == self.VALUE_NO:
|
|
return "# %s is not set" % conf
|
|
elif self.value == self.VALUE_YES:
|
|
return "%s=y" % conf
|
|
elif self.value == self.VALUE_MOD:
|
|
return "%s=m" % conf
|
|
|
|
class KconfigFile(dict):
|
|
def __str__(self):
|
|
ret = []
|
|
for i in self.str_iter():
|
|
ret.append(i)
|
|
return '\n'.join(ret) + '\n'
|
|
|
|
def read(self, f):
|
|
for line in iter(f.readlines()):
|
|
line = line.strip()
|
|
if line.startswith("CONFIG_"):
|
|
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
|
|
elif line.startswith("# CONFIG_"):
|
|
option = line[9:-11]
|
|
self[option] = EntryTristate(option)
|
|
elif line.startswith("#") or not line:
|
|
pass
|
|
else:
|
|
raise RuntimeError, "Can't recognize %s" % line
|
|
|
|
def str_iter(self):
|
|
for key, value in self.iteritems():
|
|
yield str(value)
|
|
|