RFR: JDK-8074988: Reduce boilerplate in Setup* macro definitions

Erik Joelsson erik.joelsson at oracle.com
Thu Mar 12 11:12:27 UTC 2015


Thanks, I will correct those before pushing.

/Erik

On 2015-03-12 11:02, Magnus Ihse Bursie wrote:
> 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 build-dev mailing list