Hi, I have written a couple of script that other here might find useful. To generate a list of packages on your computer that require a rebuild for a library somane bump run "rebuildlist <library>", e.g. for the current heimdal rebuilt, run "rebuildlist libhx509". This creates are file called rebuildlist.txt with a list of packages that need rebuilt in it, although it is limited to what is on your system but I do not see a way around that. The second script take a list of packages that need rebuilt and annotates that list with information on the order it needs done. E.g. for the heimdal rebuild, I ran "rebuildorder rebuildlist.txt" and got: brasero (Requires totem-plparser) cups (Requires libcups) cvs evince (Requires libspectre) evolution-data-server (Requires gnome-vfs) ghostscript (Requires gtk2) gnome-panel (Requires evolution-data-server) gnome-python-desktop (Requires gnome-vfs) gnome-vfs (Requires smbclient, gtk2) gstreamer0.10-bad-plugins (Requires neon) gtk2 (Requires libcups) hplip (Requires cups, ghostscript) imagemagick (Requires ghostscript) libcups libgnomecups (Requires libcups) libgnomeprint (Requires libgnomecups) libspectre (Requires ghostscript) mplayer (Requires gtk2, smbclient) neon openoffice-base (Requires neon) openssh smbclient subversion (Requires neon) totem-plparser (Requires evolution-data-server) xfprint (Requires imagemagick) The rebuildorder script is my first "real" python script so it could probably be improved. If people think that these would be useful to have somewhere, I can tidy them up a put them in a git repo somewhere. Allan #! /bin/bash library=$1 if [ "x$library" == "x" ]; then echo "Usage $0 <library>" exit fi for pkg in $(pacman -Qq); do echo $pkg found=$(ldd $(pacman -Ql $pkg) 2>/dev/null | grep "${library}.so" | wc -l) if [ $found -ne 0 ]; then echo $pkg >> rebuildlist.txt fi; done #! /usr/bin/env python import os, sys def get_deps( package ): deps = [] pkginfo = os.popen("pacman -Si " + package + " 2> /dev/null").read().split("\n") if pkginfo != ['']: found = False for i in pkginfo: if not found: if i[0:10] == "Depends On": deplist = i.split()[3:] found = True else: if i[0] != " ": break deplist += i.split() for i in deplist: pkg = i.split(">")[0].split("<")[0].split("=")[0] if os.popen("pacman -Si " + pkg + " 2> /dev/null").read().split("\n") != ['']: deps.append(pkg) return deps rebuild_file = open(sys.argv[1], "r") rebuild_list = rebuild_file.read().split() rebuild_deps = {} package_deps = {} for i in rebuild_list: package_deps[i] = get_deps(i) for package in rebuild_list: rebuild_deps[package] = package_deps[package][:] pos = 0 while pos < len(rebuild_deps[package]): dep = rebuild_deps[package][pos] if not package_deps.has_key(dep): package_deps[dep] = get_deps(dep) for i in package_deps[dep]: if not i in rebuild_deps[package]: rebuild_deps[package].append(i) pos += 1 for package in rebuild_list: pos = 0 while pos < len(rebuild_deps[package]): if rebuild_deps[package][pos] in rebuild_list: pos += 1 else: rebuild_deps[package].pop(pos) filtered_deps = {} for package in rebuild_list: filtered_deps[package] = rebuild_deps[package][:] if len(filtered_deps[package]) > 1: pos=0 while pos < len(filtered_deps[package]) and len(filtered_deps[package]) > 1: removed = False for i in filtered_deps[package]: if filtered_deps[package][pos] in rebuild_deps[i]: filtered_deps[package].pop(pos) removed = True break if not removed: pos += 1 for package in rebuild_list: if len(rebuild_deps[package]) == 0: print package else: rebuild_deps[package].sort() print package + " (Requires " + ", ".join(["%s" % pkg for pkg in filtered_deps[package]]) +")"