SOURCES: kernel-config.py (NEW) - from LINUX_2_6 branch (for kerne...

glen glen at pld-linux.org
Sun Oct 28 20:44:12 CET 2007


Author: glen                         Date: Sun Oct 28 19:44:12 2007 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- from LINUX_2_6 branch (for kernel-desktop)

---- Files affected:
SOURCES:
   kernel-config.py (1.1 -> 1.2)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/kernel-config.py
diff -u /dev/null SOURCES/kernel-config.py:1.2
--- /dev/null	Sun Oct 28 20:44:12 2007
+++ SOURCES/kernel-config.py	Sun Oct 28 20:44:07 2007
@@ -0,0 +1,133 @@
+#!/usr/bin/python
+
+# Generate kernel .config file based on special kernel.conf rules file.
+# arekm at pld-linux.org
+
+import sys
+import re
+
+if len(sys.argv) != 5:
+    print "Usage: %s target_arch kernel.conf input-config output-config" % sys.argv[0]
+    sys.exit(1)
+
+arch = sys.argv[1]
+kernelconfig = sys.argv[2]
+inconfig = sys.argv[3]
+outconfig = sys.argv[4]
+
+from UserDict import UserDict
+
+# odict 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()
+
+f = open(kernelconfig, 'r')
+for l in f:
+    if l[:6] == 'CONFIG_':
+        print "Omit CONFIG_ when specifing symbol name: %s" % l
+        continue
+    if re.match('^#', l) or re.match('^\s*$', l):
+        continue
+    if not re.match('^[0-9A-Z]+', l):
+        print "Unknown line: %s" % l
+        sys.exit(1)
+    c = l.strip().split()
+    symbol = c[0]
+    if dict.has_key(symbol):
+        print "Duplicate symbol %s!" % symbol
+        sys.exit(1)
+
+    par = False
+    for i in c[1:]:
+        par = True
+        i = i.split('=')
+        key = i[0]
+        if key != arch and key != "all": 
+            continue
+        val = i[1]
+        dict[symbol] = val
+    if not par:
+        print "Unknown line: %s" % l
+        sys.exit(1)
+
+f.close()
+
+f = open(inconfig, 'r')
+cfg = f.read()
+f.close()
+
+cfg += '\n# PLD configs\n'
+for symbol in dict.items():
+    (key, val) = symbol
+
+    # strip contents
+    rp = re.compile("^CONFIG_%s=.*$" % key, re.MULTILINE)
+    cfg = rp.sub("", cfg)
+    rp = re.compile("^# CONFIG_%s is not set$" % key, re.MULTILINE)
+    cfg = rp.sub("", cfg)
+    
+    if val == "y":
+        cfg += "CONFIG_%s=y\n" % key
+    elif val == "m":
+        cfg += "CONFIG_%s=m\n" % key
+    elif val == "n":
+        cfg += "# CONFIG_%s is not set\n" % key
+    elif re.compile('^[a-zA-Z0-9"\-]+$').match(val):
+        cfg += "CONFIG_%s=%s\n" % (key, val)
+    else:
+        print "Unknown value [%s] for key: %s" % (val, key)
+        sys.exit(1)
+
+f = open(outconfig, 'w')
+f.write(cfg)
+f.close()
================================================================


More information about the pld-cvs-commit mailing list