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