RFR: JDK-8190702: JMC packaging causing errors in JDK 10 consolidated repo (macOS)

Daniel Fuchs daniel.fuchs at oracle.com
Wed Nov 15 15:52:09 UTC 2017


Thanks for that Erik!
It's been annoying me for a couple of days :-)

I have imported your patch locally in my repo and it seems to
be working fine.

Hopefully someone from the build team will give you a thumbs up!

best regards,

-- daniel


On 14/11/2017 22:35, Erik Joelsson wrote:
> When I added support for copying files with spaces in their names, I 
> missed a case. On Mac (the only platform where we currently, in the 
> Oracle build, have a directory with space in it), when rebuilding images 
> after actually touching the source, the build fails with:
> 
> cp: 
> /Users/danielfuchs/workspaces/jdk/jdk10/build/macosx-x64/images/jdk/lib/missioncontrol/Java 
> Mission Control.app/Contents/Eclipse/jmc.ini: No such file or directory
> 
> This is caused by the $(call MakeDir, $(@D)) line in the install-file 
> macro not actually creating the parent directory before trying to copy 
> the file. This in turn was caused by two things:
> 
> First, if a target file that contains spaces, that is defined using the 
> ? wildcard trick, exists when the makefile is parsed, make will resolve 
> those wildcards to spaces, so the target file variable ($@) will have 
> spaces in it instead of ?. This has the consequence that $(@D), which is 
> just a shortcut for $(dir $@) will actually apply the dir call on each 
> space separated entity in $@. So the first fix was to make sure the 
> input to $(dir ) is actually SpaceEncoded.
> 
> Second, the wildcard function seem to be doing some kind of clever 
> caching of results and this caching breaks down when there are spaces in 
> filenames. Because of this, if the argument of $(wildcard ) existed when 
> the makefile was parsed, but was then deleted as part of a prerequisite 
> rule, $(wildcard ) will still return the file as existing when called 
> from a subsequent recipe line. This only happens if the file argument to 
> wildcard contains spaces, so my best guess is that some string matching 
> is happening in some caching table and fails (but I haven't actually 
> checked the gnu make source). My fix for this is to change the MakeDir 
> macro so that it always runs mkdir if the target dir contains ?.
> 
> I also have modified the copy-files tests to reproduce this situation 
> and verified that the fix solves it there as well.
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8190702
> 
> Webrev: http://cr.openjdk.java.net/~erikj/8190702/webrev.01/
> 
> /Erik
> 




More information about the build-dev mailing list