Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 May 2002 16:48:45 +0300 (EEST)
From:      Maxim Sobolev <sobomax@FreeBSD.org>
To:        ports@FreeBSD.org
Subject:   [RFC] Improving dependency registration procedure for ports
Message-ID:  <200205051348.g45DmjI20055@vega.vega.com>

next in thread | raw e-mail | index | archive | help

--%--multipart-mixed-boundary-1.20046.1020606525--%
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi folks,

Our ports system has one annoying long-term obvious flaw: when user
installs a port from the just cvsuped ports collection he may get
incomplete dependency registration, i.e. if he installs port foo,
which depends on another port bar, but already has installed version
of bar different from one in the ports collection, then foo will not
be registered in the bar's +REQUIRED_BY, therefore later he may remove
bar not even noticing that it is still required by installed foo
package potentially leading to foo becoming non-functional (missed
shared library or data file(s), missed executable(s) and so on).

Attached patch should resolve this problem by registering real
dependencies using bar's origin as a key for looking up name of
package installed from the bar port.

Another feature embodied into this patch is the ability to designate
"replacement" ports for bar using ALT_ORIGINS variable. Imagine
situation when you have bar and bar-devel port, both of which have
the same functionality, but the latter being a bleeding-edge
version of the former. In this case port maintainer could set
"ALT_ORIGINS=somecat/bar-devel" in somecat/bar/Makefile and make
all ports that could use either bar or bar-devel depending on bar.
Then, during package-registration process bsd.port.mk will see
which one is really installed and generate list of dependencies
accordingly. This should be very useful for things like XFree86.

Please note that you need up to date pkg_info utility from the
very recent -current to use this patch.

Any comments and suggestions are appreciated.

I'm also working on extending pkg_create(1) to include into the
package's packing list information about origins of all its
dependencies, so that it would be possible to solve similar problem
when user installs pre-built package having already installed
some of its dependencies, but their versions don't match those
recorded in the packing lists of the package being installed.

-Maxim


--%--multipart-mixed-boundary-1.20046.1020606525--%
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Description: ASCII text
Content-Disposition: attachment; filename="bsd.port.mk.diff"

Index: bsd.port.mk
===================================================================
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.411
diff -d -u -r1.411 bsd.port.mk
--- bsd.port.mk	27 Apr 2002 11:22:59 -0000	1.411
+++ bsd.port.mk	5 May 2002 13:46:35 -0000
@@ -3151,9 +3157,20 @@
 package-depends-list:
 	@${PACKAGE-DEPENDS-LIST}
 
-PACKAGE-DEPENDS-LIST= \
+PACKAGE-DEPENDS-LIST= \
 	if [ "${CHILD_DEPENDS}" ]; then \
-		${ECHO_CMD} "${PKGNAME}	${.CURDIR}"; \
+		for origin in ${PKGORIGIN} ${ALT_ORIGINS}; do \
+			installed=$$(${PKG_INFO} -qO $$origin); \
+			if [ "$$installed" ]; then \
+				break; \
+			fi; \
+		done; \
+		if [ -z "$$installed" ]; then \
+			installed="${PKGNAME}"; \
+		fi; \
+		for pkgname in $$installed; do \
+			${ECHO_CMD} "$$pkgname ${.CURDIR}"; \
+		done; \
 	fi; \
 	checked="${PARENT_CHECKED}"; \
 	for dir in $$(${ECHO_CMD} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//') $$(${ECHO_CMD} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//'); do \

--%--multipart-mixed-boundary-1.20046.1020606525--%--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message




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