upload tizen1.0 source
[kernel/linux-2.6.36.git] / debian / lib / python / debian_linux / kconfig.py
1 from __future__ import absolute_import
2
3 from .utils import SortedDict
4
5 __all__ = (
6     "KconfigFile",
7 )
8
9 class EntryString(object):
10     __slots__ = "name", "value"
11
12     def __init__(self, name, value):
13         self.name = name
14         self.value = value
15
16     def __str__(self):
17         return "CONFIG_%s=%s" % (self.name, self.value)
18
19 class EntryTristate(object):
20     __slots__ = "name", "value"
21
22     VALUE_NO = 0
23     VALUE_YES = 1
24     VALUE_MOD = 2
25
26     def __init__(self, name, value = None):
27         self.name = name
28         if value == 'n' or value is None:
29             self.value = self.VALUE_NO
30         elif value == 'y':
31             self.value = self.VALUE_YES
32         elif value == 'm':
33             self.value = self.VALUE_MOD
34
35     def __str__(self):
36         conf = "CONFIG_%s" % self.name
37         if self.value == self.VALUE_NO:
38             return "# %s is not set" % conf
39         elif self.value == self.VALUE_YES:
40             return "%s=y" % conf
41         elif self.value == self.VALUE_MOD:
42             return "%s=m" % conf
43
44 class KconfigFile(SortedDict):
45     def __str__(self):
46         ret = []
47         for i in self.str_iter():
48             ret.append(i)
49         return '\n'.join(ret) + '\n'
50
51     def read(self, f):
52         for line in iter(f.readlines()):
53             line = line.strip()
54             if line.startswith("CONFIG_"):
55                 i = line.find('=')
56                 option = line[7:i]
57                 value = line[i+1:]
58                 self.set(option, value)
59             elif line.startswith("# CONFIG_"):
60                 option = line[9:-11]
61                 self.set(option, 'n')
62             elif line.startswith("#") or not line:
63                 pass
64             else:
65                 raise RuntimeError, "Can't recognize %s" % line
66
67     def set(self, key, value):
68         if value in ('y', 'm', 'n'):
69             entry = EntryTristate(key, value)
70         else:
71             entry = EntryString(key, value)
72         self[key] = entry
73
74     def str_iter(self):
75         for key, value in self.iteritems():
76             yield str(value)
77