Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Feb 2001 03:45:04 +0200 (EET)
From:      Maxim Sobolev <sobomax@FreeBSD.ORG>
To:        bmah@FreeBSD.ORG
Cc:        jkh@winston.osd.bsdi.com (Jordan Hubbard), kraemer@u.washington.edu (Brian Kraemer), freebsd-ports@FreeBSD.ORG
Subject:   Re: Ports updating... Good ways?
Message-ID:  <200102090145.f191j9513959@vic.sabbo.net>
In-Reply-To: <200102082229.f18MTC806430@bmah-freebsd-0.cisco.com> from "Bruce A. Mah" at Feb 08, 2001 02:29:12 PM

next in thread | previous in thread | raw e-mail | index | archive | help
> 
> > Let's say I install the "gtkwooba" port which depends on gtk,
> > libtools, glib and libwooba.  Then I come back over a year later and
> > do a "make update" in gtkwooba.  It's pretty much a surety that just
> > about everything it depends on has been updated, so I have to upgrade
> > gtk, libtools, glib and libwooba too.
> 
> I'm not sure about that.  You should only have to upgrade the
> dependencies listed in the Makefile for gtkwooba that aren't still
> satisfied.  For example, even if libtool has been upgraded, the
> executable /path/to/libtool still exists, and so "make install" for
> gtkwooba isn't going to try to update that.  I presume that's still the
> correct behavior.

It's questionable point. The real life is often more messy and new
version of a port may need really up-to-date versions of its dependencies.
Good example is my addition of --build= stub into libtool. While this change
is undetectable from the point of view of package dependency mechanism
(i.e. no files were added or removed), change in functionality would
prevent ports that use that feature from building correctly if older
version is installed (anything below 1.3.4_1).

There are several more complicated cases of this problem as well. Consider
the following sequence:
1. port A-1.0 created;
2. port B-1.0 created and depends on A;
3. new version 1.1 of port B released that relies upon feature that was
   present but no enabled in the current A-1.0 port;
4. maintainer revises port A-1.0 to enable requred for 1.1 version of the
   port B feature and bumps PORTREVISION to indicate that upgrade necessary;
5. port B updated to the new version 1.1.

The similar situation would be in the case when some backward but not forward
compatible changes were made in the software without shared library version
bump (common situation in the GTK/Gnome word).

Therefore the only safe method is to assume that a port needs most up-to-date
versions of its dependencies. This, however, lead us to the necessity to
update not only dependencies, but all the ports which depend on that
dependencies. Take a look at the following simple graph:

A --> B <-- C
      ^
      |
      D

The graph shows that packages A, C and D depend on package B. Then when
we are trying to upgrade C and discovered that new version of B is
available we have to update not only B and C, but all packages A, B, C, D,
because new version of package C may need new version of package B, while
new version of package B may be incompatible with already installed
A and D, so we need to update them as well. This of course is a very
simple case, in the real world graph would be much more complicated,
so update of one package could trigger update of the whole set of
installed packages. *sigh*

Well, I have to emphasize that I said the above not to discourage you
or anybody else, but to highlight some of the most important, in my
own opinion of couse, problems with authomatic updating of ports/packages.

-Maxim


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200102090145.f191j9513959>