From owner-freebsd-ports@FreeBSD.ORG Thu Feb 14 22:00:10 2008 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D5DCD16A46D for ; Thu, 14 Feb 2008 22:00:10 +0000 (UTC) (envelope-from freebsd-ports@m.gmane.org) Received: from ciao.gmane.org (main.gmane.org [80.91.229.2]) by mx1.freebsd.org (Postfix) with ESMTP id B6B8F13C4D9 for ; Thu, 14 Feb 2008 22:00:09 +0000 (UTC) (envelope-from freebsd-ports@m.gmane.org) Received: from root by ciao.gmane.org with local (Exim 4.43) id 1JPm7e-0008E2-NH for freebsd-ports@freebsd.org; Thu, 14 Feb 2008 22:00:02 +0000 Received: from 4be54-4-82-234-154-189.fbx.proxad.net ([82.234.154.189]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 14 Feb 2008 22:00:02 +0000 Received: from jaj by 4be54-4-82-234-154-189.fbx.proxad.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 14 Feb 2008 22:00:02 +0000 X-Injected-Via-Gmane: http://gmane.org/ To: freebsd-ports@freebsd.org From: Jona Joachim Date: Thu, 14 Feb 2008 21:22:38 +0000 (UTC) Lines: 43 Message-ID: References: <20080214203217.GA88714@nirvana.my.domain> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: 4be54-4-82-234-154-189.fbx.proxad.net User-Agent: Pan/0.132 (Waxed in Black) Sender: news Subject: Re: detect packages which are built against missing libraries X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Feb 2008 22:00:11 -0000 On Thu, 14 Feb 2008 21:32:19 +0100, Jona Joachim wrote: > Hi! > The last upgrade of devel/icu broke a lot of binaries for me because > they were missing libicui18n.so.36. I quickly hacked together a python > script which tries to indentify which packages were built against no > longer existing libraries. > It outputs a list of packages which can easily be combinded with > portupgrade -f. > It depends on portupgrade. > I just post it here in case it can be useful for anybody. It is a good > idea to run pkgdb -F before running it. #!/usr/bin/env python from subprocess import * lddprog = "/usr/bin/ldd" pkg_whichprog = "/usr/local/sbin/pkg_which" def execcmd(cmd): p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE) return p.stdout def pkg_which(executable): out = execcmd(pkg_whichprog + " " + executable) ret = out.readline() out.close() return ret[:-1] pldd = execcmd(lddprog + " /usr/local/bin/* /usr/local/sbin/*") progarr = [] for line in pldd.readlines(): if line[0] != '\t': tmp = line[:-2] elif line.find("not found") != (-1): progarr.append(tmp) concerned_pkgs = set(map(pkg_which, progarr)) print reduce(lambda x, y: x + " " + y, concerned_pkgs)