Subject: Re: March patches re: bin-install
To: None <tech-pkg@netbsd.org>
From: J Chapman Flack <flack@cs.purdue.edu>
List: tech-pkg
Date: 06/24/2005 21:45:27
Jeremy Reed wrote:
> On Fri, 24 Jun 2005, J Chapman Flack wrote:
> > 3. given DEPENDS+= foo>=1.2nb2:../../bar/foo
> >    and the bar/foo Makefile provides 1.2nb3
> >    even if a 1.2nb2 binary exists, which would satisfy the requirement,
> >    it is ignored and a source build of 1.2nb3 is done.
> 
> Please see my simple idea (patch) in
>  http://mail-index.netbsd.org/tech-pkg/2005/06/24/0011.html

It looks to me as if we both dealt with the same problem, but in
different ways.

Essentially, the depends target originally does this:

  if ( good enough package installed already )
    smile
  else
    cd $pkg && make $DEPENDS_TARGET

If I understand your patch correctly, you have hooked that to say:


  if ( good enough package installed already )
    smile
  else {
    if ( do my own check for good-enough available version )
      pkg_add it
    else
      cd $pkg && make $DEPENDS_TARGET
  }

My approach was to see that the code you added is essentially the first
part of what the real-su-bin-install target *is supposed to do* - so if
it really did, the original code above would really be all that's needed:
the package isn't installed, so do a make bin-install on it, ought to work!
So I tried to figure out why the sub-make did the wrong thing. There turned
out to be two reasons.

1. DEPENDS_TARGET was not getting set properly; there's a reinvocation from
   bin-install to real-su-bin-install, and the latter was left out of the
   test that was supposed to set DEPENDS_TARGET to bin-install. Clear bug.
   Because of that, whenever a missing dependency proceeded to reinvoke make,
   it was not invoking bin-install at all, but regular install!

Even with that fixed, there was still a problem:

2. The line that invokes make DEPENDS_TARGET explicitly sets up the name/
   versionname the exact package that's needed in PKGNAME_REQD, which is enough
   information for the submake to recognize good-enough versions rather than
   requiring the latest version listed in the makefile. But the
   real-su-bin-install target didn't *use* the variable! It was easy to make
   it use the variable, so if it is set (which can "only" mean we are a
   submake working on a dependency), any good-enough version will be installed,
   but an ordinary 'make bin-install' from the command line has no change in
   behavior (because PKGNAME_REQD isn't set in that case).

The things I liked about the solution once I put the pieces together were that
the depends target didn't have to get more complicated or duplicate part of
bin-install, and real-su-bin-install got *simpler* while correcting one
clear bug and completing what seemed quite plausibly to have been intended
with (the otherwise mysteriously unused) PKGNAME_REQD in the first place.

-Chap