Subject: Re: pkgsrc bulk build results (fwd)
To: None <mcmahill@mtl.mit.edu>
From: Frederick Bruckman <fb@enteract.com>
List: tech-pkg
Date: 02/14/2000 01:13:01
On Sun, 13 Feb 2000 mcmahill@mtl.mit.edu wrote:

> > > > .if !exists(/emul/linux/lib/ld-linux.so.2)
> > > > IGNORE=         "requires Linux glibc2 libraries - see compat_linux(8)"
> > > > .endif
> > > > 
> > > > Is there a reason why we don't just have:
> > > > DEPENDS=        suse_linux-6.1p1:../../emulators/suse_linux
> > > 
> > > What if the user has the linux root partition mounted under
> > > /emul/linux on a dual boot system? Or an nfs mount? The possibilites
> > > are endless.
> 
> so your preference is the "!exists..." way not "DEPENDS="?  Or did I
> misunderstand? (quite possibly both...)

My first thought would be to go with...

.if !exists(/emul/linux/lib/ld-linux.so.2)
DEPENDS+=	suse_linux-6.1p1:../../emulators/suse_linux
endif

but that introduces a strange indeterminancy, as only the first
package installed will depend on suse_linux. Until we come up with a
better way of registering packages that only need other packages to
run, and not to build or install, we might as well go with the simple
DEPENDS+=.

This is another example of where proper handling of RUN_DEPENDS would
be useful. Presumably the binary rpm would unpack in exactly the same
way no matter what version/revision of linux were installed under
/emul/linux. Now consider what happens when you update suse_linux to
6.1p2. Because of the DEPENDS in all the commercial linux binary
packages, suse_linux-6.1p1 won't cleanly deinstall without
deinstalling all of them. Then, assuming you still have the rpms, you
reinstall all of them to _exactly_ the same location they were before.

Of course there are hacks to get around this, and I've used them, but
then you're not getting the benefit of recorded dependencies at all.

The proper solution is to have a +RUN_DEPENDS that's generated at
build/package time, and doesn't change. Of course, the user could then
deinstall suse_linux, and his linux packages would stop working, but
then all he'd have to do to fix it is to reinstall/update suse_linux;
he wouldn't have to reinstall every depending package.