Re: Very long SRCS list with unusually long src/ prefix

From: Ruslan Ermilov <ru_at_FreeBSD.org>
Date: Thu, 5 Feb 2004 17:14:25 +0200
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

Received on Thu Feb 05 2004 - 06:13:55 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:41 UTC