On 2016-11-03 19:04, Erik Joelsson wrote:
Here is a new webrev that actually works.

http://cr.openjdk.java.net/~erikj/8160491/webrev.02/

It looks reasonable, but these kinds of changes are always scary. The new solution, if it works correctly, seems easier to understand, though.

If you feel that you trust your testing, I'm ok with the change.

/Magnus

/Erik


On 2016-11-03 16:01, Erik Joelsson wrote:
Found more places needing to be adjusted for this, will post new webrev.

/Erik


On 2016-11-03 15:32, Erik Joelsson wrote:
The build logic for tar.gz bundles cannot handle files containing $. For the Oracle internal docs bundle, this is a problem since there are example inner classes included. Escaping of $ is always a pain point when working with make. After having investigated this quite thoroughly I have found what I think is the best solution.

What happens here is something like this:

LIST_OF_FILES := $(some find expression creating a list of files)
$(eval $(call SomeMacro, FOO, \
    FILES := $(LIST_OF_FILES), \
    ...  \
))

If LIST_OF_FILES contains a file with a $, that $ will get eaten by the $(eval). When we supply arguments to such macros inline, we currently have to escape them two times like this (in order to get EXCLUDES to contain foo$bar):

$(eval $(call SomeMacro, FOO, \
    EXCLUDES := foo$$$$bar, \
    ...  \
))

Because of this, I think the best solution is to modify the logic evaluating the parameters for such macros, with a strategically placed call to DoubleDollar to compensate for the extra evaluation of the parameter values. Then the first example will just work and the second becomes:

$(eval $(call SomeMacro, FOO, \
    EXCLUDES := foo$$bar, \
    ...  \
))

Bug: https://bugs.openjdk.java.net/browse/JDK-8160491
Webrev: http://cr.openjdk.java.net/~erikj/8160491/webrev.01/

/Erik



Reply via email to