On Fri, 9 Dec 2022 11:26:46 GMT, Christoph Langer <clan...@openjdk.org> wrote:
> This PR fixes two issues. > > In ZipSource.gmk we don't account for the possibility of the build directory > or `$(SUPPORT_OUTPUTDIR)` not being in the source directory tree > (`$(TOPDIR)`). > It doesn't manifest in a build error though since link-file-relative will > then fall back to absolute linking. But it results in awkward paths. > > Furthermore, there's a lurking issue in msys2 builds on Windows. There, ln > would create deep copies of a file system tree instead of linking. If the > file system to be linked contains long paths, it could result in 'File name > too long' errors, like can be seen > [here](https://github.com/gdams/jdk11u-dev/actions/runs/3563481453/jobs/5986319107). > We can avoid this by calling Windows mklink to create a file system > junction. Presumably that would also help build performance (though not > verified). make/common/MakeBase.gmk line 319: > 317: else \ > 318: $(LN) -s '$(call DecodeSpace, $(call RelativePath, $<, $(@D)))' > '$(call DecodeSpace, $@)'; \ > 319: fi I think it would be better to evaluate this conditional in make rather than the shell. Something like this: Suggestion: ifeq ($(OPENJDK_BUILD_OS_ENV), windows.msys2) cmd //c "mklink /J $(call FixPath, $(call DecodeSpace, $@)) $(call FixPath, $(call DecodeSpace, $<))" else $(LN) -s '$(call DecodeSpace, $(call RelativePath, $<, $(@D)))' '$(call DecodeSpace, $@)' endif Just note that the make conditional lines need to be space indented. Same goes for the expression below. ------------- PR: https://git.openjdk.org/jdk20/pull/9