GNU Make 4.0
Salter, Thomas A
Thomas.Salter at unisys.com
Mon Oct 13 19:09:13 UTC 2014
The actual problem was in SetupZipArchive in JavaCompilation.gmk and was due to a change I made.
To conform to some of the tools we use on our mainframe systems, I fold very long source lines into multiple 128-byte lines with a backslash continuation character. The tool for doing that sometimes makes odd decisions and folded one long line into three lines something like this:
$$ <start of statement>\
$$ <rest of statement>
Apparently make lost track of the original tab character, probably because that line was all white space. I rearranged it to look like this:
<tab> $$ <start of statement>\
$$ <rest of statement>
Surprisingly, this problem only appeared once in the entire project.
Now everything builds cleanly. I didn't need Omair's patch because I'm building on Windows and that patch is for Linux.
Thanks for your help and pointing me in the right direction.
From: Erik Joelsson [mailto:erik.joelsson at oracle.com]
Sent: Monday, October 13, 2014 10:21 AM
To: Salter, Thomas A
Cc: Omair Majid; OpenJDK (build-dev at openjdk.java.net)
Subject: Re: GNU Make 4.0
I don't remember exactly, but the following case would be problematic:
FOO_FILE := /path/to/foo$$file
BAR_FILE := /path/to/bar$$file
do_something $< $@
The correct escaping for the shell will not necessarily be correct for
the target or dependency lines for make. IIRC, in one make version, it
helps if you escape the $$ with a backlash '\'. I also think the target
and the dependencies will behave differently in one version.
Regarding your error, what is on line 204 in you BuildLangtools.gmk? Is
it a call to SetupJavaCompilation? If so, I would add $$(info ) lines to
make/common/JavaCompilation.gmk and see how far I got parsing before the
error to help pinpoint the failing line.
but if you have a filename that includes a $ and put that in a rule,
as either the target or a dependency, then references to $@ or $< can
On 2014-10-13 16:04, Salter, Thomas A wrote:
> I'm building 8u5. I think that was the first update after JDK 8 shipped.
> Do you remember the nature of the subtle differences? This problem could very well be the result of my changes to some of the make files.
> -----Original Message-----
> From: Erik Joelsson [mailto:erik.joelsson at oracle.com]
> Sent: Monday, October 13, 2014 5:05 AM
> To: Salter, Thomas A
> Cc: Omair Majid; OpenJDK (build-dev at openjdk.java.net)
> Subject: Re: GNU Make 4.0
> The patch from Omair will likely be needed for building hotspot. Your
> failure is much earlier though. There are some subtle differences in
> make 3.82 and 4.0 regarding escaping of $ in certain situations. This
> caused some trouble with referring to inner classes from makefiles. I
> did some improvements in this area at some point but don't remember
> exactly when. When you say not up to date, how old is that? I'm pretty
> sure that jdk8 at release was buildable with make 4.0, but I may be wrong.
> On 2014-10-10 21:39, Omair Majid wrote:
>> * Salter, Thomas A <Thomas.Salter at unisys.com> [2014-10-10 14:23]:
>>> Are there any known issues with using GNU Make 4.0 to build OpenJDK8?
>> Yes. I had to add this patch in Fedora to build with Make 4.0:
More information about the build-dev