Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Jun 2004 13:47:07 +0200
From:      Thomas-Martin Seck <tmseck-lists@netcologne.de>
To:        Oliver Eikemeier <eikemeier@fillmore-labs.com>
Cc:        freebsd-ports@freebsd.org
Subject:   Re: CONFLICTS usage question
Message-ID:  <20040619114707.GC568@laurel.tmseck.homedns.org>
In-Reply-To: <40D3E41F.3020702@fillmore-labs.com>
References:  <40D3E41F.3020702@fillmore-labs.com>

next in thread | previous in thread | raw e-mail | index | archive | help
* Oliver Eikemeier (eikemeier@fillmore-labs.com):

> Besides that your `workaround' has problems (as stated above), try the
> attached ports:
> 
>  cd /usr/ports/misc/conflicttest2
> do
>  make clean deinstall reinstall
> multiple times. Then do
>  make CONFLICT_WITH_SELF=yes clean deinstall reinstall
> 
> See the difference? Other examples are possible, but this is probably
> the most trivial one. Furthermore, you get a different error message,
> which is confusing for the novice user.

So, let's try to get this discussion less emotional and more technical:

We have a situation where conflicttest-2 has a build dependency on
conflicttest-1. conflicttest-1 conflicts with itself.

So we want to forcibly reinstall conflicttest-2 and define
FORCE_PKG_REGISTER. This will in in turn force conflicttest-1 to be
built and installed, too.

Because conflicttest-1 conflicts with itself, the installation of
conflicttest-1 fails with "conflicts with itself" which is, admittedly a
rather confusing, though technically correct message.

If we disable conflicts checking, everything "works", but if
conflicttest-2 were to conflict with some/port we would not have
caught and we might have hosed some/port. Not good.

So the more interesting problem is: is there a way to make the conflicts
generation/check immune to the self-conflict problem. The way the
conflicts file is generated is rather primitive: the CONFLICTS pattern
is fed to ls(1) and that's it. How about checking whether we have a
self-conflict and omit this case:


Index: bsd.port.mk
===================================================================
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.491
diff -u -r1.491 bsd.port.mk
--- bsd.port.mk	10 Jun 2004 07:30:19 -0000	1.491
+++ bsd.port.mk	19 Jun 2004 11:42:27 -0000
@@ -3084,7 +3084,7 @@
 	@${RM} -f ${WRKDIR}/.CONFLICTS
 .for conflict in ${CONFLICTS}
 	@found="`${LS} -d ${PKG_DBDIR}/${conflict} 2>/dev/null || ${TRUE}`"; \
-	if [ X"$$found" != X"" ]; then \
+	if [ X"$$found" != X"" -a "$$found" != "${PKG_DBDIR}/${PKGNAME}" ]; then \
 		${ECHO_CMD} "$$found" >> ${WRKDIR}/.CONFLICTS; \
 	fi
 .endfor


(PKGNAME may not coarse enough as the check criterium since we will miss
the "port conflicts with an older version of itself", but you get the
idea. Does that sound feasible?)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040619114707.GC568>