From: Jeff King Date: Wed, 29 Sep 2010 05:16:41 GMT Subject: Re: [PATCHv2] Makefile: implement help target Message-ID: <20100929051640.GA26324@sigill.intra.peff.net> In-Reply-To: <4fd8b490b4badd13c0ea46408e44dc7b317dc0ed.1285706151.git.git@drmicha.warpmail.net> On Tue, Sep 28, 2010 at 10:38:04PM +0200, Michael J Gruber wrote: > +help: > + @awk '/^# Help:/ { l=substr($$0,8); \ > + getline; \ > + j=index(l,":"); \ > + print substr(l,1,j-1), substr($$0,1,index($$0,":")), substr(l,j+2); \ > + }' + do \ > + test "$$category" = "$$currcat" || printf "$$category targets:\n"; \ > + currcat="$$category"; \ > + printf " %-20s%s\n" "$$target" "$$text"; \ > + done Surely this is why we have perl? help: @perl -n0777 \ -e 'push @{$$h{$$1}}, [$$3, $$2] while /^# Help: (.*?): (.*)\n(.*?):/mg;' \ -e 'for (sort keys(%h)) {' \ -e ' print "$$_:\n";' \ -e ' printf(" %-20s%s\n", @$$_) for (@{$$h{$$_}});' \ -e '}' Makefile Note that mine will actually print the targets in a heading in the order in which they appear in the Makefile, which I consider slightly more useful (especially in that we can tweak the order easily). It would also be easy to sort the headers in some more meaningful way, but here I just did it lexically. -Peff