stale dependencies and portupgrade

Doug Barton dougb at FreeBSD.org
Tue Nov 28 10:20:55 PST 2006


Vivek Khera wrote:
> I've been using portupgrade for a long time now.  Recently I've been 
> noticing (though I'm sure it has been happening all along) that 
> dependencies are not cleanly propagated to other ports.
> 
> Example:  p5-Expect used to depend on p5-IO-Stty which was removed from 
> ports recently.  rt36 depends on p5-Expect, so got a transitive 
> dependency to this dead port.  Upgrading p5-Expect using "portupgrade 
> -Rr" took care of the direct dependency, but the upstream ports still 
> had the registered dependency to p5-IO-Stty.  I had to force-uninstall 
> that port then run "pkgdb -F" to remove that dependency.
> 
> Similarly, with a portupgrade of portupgrade itself, most of my machines 
> lost the dependency to ruby18-bdb1 package.  The only way out of that 
> was to do a delete of portupgrade and run a fresh make install in the 
> port directory.
> 
> I suppose the bug is that I expected portupgrade -Rr to recompute the 
> dependency lists of the upstream ports to take into account any changing 
> dependencies of the updated port.
> 
> Do other port manager utilities take this type of change into account?  
> At this point, I'm not sure any of my dependencies are accurate on the 
> complex ports like RT.

This type of complexity is one of the reasons why portmaster does not 
use an "extra" database to track dependencies. It instead relies on 
/var/db/pkg and the ports framework to do that, and updates the 
+CONTENTS files themselves when needed.

To more precisely answer your question, in /var/db/pkg the derived 
dependency on p5-IO-Stty wouldn't exist, so you wouldn't have the 
problem you described.

You can get a quick and dirty look at whether or not the ports you 
have installed are up to date by doing 'pkg_version -v'. If you'd like 
to recurse through all your dependencies for RT you could try 
installing sysutils/portmaster and do one of the following:

portmaster rt36

which will first recurse through all of RT's direct dependencies, make 
sure they are up to date, then rebuild RT itself; or

portmaster -f rt36

which will rebuild all of RT's dependencies first (and therefore 
recurse through each dependent port's dependencies), then rebuilt RT.

You might also want to give the man page a look before you do that, 
and you'll probably want to at least add the -v flag your first few 
times using it.

hth,

Doug

-- 

     This .signature sanitized for your protection


More information about the freebsd-ports mailing list