SOURCES: kernel-config-update.py (NEW) - reveerse config generator...
glen
glen at pld-linux.org
Mon Jan 28 23:19:42 CET 2008
Author: glen Date: Mon Jan 28 22:19:42 2008 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- reveerse config generator from .config, based on kernel-config.py
---- Files affected:
SOURCES:
kernel-config-update.py (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/kernel-config-update.py
diff -u /dev/null SOURCES/kernel-config-update.py:1.1
--- /dev/null Mon Jan 28 23:19:42 2008
+++ SOURCES/kernel-config-update.py Mon Jan 28 23:19:36 2008
@@ -0,0 +1,160 @@
+#!/usr/bin/python
+
+# Update kernel.conf based on kernel .config file
+# arekm at pld-linux.org
+# glen at pld-linux.org
+
+import sys
+import re
+
+if len(sys.argv) != 4:
+ print "Usage: %s target_arch kernel.conf .config" % sys.argv[0]
+ sys.exit(1)
+
+arch = sys.argv[1]
+kernelconfig = sys.argv[2]
+inconfig = sys.argv[3]
+
+from UserDict import UserDict
+
+# odict (Ordered Dict) from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747
+class odict(UserDict):
+ def __init__(self, dict = None):
+ self._keys = []
+ UserDict.__init__(self, dict)
+
+ def __delitem__(self, key):
+ UserDict.__delitem__(self, key)
+ self._keys.remove(key)
+
+ def __setitem__(self, key, item):
+ UserDict.__setitem__(self, key, item)
+ if key not in self._keys: self._keys.append(key)
+
+ def clear(self):
+ UserDict.clear(self)
+ self._keys = []
+
+ def copy(self):
+ dict = UserDict.copy(self)
+ dict._keys = self._keys[:]
+ return dict
+
+ def items(self):
+ return zip(self._keys, self.values())
+
+ def keys(self):
+ return self._keys
+
+ def popitem(self):
+ try:
+ key = self._keys[-1]
+ except IndexError:
+ raise KeyError('dictionary is empty')
+
+ val = self[key]
+ del self[key]
+
+ return (key, val)
+
+ def setdefault(self, key, failobj = None):
+ UserDict.setdefault(self, key, failobj)
+ if key not in self._keys: self._keys.append(key)
+
+ def update(self, dict):
+ UserDict.update(self, dict)
+ for key in dict.keys():
+ if key not in self._keys: self._keys.append(key)
+
+ def values(self):
+ return map(self.get, self._keys)
+
+dict = odict()
+
+rc = 0
+f = open(kernelconfig, 'r')
+for l in f:
+ if l[:6] == 'CONFIG_':
+ print "Omit CONFIG_ when specifing symbol name: %s" % l
+ rc = 1
+ continue
+
+ if re.match('^#', l) or re.match('^\s*$', l):
+ continue
+
+ if not re.match('^[0-9A-Z]+', l):
+ print "Unknown line: %s" % l
+ rc = 1
+ continue
+
+ c = l.strip().split()
+ symbol = c[0]
+ if dict.has_key(symbol):
+ print "Duplicate symbol: %s" % symbol
+ rc = 1
+ continue
+
+ conf = dict[symbol] = odict()
+ for item in c[1:]:
+ (key, value) = item.split('=')
+ dict[symbol][key] = value
+
+# print "Add symbol: %s = %s" % (symbol, dict[symbol])
+
+f.close()
+#rc =1
+
+if not rc == 0:
+ sys.exit(1)
+
+f = open(inconfig, 'r')
+for l in f:
+ # yes, module and string, numeric values
+ m = re.match("^CONFIG_(.*)=(.*)$", l)
+ if not m == None:
+ symbol = m.group(1)
+ value = m.group(2)
+ else:
+ # no values
+ m = re.match("^# CONFIG_(.*) is not set$", l)
+ if not m == None:
+ symbol = m.group(1)
+ value = "n"
+
+ # other data. perhaps comments
+ if m == None:
+ print l.strip()
+ continue
+
+ if dict.has_key(symbol):
+ c = dict[symbol]
+ if c.has_key('all') and c.has_key(arch):
+ c[arch] = value
+ if c.has_key('all'):
+ c['all'] = value
+ else:
+ c[arch] = value
+
+ s = ''
+ for k in c.keys():
+ s += ' %s=%s' % (k, c[k])
+
+ l = "%s %s" % (symbol, s.strip())
+ del dict[symbol]
+ else:
+ l = "%s %s=%s" % (symbol, arch, value)
+
+ # blacklist
+ # TODO: use some list here instead
+ if symbol != "LOCALVERSION" and symbol != "DEFCONFIG_LIST":
+ print l
+
+f.close()
+
+# print out remaining items from old dictionary
+for symbol in dict.keys():
+ s = ''
+ c = dict[symbol]
+ for k in c.keys():
+ s += ' %s=%s' % (k, c[k])
+ print "%s %s" % (symbol, s.strip())
================================================================
More information about the pld-cvs-commit
mailing list