[Frugalware-darcs] pacman-tools: chkdep.py: initial import

VMiklos vmiklos at frugalware.org
Mon Apr 9 21:40:26 CEST 2007


Darcsweb-Url: http://darcs.frugalware.org/darcsweb/darcsweb.cgi?r=pacman-tools;a=darcs_commitdiff;h=20070409191504-e2957-60c4cfbb53be8b67b9cbeedfc8585ec74e3a0baa.gz;

[chkdep.py: initial import
VMiklos <vmiklos at frugalware.org>**20070409191504
 it can detect depends of a hardwird package and get filter unnecessary depends.
 more to come soon :)
] {
addfile ./chkdep.py
hunk ./chkdep.py 1
+#!/usr/bin/env python
+
+import tarfile, tempfile, shutil, os, stat, re, pacman
+
+def rmdupdeps(deps):
+	depdeps = []
+	newdeps = []
+	i = pacman.db_getpkgcache(db)
+	while i:
+		pkg = pacman.void_to_PM_PKG(pacman.list_getdata(i))
+		pkgname = pacman.void_to_char(pacman.pkg_getinfo(pkg, pacman.PKG_NAME))
+		if pkgname in deps:
+			j = pacman.void_to_PM_LIST(pacman.pkg_getinfo(pkg, pacman.PKG_DEPENDS))
+			while j:
+				dep = pacman.void_to_char(pacman.list_getdata(j)).split("<")[0].split(">")[0].split("=")[0]
+				if dep not in depdeps:
+					depdeps.append(dep)
+				j = pacman.list_next(j)
+		i = pacman.list_next(i)
+	for i in deps:
+		if i not in depdeps:
+			newdeps.append(i)
+	return newdeps
+
+class Checks:
+	def elf(self, file):
+		if not os.stat(file)[stat.ST_MODE] & stat.S_IXUSR:
+			return
+		sock = os.popen("ldd %s" % file)
+		for i in sock.readlines():
+			if i.find("=>") == -1:
+				continue
+			lib = re.sub(r".* => (.*) \(.*", r"\1", i.strip())
+			if len(lib):
+				pkg = pacman.void_to_PM_PKG(pacman.list_getdata(pacman.pkg_getowners(lib)))
+				owner = pacman.void_to_char(pacman.pkg_getinfo(pkg, pacman.PKG_NAME))
+				if owner not in deps:
+					deps.append(owner)
+
+checks = Checks()
+
+pacman.initialize("/")
+db = pacman.db_register("local")
+ignorepkgs = []
+deps = []
+method="elf"
+
+checker = getattr(checks, method)
+fpmroot = tempfile.mkdtemp()
+
+if "FAKEROOTKEY" in os.environ.keys():
+	ignorepkgs.append("fakeroot")
+
+fpm = tarfile.TarFile.open("pacman-tools-0.8.8-1-i686.fpm", "r:bz2")
+fpm.extractall(fpmroot)
+fpm.close()
+
+for root, dirs, files in os.walk(fpmroot):
+	for file in files:
+		checker(os.path.join(root, file))
+
+shutil.rmtree(fpmroot)
+
+deps = rmdupdeps(deps)
+print deps
}


More information about the Frugalware-darcs mailing list