Date: Thu, 5 Feb 2004 21:09:06 +0200 From: Ruslan Ermilov <ru@FreeBSD.org> To: Bruce Evans <bde@zeta.org.au> Cc: current@FreeBSD.org Subject: Re: Very long SRCS list with unusually long src/ prefix Message-ID: <20040205190906.GD20227@FreeBSD.org.ua> In-Reply-To: <20040206030956.F11456@gamplex.bde.org> References: <20040205091634.GC13932@FreeBSD.org.ua> <20040206012805.N8113@gamplex.bde.org> <20040205151425.GA18523@FreeBSD.org.ua> <20040206030956.F11456@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--XuV1QlJbYrcVoo+x Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Feb 06, 2004 at 03:19:46AM +1100, Bruce Evans wrote: > On Thu, 5 Feb 2004, Ruslan Ermilov wrote: >=20 > > On Fri, Feb 06, 2004 at 01:40:45AM +1100, Bruce Evans wrote: > > > On Thu, 5 Feb 2004, Ruslan Ermilov wrote: > > [...] > > > % +.for f in ${DPSRCS:M*.[cS]} ${DPSRCS:M*.cc} ${DPSRCS:M*.C} ${DPSRC= S:M*.cpp} \ > > > % + ${DPSRCS:M*.cxx} ${DPSRCS:M*.m} > > > % +_mkdep_${f}: ${f} > > > % + @echo ${.ALLSRC} > > > % +.endfor > > > > > > This seems to run echo once for each file separately. It should be d= eemed > > > inefficient :-). > > > > > But that's what this patch basically does: it splits possibly very > > long ${.ALLSRC} list into pieces. It's very inefficient only in > > traditional mode. Run this with and without -j1 to see the diff: > > > > : COUNT!=3D jot 1000 > > : > > : all: > > : .for foo in ${COUNT} > > : @echo $$$$ >/dev/null > > : .endfor >=20 > That is slow too. I get 12.12 seconds with make, 2.36 with make -j1, > 1.37 with a shell loop and bash-1, 1.35 with a shell loop and /bin/sh, > and 0.0042 with jot 1000 >/dev/null. >=20 Shell loops aren't an option here. I realize that we loose speed here, but we gain a feature. > I wonder about all those little dependencies too. make already takes > a noticeable amount of time to handle large subdirs (here it takes 0.48 > seconds for a null "make depend"). >=20 I see the 0.18 secs increase for "make depend" in bin/cat. I see no increase when .depend is not stale (since this code is not run then). What do you mean by a ``null "make depend"''? > > > % ${DEPENDFILE}: ${DPSRCS} > > > % rm -f ${DEPENDFILE} > > > % .if !empty(DPSRCS:M*.[cS]) > > > % - ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ > > > % - ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \ > > > % - ${.ALLSRC:M*.[cS]} > > > % + (cd ${.CURDIR}; ${MAKE} _mkdep_cS) | xargs env \ > > > % + ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ > > > % + ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} > > > > > > make uses a real shell, so the env shouldn't be needed. > > > > > $ echo foo.c | xargs CC=3Dcc mkdep > > xargs: CC=3Dcc: No such file or directory >=20 > $ echo foo.c | CC=3Dcc xargs mkdep >=20 Yes, but ``grep ^MKDEPCMD bsd.dep.mk'' to see what I'm talking about. Cheers, --=20 Ruslan Ermilov FreeBSD committer ru@FreeBSD.org --XuV1QlJbYrcVoo+x Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (FreeBSD) iD8DBQFAIpTSUkv4P6juNwoRAnsPAJ4jrJhm1X1HOA11UrBuNTCt1HidSgCdFBwI otqorp5EtFAO+FiwDpZQEOc= =zOeb -----END PGP SIGNATURE----- --XuV1QlJbYrcVoo+x--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040205190906.GD20227>