[kernel] r6995 - dists/trunk/linux-2.6/debian/bin

Bastian Blank waldi at costa.debian.org
Thu Jul 13 10:54:21 UTC 2006


Author: waldi
Date: Thu Jul 13 10:54:20 2006
New Revision: 6995

Added:
   dists/trunk/linux-2.6/debian/bin/abiupdate.py   (contents, props changed)

Log:
debian/bin/abiupdate.py: Add.


Added: dists/trunk/linux-2.6/debian/bin/abiupdate.py
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/bin/abiupdate.py	Thu Jul 13 10:54:20 2006
@@ -0,0 +1,145 @@
+#!/usr/bin/env python2.4
+
+import sys
+sys.path.append(sys.path[0] + "/../lib/python")
+
+import os, os.path
+from debian_linux.abi import *
+from debian_linux.config import *
+from debian_linux.debian import *
+
+url_base = "http://ftp.de.debian.org/debian/"
+
+class main(object):
+    dir = None
+    override_arch = None
+    override_subarch = None
+    override_flavour = None
+
+    def __init__(self):
+        self.source = "linux-2.6"
+        self.version = "2.6.17"
+        self.abiname = "1"
+        self.version_abi = self.version + '-' + self.abiname
+        self.version_source = "2.6.17-2"
+
+        if len(sys.argv) > 1:
+            self.override_arch = sys.argv[1]
+        if len(sys.argv) > 2:
+            self.override_subarch = sys.argv[2]
+        if len(sys.argv) > 3:
+            self.override_flavour = sys.argv[3]
+
+    def __call__(self):
+        import tempfile
+        self.dir = tempfile.mkdtemp(prefix = 'abiupdate')
+        try:
+            print "Retreive config"
+            config = self.get_config()
+            if self.override_arch:
+                arches = [self.override_arch]
+            else:
+                arches = config[('base',)]['arches']
+            for arch in arches:
+                self.update_arch(config, arch)
+        finally:
+            self._rmtree(self.dir)
+
+    def _rmtree(self, dir):
+        import stat
+        for root, dirs, files in os.walk(dir, topdown=False):
+            for name in files:
+                os.remove(os.path.join(root, name))
+            for name in dirs:
+                real = os.path.join(root, name)
+                mode = os.lstat(real)[stat.ST_MODE]
+                if stat.S_ISDIR(mode):
+                    os.rmdir(real)
+                else:
+                    os.remove(real)
+        os.rmdir(dir)
+
+    def extract_package(self, filename, base = "tmp"):
+        base_out = self.dir + "/" + base
+        os.mkdir(base_out)
+        os.system("dpkg-deb --extract %s %s" % (filename, base_out))
+        return base_out
+
+    def get_abi(self, arch, subarch, flavour):
+        if subarch == 'none':
+            prefix = flavour
+        else:
+            prefix = subarch + '-' + flavour
+        filename = "linux-headers-%s-%s_%s_%s.deb" % (self.version_abi, prefix, self.version_source, arch)
+        f = self.retrieve_package(filename)
+        d = self.extract_package(f)
+        f1 = d + "/usr/src/linux-headers-%s-%s/Module.symvers" % (self.version_abi, prefix)
+        s = symbols(f1)
+        self._rmtree(d)
+        return s
+
+    def get_config(self):
+        filename = "linux-support-%s_%s_all.deb" % (self.version_abi, self.version_source)
+        f = self.retrieve_package(filename)
+        d = self.extract_package(f)
+        dir = d + "/usr/src/linux-support-" + self.version_abi + "/arch"
+        config = config_reader_arch([dir])
+        self._rmtree(d)
+        return config
+
+    def retrieve_package(self, filename):
+        import urllib2
+        url = url_base + "pool/main/" + self.source[0] + "/" + self.source + "/" + filename
+        filename_out = self.dir + "/" + filename
+        f_in = urllib2.urlopen(url)
+        f_out = file(filename_out, 'w')
+        while 1:
+            r = f_in.read()
+            if not r:
+                break
+            f_out.write(r)
+        return filename_out
+
+    def save_abi(self, symbols, arch, subarch, flavour):
+        out = "debian/arch/%s" % arch
+        if subarch != 'none':
+            out += "/%s" % subarch
+        out += "/abi-%s.%s" % (self.abiname, flavour)
+        symbols.write(file(out, 'w'))
+
+    def update_arch(self, config, arch):
+        if self.override_subarch:
+            subarches = [self.override_subarch]
+        else:
+            subarches = config[('base', arch)]['subarches']
+        for subarch in subarches:
+            self.update_subarch(config, arch, subarch)
+
+    def update_subarch(self, config, arch, subarch):
+        config_entry = config[('base', arch, subarch)]
+        if not config_entry.get('modules', True):
+            return
+        if self.override_flavour:
+            flavours = [self.override_flavour]
+        else:
+            flavours = config_entry['flavours']
+        for flavour in flavours:
+            self.update_flavour(config, arch, subarch, flavour)
+
+    def update_flavour(self, config, arch, subarch, flavour):
+        config_entry = config[('base', arch, subarch, flavour)]
+        if not config_entry.get('modules', True):
+            return
+        print "Updating ABI for arch %s, subarch %s, flavour %s" % (arch, subarch, flavour)
+        try:
+            abi = self.get_abi(arch, subarch, flavour)
+            self.save_abi(abi, arch, subarch, flavour)
+            print "Ok."
+        except KeyboardInterrupt:
+            raise
+        except Exception, e:
+            print "FAILED!"
+            print e
+
+if __name__ == '__main__':
+    main()()



More information about the Kernel-svn-changes mailing list