From reg@shale.csir.co.za Sun Nov  7 02:19:45 1999
Return-Path: <reg@shale.csir.co.za>
Received: from shale.csir.co.za (shale.csir.co.za [146.64.46.5])
	by hub.freebsd.org (Postfix) with ESMTP id E387614DE4
	for <FreeBSD-gnats-submit@freebsd.org>; Sun,  7 Nov 1999 02:19:41 -0800 (PST)
	(envelope-from reg@shale.csir.co.za)
Received: from granite.hip.berkeley.edu (granite.hip.berkeley.edu [136.152.155.25])
	by shale.csir.co.za (8.9.3/8.9.3) with ESMTP id MAA91731
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 7 Nov 1999 12:19:30 +0200 (SAT)
	(envelope-from reg@shale.csir.co.za)
Received: (from reg@localhost)
	by granite.hip.berkeley.edu (8.9.3/8.9.3) id CAA73838;
	Sun, 7 Nov 1999 02:19:30 -0800 (PST)
	(envelope-from reg)
Message-Id: <199911071019.CAA73838@granite.hip.berkeley.edu>
Date: Sun, 7 Nov 1999 02:19:30 -0800 (PST)
From: reg@shale.csir.co.za
Reply-To: reg@shale.csir.co.za
To: FreeBSD-gnats-submit@freebsd.org
Subject: bsd.port.mk: Speed-up for clean-depends
X-Send-Pr-Version: 3.2

>Number:         14760
>Category:       ports
>Synopsis:       bsd.port.mk: Speed-up for clean-depends
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    asami
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Nov  7 02:20:02 PST 1999
>Closed-Date:    Thu Mar 2 17:55:39 PST 2000
>Last-Modified:  Thu Mar  2 17:55:58 PST 2000
>Originator:     Jeremy Lea
>Release:        FreeBSD 4.0-CURRENT i386
>Organization:
Arb's Inc.
>Environment:

	FreeBSD Ports collection.

>Description:

	This patch significantly speeds up package-depends and
	clean-depends, through recursively calling depencies then only
	sorting the list and only calling the clean target once.

>How-To-Repeat:

	

>Fix:
	
Index: bsd.port.mk
===================================================================
RCS file: /usr/home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.323
diff -u -r1.323 bsd.port.mk
--- bsd.port.mk	1999/10/10 17:19:49	1.323
+++ bsd.port.mk	1999/11/07 10:17:07
@@ -2328,24 +2499,32 @@
 
 .endif
 
+# Clean dependency lists: build and runtime.  Print out directory names.
+
+clean-depends-list:
+	@${CLEAN-DEPENDS-LIST}
+
+CLEAN-DEPENDS-LIST= \
+	checked="${PARENT_CHECKED}"; \
+	for dir in $$(${ECHO} "${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//') $$(${ECHO} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//'); do \
+		if [ -d $$dir ]; then \
+			if (${ECHO} $$checked | ${GREP} -qwv "$$dir"); then \
+				child=$$(cd $$dir; ${MAKE} PARENT_CHECKED="$$checked" clean-depends-list); \
+				for d in $$child; do ${ECHO} $$d; done; \
+				${ECHO} $$dir; \
+				checked="$$dir $$child $$checked"; \
+			fi; \
+		else \
+			${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
+		fi; \
+	done | sort -u
+
 .if !target(clean-depends)
 clean-depends:
-.if defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) \
-	|| defined(RUN_DEPENDS)
-	@for dir in `${ECHO} "${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | sort -u`; do \
-		if [ -d $$dir ] ; then \
-			(cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean clean-depends); \
-		fi \
-	done
-.endif
-.if defined(DEPENDS)
-	@for dir in `${ECHO} "${DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | sort -u`; do \
-		if [ -d $$dir ] ; then \
-			(cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean clean-depends); \
-		fi \
+	@for dir in `${CLEAN-DEPENDS-LIST}`; do \
+		(cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean); \
 	done
 .endif
-.endif
 
 # Dependency lists: build and runtime.  Print out directory names.
 
@@ -2373,14 +2552,29 @@
 		fi; \
 	done | sort -u
 
-# This one does not print out directory names -- it could take a long time.
-package-depends:
-	@for dir in `${ECHO} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | sort -u` `${ECHO} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | sort -u`; do \
+# Clean dependency lists: build and runtime.  Print out directory names.
+
+package-depends-list:
+	@${PACKAGE-DEPENDS-LIST}
+
+PACKAGE-DEPENDS-LIST= \
+	checked="${PARENT_CHECKED}"; \
+	for dir in $$(${ECHO} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//') $$(${ECHO} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//'); do \
 		if [ -d $$dir ]; then \
-			(cd $$dir ; ${MAKE} package-name package-depends); \
+			if (${ECHO} $$checked | ${GREP} -qwv "$$dir"); then \
+				child=$$(cd $$dir; ${MAKE} PARENT_CHECKED="$$checked" package-depends-list); \
+				for d in $$child; do ${ECHO} $$d; done; \
+				${ECHO} $$dir; \
+				checked="$$dir $$child $$checked"; \
+			fi; \
 		else \
 			${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
 		fi; \
+	done | sort -u
+
+package-depends:
+	@for dir in `${PACKAGE-DEPENDS-LIST}`; do \
+		(cd $$dir; ${MAKE} package-name); \
 	done
 
 ################################################################

>Release-Note:
>Audit-Trail:

From: Will Andrews <andrews@TECHNOLOGIST.COM>
To: reg@shale.csir.co.za
Cc: FreeBSD-gnats-submit@FreeBSD.ORG, asami@FreeBSD.ORG
Subject: RE: ports/14760: bsd.port.mk: Speed-up for clean-depends
Date: Sun, 07 Nov 1999 17:13:46 -0500 (EST)

 On 07-Nov-99 reg@shale.csir.co.za wrote:
 >>Number:         14760
 >>Category:       ports
 >>Synopsis:       bsd.port.mk: Speed-up for clean-depends
 > 
 >>Description:
 > 
 >       This patch significantly speeds up package-depends and
 >       clean-depends, through recursively calling depencies then only
 >       sorting the list and only calling the clean target once.
 
 I was actually considering doing something like this for quite some time.
 Thanks for your excellent work!! :-)
 
 Satoshi, I've tested this and recommend that you commit it ASAP - this will
 make a world of a difference in cleaning things up! (Not that my opinion
 matters much, but I _AM_ a porter. ;)
 
 Here's the results on my machine:
 
 [ Before clean-depends patch submitted by reg@shale.csir.co.za ]:
 
 <1 4171-0> (99-11-07 17:03:54) [root@shadow /usr/ports/x11/gnome]# make clean
 ===>  Cleaning for esound-0.2.15
 ===>  Cleaning for libaudiofile-0.1.9
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for gnomeaudio-1.0.0
 ===>  Cleaning for gmake-3.77
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for gnomelibs-1.0.53
 ===>  Cleaning for esound-0.2.15
 ===>  Cleaning for libaudiofile-0.1.9
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for ORBit-0.5.0
 ===>  Cleaning for gettext-0.10.35
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for glib-1.2.6
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for gmake-3.77
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for gmake-3.77
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for imlib-1.9.8
 ===>  Cleaning for gmake-3.77
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for giflib-4.1.0
 ===>  Cleaning for gmake-3.77
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for jpeg-6b
 ===>  Cleaning for png-1.0.3
 ===>  Cleaning for tiff-3.5.1
 ===>  Cleaning for jpeg-6b
 ===>  Cleaning for gtk-1.2.6
 ===>  Cleaning for gettext-0.10.35
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for glib-1.2.6
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for xpm-3.4k
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for gnomemedia-1.0.51
 ===>  Cleaning for gmake-3.77
 [continues for several more pages..]
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for xpm-3.4k
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for gnome-1.0.53
 <1 4172-0> (99-11-07 17:07:48) [root@shadow /usr/ports/x11/gnome]#
 
 [after clean-depends patch:]
 <1 4177-0> (99-11-07 17:08:51) [root@shadow /usr/ports/x11/gnome]# make clean
 ===>  Cleaning for esound-0.2.15
 ===>  Cleaning for gnomeaudio-1.0.0
 ===>  Cleaning for gnomemedia-1.0.51
 ===>  Cleaning for libaudiofile-0.1.9
 ===>  Cleaning for gnomepim-1.0.55
 ===>  Cleaning for ORBit-0.5.0
 ===>  Cleaning for gettext-0.10.35
 ===>  Cleaning for glib-1.2.6
 ===>  Cleaning for gmake-3.77
 ===>  Cleaning for libglade-0.7
 ===>  Cleaning for libgtop-1.0.6
 ===>  Cleaning for libtool-1.3.3
 ===>  Cleaning for gnomegames-1.0.51
 ===>  Cleaning for electriceyes-0.3.11
 ===>  Cleaning for giflib-4.1.0
 ===>  Cleaning for imlib-1.9.8
 ===>  Cleaning for jpeg-6b
 ===>  Cleaning for png-1.0.3
 ===>  Cleaning for tiff-3.5.1
 ===>  Cleaning for xpm-3.4k
 ===>  Cleaning for gnomeobjc-1.0.40
 ===>  Cleaning for guile-1.3
 ===>  Cleaning for python-1.5.2
 ===>  Cleaning for tcl-8.2.0
 ===>  Cleaning for gnumeric-0.41
 ===>  Cleaning for gnomeutils-1.0.50
 ===>  Cleaning for gnomenetwork-1.0.2
 ===>  Cleaning for ggv-0.70
 ===>  Cleaning for ghostscript-5.10
 ===>  Cleaning for gnomeprint-0.10
 ===>  Cleaning for gsfonts-5.10
 ===>  Cleaning for gnomeadmin-1.0.3
 ===>  Cleaning for gnomecontrolcenter-1.0.51
 ===>  Cleaning for gtop-1.0.5
 ===>  Cleaning for libxml-1.7.3
 ===>  Cleaning for libghttp-1.0.4
 ===>  Cleaning for gnomemc-4.5.40
 ===>  Cleaning for p5-type1inst-0.6.1
 ===>  Cleaning for gtk-1.2.6
 ===>  Cleaning for tk-8.2.0
 ===>  Cleaning for XFree86-3.3.5
 ===>  Cleaning for gnomecore-1.0.53
 ===>  Cleaning for gnomelibs-1.0.53
 ===>  Cleaning for gnome-1.0.53
 <1 4178-0> (99-11-07 17:09:03) [root@shadow /usr/ports/x11/gnome]# 
 
 Can you say.. WOW! So much faster, especially with those HUGE meta-ports like
 x11/gnome, x11/kde, et cetera.. and no more repetition ad nauseum. :-)
 
 --
 Will Andrews <andrews@technologist.com>
 GCS/E/S @d- s+:+>+:- a--->+++ C++ UB++++ P+ L- E--- W+++ !N !o ?K w---
 ?O M+ V-- PS+ PE++ Y+ PGP+>+++ t++ 5 X++ R+ tv+ b++>++++ DI+++ D+ 
 G++>+++ e->++++ h! r-->+++ y?
 
Responsible-Changed-From-To: freebsd-ports->asami 
Responsible-Changed-By: jkoshy 
Responsible-Changed-When: Tue Nov 9 20:40:04 PST 1999 
Responsible-Changed-Why:  
Port-meister's area. 
State-Changed-From-To: open->closed 
State-Changed-By: asami 
State-Changed-When: Thu Mar 2 17:55:39 PST 2000 
State-Changed-Why:  
Thanks, committed! 
>Unformatted:
