RFR: JDK-8074988: Reduce boilerplate in Setup* macro definitions
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Thu Mar 12 10:02:47 UTC 2015
On 2015-03-11 17:24, Tim Bell wrote:
> Erik:
>
>> (including nashorn-dev since a makefile there is touched)
>>
>> When creating a Setup* macro that takes named parameters, like
>> SetupJavaCompilation, there is a lot of copied boilerplate code that
>> needs to be written. The code, which is essentially copied for all
>> these macro definitions, handles converting the named parameters into
>> local variables and some debugging features. Here is
>> SetupJavaCompilation as an example:
>>
>> define SetupJavaCompilation
>> $(if $(16),$(error Internal makefile error: Too many arguments to
>> SetupJavaCompilation, please update JavaCompilation.gmk))
>> $(call EvalDebugWrapper,$(strip $1),$(call
>> SetupJavaCompilationInner,$(strip
>> $1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)))
>> endef
>>
>> define SetupJavaCompilationInner
>> $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $(strip
>> $($i)),$1_$(strip $($i)))$(NEWLINE))
>> $(call
>> LogSetupMacroEntry,SetupJavaCompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15))
>> $(if $(16),$(error Internal makefile error: Too many arguments to
>> SetupJavaCompilation, please update JavaCompilation.gmk))
>> ...
>> endef
>>
>>
>> I have figured out a way to reduce this boilerplate significantly,
>> massively reducing the overhead and resistance for creating new
>> macros. The logic for converting the named parameters and all the
>> debugging features are now defined only once in MakeBase.gmk. The
>> corresponding declaration of SetupJavaCompilation is reduced to this:
>>
>> SetupJavaCompilation = $(NamedParamsMacroTemplate)
>> define SetupJavaCompilationBody
>> ...
>> endef
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8074988
>> Webrev: http://cr.openjdk.java.net/~erikj/8074988/webrev.01
>
> Only two minor things to pick on:
>
> make/common/MakeBase.gmk at new line #399:
> 'macor' should be 'macro'
>
> test/make/TestJavaCompilation.gmk at line #70
> 'DEPSENDENCIES' should be 'DEPENDENCIES'
Good catch!
Apart from these typos, it looks good to me too.
/Magnus
More information about the nashorn-dev
mailing list