[kernel] r10799 - in people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig: menu package

Bastian Blank waldi at alioth.debian.org
Tue Mar 11 15:33:29 UTC 2008


Author: waldi
Date: Tue Mar 11 15:33:25 2008
New Revision: 10799

Log:
Update.

Added:
   people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/all.py
   people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/
   people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/__init__.py
   people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/files.py
Modified:
   people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/file.py

Added: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/all.py
==============================================================================
--- (empty file)
+++ people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/all.py	Tue Mar 11 15:33:25 2008
@@ -0,0 +1,40 @@
+import os
+
+from file import FileSource, Parser
+
+class All(object):
+    def __init__(self, root, arches):
+        self.files = {}
+        self.files_arch = {}
+        self.filenames_all = []
+        self.filenames_arch = {}
+
+        for arch in arches:
+            work = ["arch/%s/Kconfig" % arch]
+            self.filenames_arch[arch] = []
+
+            while work:
+                filename = work.pop(0)
+                filename_list = filename.split('/')
+                if len(filename_list) > 2 and filename_list[0] == 'arch':
+                    self.filenames_arch[arch].append(filename)
+                else:
+                    self.filenames_all.append(filename)
+
+                if filename in self.files:
+                    f = self.files[filename]
+                else:
+                    f = self.files.setdefault(filename, Parser()(file(os.path.join(root, filename)), filename))
+
+                for i in f:
+                    if isinstance(i, FileSource):
+                        work.append(i.filename)
+
+        for arch in arches:
+            f = {}
+            for i in self.filenames_all:
+                f[i] = self.files[i]
+            for i in self.filenames_arch[arch]:
+                f[i] = self.files[i]
+            self.files_arch[arch] = f
+

Modified: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/file.py
==============================================================================
--- people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/file.py	(original)
+++ people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/file.py	Tue Mar 11 15:33:25 2008
@@ -18,7 +18,7 @@
     def __repr__(self):
         return "<%s(%s)>" % (self.__class__.__name__, self.filename)
 
-class _Parser(object):
+class Parser(object):
     def __call__(self, fd, filename):
         lineno = 0
 

Added: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/__init__.py
==============================================================================

Added: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/files.py
==============================================================================
--- (empty file)
+++ people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/files.py	Tue Mar 11 15:33:25 2008
@@ -0,0 +1,97 @@
+import os
+
+from debian_linux.config import ConfigCoreHierarchy
+
+class Files(dict):
+    def __init__(self, root):
+        self.files = {}
+        self.filenames = {}
+        self.root = os.path.join(root, "debian/config")
+        self.config = ConfigCoreHierarchy([self.root])
+
+        self._read_base()
+
+        for key, files in self.filenames.iteritems():
+            r = self.setdefault(key, FileList())
+            for f in files:
+                if f in self.files:
+                    f = self.files[f]
+                else:
+                    f = self.files.setdefault(f, File(None, f))
+                r.append_file(f)
+
+    def _read_arch(self, arch):
+        kconfig = self.check_config("%s/config" % arch, True, arch)
+        self.filenames[arch,] = kconfig
+
+        for featureset in self.config['base', arch]['featuresets']:
+            self._read_featureset(arch, featureset)
+
+    def _read_base(self):
+        self.filenames[()] = self.check_config('config', True)
+
+        for arch in self.config['base',]['arches']:
+            self._read_arch(arch)
+
+    def _read_featureset(self, arch, featureset):
+        # TODO
+        if featureset != 'none':
+            return
+
+        kconfig = []
+        kconfig.extend(self.check_config("featureset-%s/config" % featureset, False, None, featureset))
+        kconfig.extend(self.check_config("%s/%s/config" % (arch, featureset), False, arch, featureset))
+        self.filenames[arch, featureset] = kconfig
+
+        for flavour in self.config['base', arch, featureset]['flavours']:
+            self._read_flavour(arch, featureset, flavour)
+
+    def _read_flavour(self, arch, featureset, flavour):
+        kconfig = []
+        kconfig.extend(self.check_config("%s/config.%s" % (arch, flavour), False, arch, None, flavour))
+        kconfig.extend(self.check_config("%s/%s/config.%s" % (arch, featureset, flavour), False, arch, featureset, flavour))
+        self.filenames[arch, featureset, flavour] = kconfig
+
+    def _get_config(self, *entry_name):
+        entry_real = ('image',) + entry_name
+        entry = self.config.get(entry_real, None)
+        if entry is None:
+            return None
+        return entry.get('configs', None)
+
+    def check_config_default(self, fail, f):
+        f1 = self.root + '/' + f
+        if os.path.exists(f1):
+            return [f]
+        if fail:
+            raise RuntimeError("%s unavailable" % f)
+        return []
+
+    def check_config_files(self, files):
+        ret = []
+        for f in files:
+            f1 = self.root + '/' + f
+            if os.path.exists(f1):
+                ret.append(f)
+                break
+            else:
+                raise RuntimeError("%s unavailable" % f)
+        return ret
+
+    def check_config(self, default, fail, *entry_name):
+        configs = self._get_config(*entry_name)
+        if configs is None:
+            return self.check_config_default(fail, default)
+        return self.check_config_files(configs)
+
+class FileList(object):
+    def __init__(self):
+        self._files = []
+
+    def append_file(self, item):
+        self._files.append(item)
+
+class File(object):
+    def __init__(self, fd, filename):
+        self.filename = filename
+



More information about the Kernel-svn-changes mailing list