Subject: Re: [PATCHv2] Makefile: implement help target

From: Michael J Gruber <[email-masked]>
Date: Wed, 29 Sep 2010 09:03:35 +0200

Jeff King venit, vidit, dixit 29.09.2010 07:16:
> 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); \
>> +		}' <Makefile | sort | while read category target text; \
>> +	do \
>> +		test "$$category" = "$$currcat" || printf "$$category targets:\n"; \
>> +		currcat="$$category"; \
>> +		printf "    %-20s%s\n" "$$target" "$$text"; \
>> +	done
> 
> Surely this is why we have perl?

I don't speak perl.

Honestly, this is slowly going on my nerves. Maybe it's because I'm
reading too many "can't we do it this way" responses in one go and
without being coffeinated, and without seeing how "different" is better.
[I've been heeding all advise on portability and readability, as you can
see.]

So far we've been using neither awk nor perl in the Makefile, but sed.

> help:
> 	@perl -n0777 \
> 	  -e 'push @{$$h{$$1}}, [$$3, $$2] while /^# Help: (.*?): (.*)\n(.*?):/mg;' \

On top of everything else, you're even slashing mg! (See, I'm less
grumpy already...)

> 	  -e 'for (sort keys(%h)) {' \
> 	  -e '  print "$$_:\n";' \
> 	  -e '  printf("    %-20s%s\n", @$$_) for (@{$$h{$$_}});' \
> 	  -e '}' Makefile
> 

How portable are the regexps and the array/dictionary push?

> 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).

I don't think Makefile order would be useful. If you know exactly what
you're looking for you need no sorting, you can just search for that
term. (I would do a 'grep -A20 "^target:" Makefile' or hit "/^target" in
my vim but I'm sure there's a different way of doing it in perl...)

If you're trying to find your way around you guess a generic term and
look for that, and that's easier to do when the categories are sorted
alphabetically.

Michael