From owner-ports-jp@jp.FreeBSD.org Thu May  9 02:40:12 2002
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id g48HeCk50616;
	Thu, 9 May 2002 02:40:12 +0900 (JST)
	(envelope-from owner-ports-jp@jp.FreeBSD.org)
Received: from taro.c.u-tokyo.ac.jp (taro.c.u-tokyo.ac.jp [157.82.63.16])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id g48HeBf50611
	for <ports-jp@jp.FreeBSD.org>; Thu, 9 May 2002 02:40:11 +0900 (JST)
	(envelope-from koma2@jiro.c.u-tokyo.ac.jp)
Date: Thu, 9 May 2002 02:40:10 +0900
From: KOMATSU Shinichiro <koma2@jiro.c.u-tokyo.ac.jp>
To: ports-jp@jp.FreeBSD.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="M9NhX3UHpAaciwkO"
Content-Disposition: inline
User-Agent: Mutt/1.3.28i-ja.1
X-Editor: JVim 3.0-j2.1a by Ken'ichi Tsuchida (2001 May 5) + skk1.2.17(SKKFEP)
Message-Id: <20020508174011.0E4E71934@taro.c.u-tokyo.ac.jp>
Reply-To: ports-jp@jp.FreeBSD.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+020417
X-Sequence: ports-jp 12752
Subject: [ports-jp 12752] bsd.port.mk dependency loop checking patch
Errors-To: owner-ports-jp@jp.FreeBSD.org
Sender: owner-ports-jp@jp.FreeBSD.org
X-Originator: koma2@jiro.c.u-tokyo.ac.jp


--M9NhX3UHpAaciwkO
Content-Type: text/plain; charset=iso-2022-jp
Content-Disposition: inline

$B>.>>$G$9!#(B

ports tree $B$NCf$K0MB84X78$N(B loop $B$,$"$k$H(B
make clean $B$d(B make package $B$7$?;~$K(B
make $B$,L58B$K5/F0$5$l$F$7$^$$$^$9!#(B

ports tree $B$r$$$D$b$9$Y$F:G?7$K$7$F$$$l$P(B
$B$3$&$$$&$3$H$O5/$3$i$J$$$N$+$b$7$l$^$;$s$,!"(B
$B0lIt$@$1(B update $B$7$?$j$9$k$H5/$3$jF@$k$h$&$G$9(B
($B$A$g$C$H@N$N(B devel/bison $B$H:#$N(B devel/gettext $B$,(B
 $B6&B8$7$F$$$k;~$H$+(B)$B!#(B

$B$H$$$&$o$1$G!"0MB84X78$N(B loop $B$r(B check $B$7$F!"(B
$B8+IU$+$C$?$i(B warning $B$r=P$7!"(B
$B$=$l0J>e:F5"E*$K(B make $B$r5/F0$9$k$N$r$d$a$k$h$&$J(B
patch $B$r:n$C$F$_$^$7$?!#(B
$B$I$J$?$+(B review $B$7$F$$$?$@$1$J$$$G$7$g$&$+!#(B
$B$h$m$7$/$*4j$$$7$^$9!#(B


[$BCm(B]

- grep -w $B$,(B($BB?J,(B)$B0U?^$7$?DL$j$KF0$$$F$J$$$H;W$o$l$k$N$G!"(B
  $B;H$&$N$r$d$a$^$7$?!#(B

      % echo devel/gettext-old | grep -qv deve/gettext
      % echo $?
      0
      $B",(B $B$3$l$,(B 1 $B$K$J$k$3$H$r0U?^$7$F$$$k$H;W$o$l$k$N$G$9$,!#!#!#(B

- ${PORTSDIR} $B$,(B symlink $B$@$H(B check $B$,$&$^$/F/$+$J$$$N$G(B
  realpath(1) $B$r;H$C$F(B canonicalize $B$7$F$$$^$9!#(B

-- 
---------------------------------------
$BEl5~Bg3XBg3X1!Am9gJ82=8&5f2J(B
$B9-0h2J3X@l96Aj4X4pAC2J3X7O(B 
  $B:4!98&5f<<(B  $BGn;N#3G/(B
    $B>.>>(B  $B?80lO/(B            
mailto:koma2@jiro.c.u-tokyo.ac.jp
http://kamuy.c.u-tokyo.ac.jp/~koma2/
---------------------------------------


--M9NhX3UHpAaciwkO
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="bsd.port.mk-1.411-loopcheck.patch"

Index: bsd.port.mk
===================================================================
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.411
diff -u -u -r1.411 bsd.port.mk
--- bsd.port.mk	27 Apr 2002 11:22:59 -0000	1.411
+++ bsd.port.mk	8 May 2002 17:13:40 -0000
@@ -684,6 +684,16 @@
 .else
 PORTSDIR?=		/usr/ports
 .endif
+.if exists(/bin/realpath)
+PORTSDIR!=		/bin/realpath ${PORTSDIR}
+.else
+PORTSDIR_IS_SYMLINK!=	if [ -L ${PORTSDIR} ]; then echo "yes" ; fi
+. if ${PORTSDIR_IS_SYMLINK} == "yes"
+. error	"PORTSDIR" must not be a symlink
+. endif
+. undef PORTSDIR_IS_SYMLINK
+.endif
+
 LOCALBASE?=		${DESTDIR}/usr/local
 X11BASE?=		${DESTDIR}/usr/X11R6
 LINUXBASE?=		${DESTDIR}/compat/linux
@@ -3068,11 +3078,20 @@
 	@${ALL-DEPENDS-LIST}
 
 ALL-DEPENDS-LIST= \
+	parents="${PARENTS} ${.CURDIR}"; \
 	checked="${PARENT_CHECKED}"; \
-	for dir in $$(${ECHO_CMD} "${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//') $$(${ECHO_CMD} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//'); do \
+	for dir in $$( { ${ECHO_CMD} "${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' ; ${ECHO_CMD} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//'; } | sort -u); do \
 		if [ -d $$dir ]; then \
-			if (${ECHO_CMD} $$checked | ${GREP} -qwv "$$dir"); then \
-				child=$$(cd $$dir; ${MAKE} PARENT_CHECKED="$$checked" all-depends-list); \
+			for p in $$parents; do \
+				if [ "$$p" = "$$dir" ]; then \
+					${ECHO_MSG} "Dependency loop:" >&2; \
+					${ECHO_MSG} "${.CURDIR} => $$p" >&2; \
+					${ECHO_MSG} "" >&2; \
+					exit 1;\
+				fi; \
+			done; \
+			if $$( for c in $$checked; do if [ "$$dir" = "$$c" ]; then exit 1; fi ; done ); then \
+				child=$$(cd $$dir; ${MAKE} PARENTS="$$parents" PARENT_CHECKED="$$checked" all-depends-list); \
 				for d in $$child; do ${ECHO_CMD} $$d; done; \
 				${ECHO_CMD} $$dir; \
 				checked="$$dir $$child $$checked"; \
@@ -3155,11 +3174,20 @@
 	if [ "${CHILD_DEPENDS}" ]; then \
 		${ECHO_CMD} "${PKGNAME}	${.CURDIR}"; \
 	fi; \
+	parents="${PARENTS} ${.CURDIR}"; \
 	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 \
+	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/:.*//'; } | sort -u); do \
 		if [ -d $$dir ]; then \
-			if (${ECHO_CMD} $$checked | ${GREP} -qwv "$$dir"); then \
-				childout=$$(cd $$dir; ${MAKE} CHILD_DEPENDS=yes PARENT_CHECKED="$$checked" package-depends-list); \
+			for p in $$parents; do \
+				if [ "$$p" = "$$dir" ]; then \
+					${ECHO_MSG} "Dependency loop:" >&2; \
+					${ECHO_MSG} "${.CURDIR} => $$p" >&2; \
+					${ECHO_MSG} "" >&2; \
+					exit 1;\
+				fi; \
+			done; \
+			if $$( for c in $$checked; do if [ "$$dir" = "$$c" ]; then exit 1; fi ; done ); then \
+				childout=$$(cd $$dir; ${MAKE} CHILD_DEPENDS=yes PARENTS="$$parents" PARENT_CHECKED="$$checked" package-depends-list); \
 				set -- $$childout; \
 				childname=""; childdir=""; \
 				while [ $$\# != 0 ]; do \
@@ -3173,7 +3201,7 @@
 		else \
 			${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
 		fi; \
-	done
+	done | sort -u
 
 # Print out package names.
 

--M9NhX3UHpAaciwkO--
