On Fri, Jan 16, 2009 at 06:48:28PM +0000, Mikolaj Kucharski wrote:
> [resending to the bigger audience for comments]
>
> I should also mention that FORCE_UPDATE=Hard
>
>
> Hi,
>
> When FETCH_PACKAGES=Yes pkg_add will cache packages in the
> ${_CACHE_REPO} directory. This task is done below
>
> ${ECHO_MSG} -n "===> Looking for ${_PKGFILE${_S}} in \$$PKG_PATH - "
>
> line in bsd.port.mk. It may happend that the package in the $PKG_PATH
> is available but not installable on the current system (for example,
> base system library had major bump). When that is the case and this
> package is checked directly by pkg_add everything is fine, as port
> system will fall back and build the package ignoring what is in the
> cache. When the package was cached in previous pkg_add execution as a
> dependency - build will fail. Attached diff removes such broken cached
> packages, so packaging will not be skiped.
>
> I will give you practical example, seen on my system after recent
> openssl update in the base.
>
> I'm building astro/py-metar which depends on lang/python/2.5. Python
> 2.5.4 in the PKG_PATH is linked with ssl.12 which will fail to install
> on the lates OpenBSD snapshot (ssl.14). With FETCH_PACKAGES=Yes pkg_add
> in bsd.port.mk will fail and that will force rebuild of the py-metar,
> but in this execution python-2.5.4 with old ssl.12 was cached in the
> ${_CACHE_REPO}. Then going thru dependencies python will be rebuild
> again, but the package from the cache will be hard linked to the all/
> directory and that will break the build even when python went to the
> fake stage.
>
> Please review my patch. I would like to get that commited. Thanks.
>
> --
> best regards
> q#
> Index: bsd.port.mk
> ===================================================================
> RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v
> retrieving revision 1.959
> diff -u -r1.959 bsd.port.mk
> --- bsd.port.mk 5 Jan 2009 12:43:49 -0000 1.959
> +++ bsd.port.mk 11 Jan 2009 00:38:39 -0000
> @@ -1433,6 +1433,10 @@
> @mkdir -p $...@d}
> . if ${FETCH_PACKAGES:L} == "yes" &&
> !defined(_TRIED_FETCHING_${_PACKAGE_COOKIE${_S}})
> @f=${_CACHE_REPO}/${_PKGFILE${_S}}; \
> + if [ -f $$f ]; then \
> + ${SETENV} PKG_TMPDIR=${PKG_TMPDIR} pkg_add -n -q
> ${_PKG_ADD_FORCE} $$f >/dev/null 2>&1 || \
> + rm -f $$f; \
> + fi; \
> cd ${.CURDIR} && ${MAKE} $$f && \
> { ln $$f $@ 2>/dev/null || cp -p $$f $@ ; } || \
> cd ${.CURDIR} && ${MAKE}
> _TRIED_FETCHING_${_PACKAGE_COOKIE${_S}}=Yes _internal-package-only
Sorry for not responding earlier.
I think this is the wrong approach, and I definitely do not want to
remove stuff automatically like this.