Dollar ($) expansion still needs attention

Kelly O'Hair kelly.ohair at oracle.com
Thu Feb 28 18:44:00 UTC 2013


Just FYI...

The  x+=y  is a unique make variable assignment, I think it evaluates the right or the entire variable
or something.

---
Also, as I recall, very vaguely, at one point in time, some of these Def*.gmk files would get included
multiple times in one make process. This caused issues and in some cases I had to add in the equivalent
of the C header file protection from multiple inclusions, e.g.

ifndef DEF_FOOBAR
  DEF_FOOBAR=true
  < All of Defs_foobar.gmk >
endif

The nested Defs*.gmk inclusions are a nightmare. So be careful.

-kto

On Feb 27, 2013, at 3:43 PM, David Holmes wrote:

> On 28/02/2013 4:31 AM, Ioi Lam wrote:
>> While we are cleaning this up, would it make sense to replace the
>> maddening \ and $ with something like this?
>> 
>>              sun/awt/motif/X11GB2312${DOLLAR}Decoder.class
> 
> Perhaps. Though there would not be anything to tell people that this variable exists and that they should use it.
> 
> I suspect that what we see now is that a variable that is subject to secondary expansion requires the \$$$$, while a variable not subject to secondary expansion requires \$$. Though I'm unsure how anything recently changed would have affected this aspect.
> 
> David
> 
>> - Ioi
>> 
>> 
>> On 02/26/2013 06:47 PM, David Holmes wrote:
>>> So ... nashorn pushed this change:
>>> 
>>> http://hg.openjdk.java.net/jdk8/tl/diff/5b0b6ef58dbf/common/makefiles/MakeBase.gmk
>>> 
>>> 
>>> which modified the way $ gets handled in a file name, and in doing so
>>> completely broke many of the pre-existing escape sequences used for
>>> dealing with nested classes (those with $ in their name). I'm not 100%
>>> convinced that this actually relates to secondary expansion but ...
>>> 
>>> Alan found and fixed both:
>>> 
>>> 8008977: profiles build broken by Nashorn build changes
>>> 
>>> and
>>> 
>>> 8009029: SunEC provider classes ending up in rt.jar after Nashorn
>>> build changes
>>> 
>>> However we have now ended up in a situation where nobody knows how to
>>> write the name of a nested class, without knowing how that name will
>>> actually get processed. If you look in CreateJars.gmk you will find:
>>> 
>>> RT_JAR_EXCLUDES += \
>>> ...
>>>        sun/awt/motif/X11GB2312.class \
>>>        sun/awt/motif/X11GB2312\$$Decoder.class \
>>>        sun/awt/motif/X11GB2312\$$Encoder.class \
>>>        sun/awt/motif/X11GBK.class \
>>>        sun/awt/motif/X11GBK\$$Encoder.class \
>>>        sun/awt/motif/X11KSC5601.class \
>>>        sun/awt/motif/X11KSC5601\$$Decoder.class \
>>>        sun/awt/motif/X11KSC5601\$$Encoder.class \
>>> 
>>> (which were modified to fix 8009029) and later:
>>> 
>>> ifneq ($(OPENJDK_TARGET_OS), windows)
>>>    CHARSETS_EXTRA_FILES:=sun/awt/motif/X11GBK.class \
>>> sun/awt/motif/X11GB2312\$$$$Decoder.class \
>>>                          sun/awt/motif/X11GB2312.class \
>>> sun/awt/motif/X11KSC5601\$$$$Decoder.class \
>>> sun/awt/motif/X11KSC5601\$$$$Encoder.class \
>>> sun/awt/motif/X11GB2312\$$$$Encoder.class \
>>>                          sun/awt/motif/X11GBK\$$$$Encoder.class \
>>>                          sun/awt/motif/X11KSC5601.class
>>> endif
>>> 
>>> So the same file names are listed once with \$$ and once with \$$$$,
>>> and they both have to be that way to work!
>>> 
>>> This is untenable. There should only be one way to write the name of a
>>> nested class file inside the makefile.
>>> 
>>> FYI in Profiles.gmk when expanding foo/*.class I already had to do a
>>> similar substitution as is now in ListPathsSafely:
>>> 
>>> # Function to expand foo/*.class into the set of classes
>>> # NOTE: Classfiles with $ in their name are problematic as that is the
>>> # meta-character for both make and the shell! Hence the \$$$$
>>> substitution.
>>> # But note that if you echo these values they will NOT display as
>>> expected.
>>> class_list =  $(patsubst $(JDK_OUTPUTDIR)/classes/%,%,\
>>>     $(foreach i,$(1), $(subst $$,\$$$$, $(wildcard
>>> $(JDK_OUTPUTDIR)/classes/$i))))
>>> 
>>> 
>>> So I'd like to understand why the nashorn change was made so that we
>>> can determine how to get back to only having one way to specify file
>>> names containing $
>>> 
>>> David
>>> -----
>>> 
>>> 
>> 




More information about the build-dev mailing list