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.

Reply via email to