ports/50669: fix fetch-required wrt :target

Erwin Lansing erwin at lansing.dk
Mon Apr 7 10:40:10 UTC 2003


>Number:         50669
>Category:       ports
>Synopsis:       fix fetch-required wrt :target
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Apr 07 03:40:08 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator:     Erwin Lansing
>Release:        FreeBSD 4.8-STABLE i386
>Organization:
pil.dk 
>Environment:
System: FreeBSD lemur.droso.net 4.8-STABLE FreeBSD 4.8-STABLE #0: Sat Apr 5 16:37:20 CEST 2003 root at panda.droso.net:/usr/obj/usr/src/sys/PANDA i386


	
>Description:

As discussed in 48473, the fetch-required target does not take dependencies with
:target in account. With the following patch, dependencies without :target are
tested whether they are installed and fetched if not, while dependencies with :target
have a simple test whether the file listed as dependency exists. The error occurs on
bento as bento first pkg_add's dependencies, then it was tested whether it was installed
and the distfile was not fetched. When the actual dependency where the sources, bento
fails as the distfile is not found. The test is rather simplistic, but as most cases
depend on ${NONEXISTENT} (and thereby always fetched) this should not be a problem.

Tested with: x11/9term and print/ft2demos
Requested by: kris

>How-To-Repeat:
	
>Fix:

	

--- required.diff begins here ---
--- bsd.port.mk.orig	Mon Apr  7 11:23:14 2003
+++ bsd.port.mk	Mon Apr  7 12:21:56 2003
@@ -3634,26 +3638,60 @@
 .endif
 
 .if !target(fetch-required)
-fetch-required:
+fetch-required: fetch
 	@${ECHO_MSG} "===> Fetching all required distfiles for ${PKGNAME} and dependencies"
-	@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
-		(cd $$dir; \
-		tmp=`${MAKE} -V PKGNAME`; \
-		if [ ! -d ${PKG_DBDIR}/$${tmp} ]; then \
-			${MAKE} fetch; \
-		fi );  \
+.for deptype in EXTRACT PATCH FETCH BUILD RUN
+.if defined(${deptype}_DEPENDS)
+.if !defined(NO_DEPENDS)
+	@for i in ${${deptype}_DEPENDS}; do \
+		prog=`${ECHO_CMD} $$i | ${SED} -e 's/:.*//'`; \
+		dir=`${ECHO_CMD} $$i | ${SED} -e 's/[^:]*://'`; \
+		if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
+			dir=`${ECHO_CMD} $$dir | ${SED} -e 's/:.*//'`; \
+			if ${EXPR} "$$prog" : \\/ >/dev/null; then \
+				if [ ! -e "$$prog" ]; then \
+					(cd $$dir; ${MAKE} fetch); \
+				fi; \
+			fi; \
+		else \
+			(cd $$dir; \
+			tmp=`${MAKE} -V PKGNAME`; \
+			if [ ! -d ${PKG_DBDIR}/$${tmp} ]; then \
+				${MAKE} fetch; \
+			fi );  \
+		fi; \
 	done
 .endif
+.endif
+.endfor
+.endif
 
 .if !target(fetch-required-list)
-fetch-required-list:
-	@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
-		(cd $$dir; \
-		tmp=`${MAKE} -V PKGNAME`; \
-		if [ ! -d ${PKG_DBDIR}/$${tmp} ]; then \
-			${MAKE} fetch-list; \
-		fi );  \
+fetch-required-list: fetch-list
+.for deptype in EXTRACT PATCH FETCH BUILD RUN
+.if defined(${deptype}_DEPENDS)
+.if !defined(NO_DEPENDS)
+	@for i in ${${deptype}_DEPENDS}; do \
+		prog=`${ECHO_CMD} $$i | ${SED} -e 's/:.*//'`; \
+		dir=`${ECHO_CMD} $$i | ${SED} -e 's/[^:]*://'`; \
+		if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
+			dir=`${ECHO_CMD} $$dir | ${SED} -e 's/:.*//'`; \
+			if ${EXPR} "$$prog" : \\/ >/dev/null; then \
+				if [ ! -e "$$prog" ]; then \
+					(cd $$dir; ${MAKE} fetch-list); \
+				fi; \
+			fi; \
+		else \
+			(cd $$dir; \
+			tmp=`${MAKE} -V PKGNAME`; \
+			if [ ! -d ${PKG_DBDIR}/$${tmp} ]; then \
+				${MAKE} fetch-list; \
+			fi );  \
+		fi; \
 	done
+.endif
+.endif
+.endfor
 .endif
 
 .if !target(checksum-recursive)
--- required.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list