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

Erik Joelsson erik.joelsson at oracle.com
Tue Nov 14 22:35:06 UTC 2017


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