[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