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} ${DPSRCS:M*.cpp} \ > % + ${DPSRCS:M*.cxx} ${DPSRCS:M*.m} > % +_mkdep_${f}: ${f} > % + _at_echo ${.ALLSRC} > % +.endfor > > This seems to run echo once for each file separately. It should be deemed > 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!= jot 1000 : : all: : .for foo in ${COUNT} : _at_echo $$$$ >/dev/null : .endfor > I can't see anything better using current make features. The make -V hack > doesn't work with local variables. > Yes, because -V is meaningless with local variables. > This and some other things would be easier and more efficient if make > had a builtin echo. Then we could just use "builtin_echo ${.ALLSRC:M*.[cS]} > | mkdep ..." in the rules below, and the make -V hack would not be needed > in kern.post.mk. > Yeah. > % ${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=cc mkdep xargs: CC=cc: No such file or directory Cheers, -- Ruslan Ermilov FreeBSD committer ru_at_FreeBSD.org
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:41 UTC