Date: Thu, 12 Nov 1998 16:32:30 -0500 From: David Holland <dholland@cs.toronto.edu> To: kline@thought.org (Gary Kline) Cc: dholland@cs.toronto.edu, joelh@gnu.org, kline@tao.thought.org, hackers@FreeBSD.ORG Subject: Re: bsd make to gnu make conversion, anyone?? Message-ID: <98Nov12.163233edt.37768-2936@qew.cs.toronto.edu> In-Reply-To: <19981112122005.C7958@thought.org> from "Gary Kline" at Nov 12, 98 03:20:05 pm
next in thread | previous in thread | raw e-mail | index | archive | help
>
> On Thu, Nov 12, 1998 at 02:12:14PM -0500, David Holland wrote:
> > > This is the cleanest solution. Still, if you want alternatives, I
> > > haven't tried this, but foreach may work here, as a generalization of
> > > for:
> > >
> > > define do-lang
> > > $(lang).mv.cat: $(.CURDIR)/nls/$(lang)/mv.msg
> > > gencat -new $(.TARGET) $(.ALLSRC)
> > > endef
> > > $(foreach lang,$(LANGS),$(do-lang))
Another thing you can do is
support.mk: Makefile
echo $(LANGS) | awk '{ for (i=1; i<=NF; i++) print $$i;}' |\
awk '{ printf "%s.mv.cat $$(.CURDIR)/nls/%s/mv.msg\n", $$1, $$1}' |\
awk '{ printf "%s: %s\n\tgencat -new %s %s\n\n", \
$$1, $$2, $$1, $$2}' > support.mk
include support.mk
There are assorted possible variations on this...
> > eww.
> >
> > I didn't know this would work.
>
>
> As written it doesn't. I carefully tried it in a test
> case late last night. But it may after I've played
> around with it; tweaked it.
alas. Here I'd hoped you'd found a general solution for .for in
gmake.
> > (Before you tell me to put my code where my mouth is, I looked into
> > this at one point and concluded it would take me longer to figure out
> > how gmake's parser worked than to write a whole new make. So I
> > didn't. Why doesn't it use yacc?)
>
> I've never looked at the guts, but one of our hackers did;
> added some features. Not adding the BSD syntax, obviously.
> ....
hm..
> > Two reasons; one that issuing complex shell commands makes make -n
> > output less useful (for an extreme case of this, try make -n install
> > in gnu binutils), and the other that when you do loops in the shell
> > they don't always terminate on error like you (usually) want.
> >
> > For install this may not be that significant, but when you're doing
> > recursion into subdirectories it sucketh. Hard.
So yeah, here's how you do subdirectories in gmake, in case anyone's
interested:
SUBDIRS=a b c d
TARGETS=all install depend clean
TMP1:=$(foreach dir, $(SUBDIRS), $(TARGETS))
TMP2:=$(foreach dir, $(SUBDIRS), $(foreach tgt, $(TARGETS), $(dir)/))
TMP3:=$(join $(TMP2), $(TMP1))
TMP4:=$(patsubst %, %/%, $(SUBDIRS))
$(TARGETS): %: $(TMP4)
$(TMP3): %:
@echo $(MAKE) -C $(patsubst %/, %, $(dir $@)) $(notdir $@)
--
- David A. Holland | (please continue to send non-list mail to
dholland@cs.utoronto.ca | dholland@hcs.harvard.edu. yes, I moved.)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?98Nov12.163233edt.37768-2936>
