linux/debian/lib/python/debian_linux/kconfig.py

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)