matthew sporleder <msporleder%gmail.com@localhost> writes:
> I am getting pretty sick of the following workflow:
>
> cd /usr/src/pkgsrc; cvs update
> cd devel/tig
> make install clean
>
> ... (an hour later)
>
> pkg_add: A different version of foo-dependency-1.0.1 is already
> installed: foo-dependency-1.0.0
> pkg_add: 1 package addition failed
> *** Error code 1
> ...
> (grumble) pkg_add -u /usr/src/packages/All/foo-depdendency-1.0.1
> make install
>
> repeat...
This is a can of worms, but pkgsrc basically wants to have
a consistent checkout (which you are doing)
all packages up to date/built from that checkout
So, I see two possible approaches:
After you do the cvs update, then use pkg_rolling-replace. It will do
'make replace' in the right order (mostly), and this will mostly work.
something along the lines of what you are doing
As for your specific approach, I think it has a bug, because when a
package is installed, either there is a version, or there isn't. So
what I'd suggest is to add a target (NB I am assuming a DESTDIR world
here):
package-install-or-replace:
that says
if the package is installed, do make replace
if the package is not installed, do make package-install
and then you can set DEPENDS_TARGET to package-install-or-replace.
Alternatively a PKG_INSTALL_USE_REPLACE variable.
Note that make replace is basically pkg_add -u. However, make replace
also uses -U, to avoid exact-version dependency checks that will fail.
Also, once you do a make replace, there will be dirty
("unsafe_depends=YES") packages. To fix this those should also be "make
replace"d. But once you do that, and add ordering, you've reinvented
pkg_rolling-replace.
Still, I think your proposed change is useful.
Attachment:
pgpLbLwwVsktl.pgp
Description: PGP signature