Subject: Re: "make replace package" broken again
To: Todd Vierling <tv@pobox.com>
From: Johnny C. Lam <jlam@brightdiamond.com>
List: tech-pkg
Date: 07/06/2006 10:25:40
Todd Vierling wrote:
> Maybe "make replace" shouldn't use the common barrier, but rather be
> its own isolated target?  It is rather Special compared to plain
> "install", so it can't really participate in the normal
> chain-of-targets logic.

Yes, I kind of just threw "replace" in there to make it work in the 
isolated case of "make replace" that I knew someone else used.

> As it is right now, "make replace package" tries to do an "install"
> rather than a "replace":
> 
> =====
> /usr/pkgsrc/pkgtools/pkglint $ nice make replace package clean
> [...]
> ===> patch-message [pkglint-4.66] ===> Patching for pkglint-4.66
> ===> configure-message [pkglint-4.66] ===> Configuring for pkglint-4.66
> ===> install-message [pkglint-4.66] ===> Installing for pkglint-4.66
> => Becoming ``root'' to make su-install-all (/usr/pkg/bin/sudo)
> =====
> 
> To keep from horking up the existing nonrecursive line of logic, we
> could instead do something like:
> 
> .if make(replace)
> _REPLACEMODE= # set
> .endif
> replace: install
> 
> This would set a variable to tell pkgsrc that we're "installing in
> replace mode", which is what "replace" actually does, then defer right
> back to the plain "install" target.

I wonder if we should just have a REPLACE_TARGET, similar to 
UPDATE_TARGET, which is the target to invoke when installing the 
package.  It would default to "install" but in your case, you would do:

	make replace REPLACE_TARGET=package

There's another idea I want to try first which would try to synthesis a 
better command line to use when invoking the barrier's recursive make. 
Basically, instead of checking for the presence of a single target at a 
time, we check for all "post-barrier" targets and pass them all to the 
recursive make.

	Cheers,

	-- Johnny Lam <jlam@pkgsrc.org>