Subject: Re: inflation of PKGREVISION bumps [was Re: CVS commit: pkgsrc]
To: Hubert Feyrer <hubert@feyrer.de>
From: Rene Hexel <r.hexel@griffith.edu.au>
List: tech-pkg
Date: 01/04/2004 22:32:50
On 04/01/2004, at 9:02 PM, Hubert Feyrer wrote:

> Sounds interesting...
>
> Can you describe the scenario where that would hit with (say) tiff and
> xpaint?

   Okay, I'll try.

   xpaint-2.7.0 depends on tiff>=3.5.4 (through tiff's buildlink2.mk,
but that's beside the point here).

   Binary packages built against tiff-3.5.4 are expected to work with
tiff-3.5.5 and subsequent versions unless there is an incompatible
ABI change in the tiff library.

   Let's say such an incompatibility occurs in tiff-3.6.1.  When the
tiff package gets updated to 3.6.1, a line such as

INCOMPATIBLE=	tiff<3.6.1

   gets added to the tiff package's Makefile.  This gets registered
in the binary (and installed) tiff package.  If someone now tries
to install an old xpaint-2.7.0 that was compiled against tiff-3.5.4,
the recorded tiff-3.5.4 dependency matches the INCOMPATIBLE pattern
of the installed tiff-3.6.1 package, and xpaint will refuse to
install.

   When xpaint-2.7.0 gets recompiled against tiff-3.6.1, it
implicitly adds CONFLICTS+=tiff<3.6.1, so the binary package
can no longer be installed on top of, say, tiff-3.5.4, even
if its dependencies say otherwise.

   This has several advantages:

   - it separates dependencies from ABI incompatibilities

   - binary packages no longer will accidentally install against
     incompatible prerequisites (without requiring PKGREVISION
     bump orgies)

   - updating a base package such as tiff no longer forces
     everyone to recompile everything that depends on that
     package

   If somebody has gripes with the fact that there now may
suddenly be two xpaint-2.7.0 binary packages built against
different versions of tiff (and that there should really
be an xpaint-2.7.0nb1 package), this is not a problem:
We can still bump PKGREVISIONs to indicate that the two
xpaint versions were built against different versions of
tiff if we want to.

   What's killing us at the moment are not so much the
PKGREVISION bumps, but the corresponding dependency
updates that require rebuilding every package and their
mom.  (And setting these dependencies only solves half
the problem anyway: while xpaint-2.7.0nb1 will correctly
work only against tiff>=3.6.1, an old xpaint-2.7.0 binary
package would happily install against tiff-3.6.1, even
though it was built against an incompatible
tiff-3.5.4.)

   This could be fixed with the above INCOMPATIBLE
pattern.

   Cheers
       ,
    Rene