Subject: pkg/28764: Using bin-install under pkg_comp fails badly
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: None <kre@munnari.OZ.AU>
List: pkgsrc-bugs
Date: 12/23/2004 18:09:00
>Number:         28764
>Category:       pkg
>Synopsis:       Using bin-install under pkg_comp fails badly
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Dec 23 18:09:00 +0000 2004
>Originator:     Robert Elz
>Release:        NetBSD 1.6U   (pkgsrc -current as of yesterday)
>Organization:
	Prince of Songkla University
>Environment:
	Irrelevant info from system used to send-pr follows
System: NetBSD fuchsia.noi.kre.to 1.6U NetBSD 1.6U (FUCHSIA) #51: Wed Jul 23 16:06:08 ICT 2003 kre@fuchsia.cs.mu.OZ.AU:/usr/obj/sys/FUCHSIA i386
Architecture: i386
Machine: i386
>Description:
	I am using pkg_comp on a 2.0F (or something like that) system to
	build binary packages for 2.0. (using libkver)   I was using
	pkg_comp in the "normal" way (BUILD_TARGET=package) with everthing
	working perfectly.   Then perl came to be upgraded, and a bunch of
	stuff I hadn't yet built demanded the new perl version.   I really
	doubt that any of that really needed it (other stuff was still happy
	with the older version, but that's not important for now).

	Updating perl meand blowing away a large fraction of what was
	already compiled and installed - of course, this is all in the
	pkg_comp playground, so blowing it all away is harmless.  So,
	I did that.    Now I know that I have *lots* of binary packages
	already built that can simply be re-installed after the new
	perl is there (the latter part -new perl- is trivial of course).  
	Of course, there's no need to reinstall any of them, unless
	they're needed as dependencies for some other package (once all
	the compiles are done, the whole playground will be nuked).

	This should be a perfect time to use bin-install - so I change
	BUILD_TARGET to bin-install (set AUTO_TARGET that way too, just
	for completeness), and go back to building all the stuff I
	hadn't done yet when the perl upgrade happened (this was a few
	days ago of course, it has taken me this long to wake up to
	what the result was).

	What I expected was that any of my pre-compiled packages which
	was needed as a dependency of something I was newly building
	would be pkg_add'd, and anything that actually needed to be
	compiled from source (either an updated version since the
	prefious compile, or anything I hadn't compiled previously)
	would be the subject of "make package" (or the equivalent in
	action) and I'd end up with binary packages for those.

	That's not what happened.

	For packages I named on the command line for pkg_comp build
	everything looked as if it would have worked as expected.
	Certainly binary packages were built.   It looked as if
	they would have been used to install - but of course, I wasn't
	compiling anything I'd already made, so there never was a
	binary package existing for anything I put on the command line.

	But for dependencies everything happens exactly the opposite
	of what I'd wanted and expected.   No pkg_add was ever done,
	instead hundreds (perhaps a thousand) packages were all
	recompiled from source,    OK, that's just a waste of time,
	no great harm done (and one might even claim its safer that
	way).   But, at the same time, no binary packages were built
	for anything that was a dependency of any of the packages
	named on pkg_comp's command line.

	What's worse of course, is that where I listed packages on the
	command line in the "wrong" order (I was mostly just using
	lexical order out of the various category directories in pkgsrc)
	so that I say "pkg_comp build A B" and A depends upon B, then
	B would be compiled and installed as a dependency of A, but no
	binary package made, A gets compiled, installed, and packaged,
	then everything gets cleaned (A and B, with cleandepends=YES)
	then B gets compiled again, but now the install fails, as B
	is already installed, so no package gets made for it, once cgain
	(even though it was listed on the command line).

>How-To-Repeat:
	As above, make a few binary packages using pkg_comp (pkg_comp
	may not be important here, I haven't tried the similar thing
	for a "native" install to check it), pkg_delete a whole bunch
	of the basic ones of them from the pkg_comp playground, (ones
	that "everything" needs), then go and start making some other
	packages with pkg_comp set to use bin-install instead of
	"package" as its target.

	Notice that pkg_add never happens, or not unless you name a
	package to build, explicitly, that you had built before,
	Also notice that the only binary packages that are built are
	the ones that are explicitly named to pkg_comp build.

	Observation (just using ps to see what was actually happenening)
	suggests that something is causing make to be run with
	DEPENDS_TARGET set to reinstall rather than bin-install (or
	package).

>Fix:
	No idea.   The NetBSD mk system is way beyond my understanding,
	and the pkgsrc version of it goes eons beyond even that.

	As a workaround, I'm just removing everything I built in the past
	few days, and building again the old way (with BUILD_TARGET=package)
	which works fine.   Or at leat, I'm expecting that it will, this part
	is just starting... (but no reason to believe it won't).