Windows: problem with msvxxx.dll locations containing spaces

Erik Joelsson erik.joelsson at oracle.com
Thu May 3 17:18:33 UTC 2018


Also, on my windows system, if I try using my local Visual Studio, both 
MSVC dll's are found in the Visual Studio dir, and the spaces are all 
cleaned up. I wonder what's different about your setup, Thomas.

/Erik


On 2018-05-03 10:13, Erik Joelsson wrote:
> Hello,
>
> On 2018-05-03 03:41, Magnus Ihse Bursie wrote:
>> I think the main issue here is that BASIC_FIXUP_PATH should be called 
>> for the located msvcr*.dll files. I don't have time to look at it 
>> now, but see if you can do a rewrite using BASIC_FIXUP_PATH when the 
>> potential file is located. This should remove all spaces from the path.
>>
> No, that is not a good solution. I intentionally removed that 
> BASIC_FIXUP_PATH because in VS2017, one of the files has a file name 
> longer than 8 characters and BASIC_FIXUP_PATH rewrites that filename 
> to short style. This in turn has weird consequences in make when we 
> copy that file using generated copy rules. The target file then gets 
> the short style name literally.
>
> When I made that change, I looked at all the calls for potential 
> locations and thought all of them had the directory prepared properly 
> already. It seems I was wrong. I think the correct solution is to 
> either get rid of spaces earlier for all the input directories we 
> search, or maybe tweak BASIC_FIXUP_PATH to not touch the actual filename.
>
> /Erik
>> /Magnus
>>
>> On 2018-05-02 20:46, Thomas Stüfe wrote:
>>> Hi,
>>>
>>> My 32bit builds on Windows were failing since quite a while and I
>>> finally had some minutes to look into that.
>>>
>>> See prior discussion here:
>>> http://mail.openjdk.java.net/pipermail/build-dev/2018-March/021150.html
>>>
>>> My output used to look like this:
>>>
>>> checking if fixpath.exe works... yes
>>> POSSIBLE_MSVC_DLL /cygdrive/c/Program
>>> POSSIBLE_MSVC_DLL Files
>>> POSSIBLE_MSVC_DLL (x86)/Microsoft
>>> POSSIBLE_MSVC_DLL Visual
>>> POSSIBLE_MSVC_DLL Studio
>>> POSSIBLE_MSVC_DLL 12.0/VC/redist/x64/Microsoft.VC120.CRT/msvcr120.dll
>>> configure: Found msvcr120.dll at
>>> /cygdrive/c/Windows/system32/msvcr120.dll using well-known location in
>>> SYSTEMROOT
>>>
>>> So basically, build does not correctly search for msvcr120.dll in
>>> "/cygdrive/c/Program Files (x86)/Microsoft Visual Studio
>>> 12.0/VC/redist/x86/Microsoft.VC120.CRT/msvcr120.dll" - instead, it
>>> fails and falls back to the system default
>>> "/cygdrive/c/Windows/system32/msvcr120.dll". That dll is a 64bit dll,
>>> and so configure fails.
>>>
>>> Note that 64bit build shows exactly the same behaviour! Only there it
>>> works by accident, since the default
>>> /cygdrive/c/Windows/system32/msvcr120.dll it finds happens to be a
>>> 64bit library too, so configure succeeds.
>>>
>>> Part of the problem is TOOLCHAIN_SETUP_MSVC_DLL in
>>> toolchain_windows.m4. We use a bash for loop to iterate thru a list of
>>> one or more files, but that for expression should be quoted.
>>>
>>> If I make this fix:
>>>
>>> --- a/make/autoconf/toolchain_windows.m4        Mon Apr 23 18:04:17 
>>> 2018 -0700
>>> +++ b/make/autoconf/toolchain_windows.m4        Wed May 02 18:38:04 
>>> 2018 +0200
>>> @@ -556,7 +556,7 @@
>>>           fi
>>>         fi
>>>         # In case any of the above finds more than one file, loop 
>>> over them.
>>> -      for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
>>> +      for possible_msvc_dll in "$POSSIBLE_MSVC_DLL"; do
>>>           $ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
>>>           TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], 
>>> [$possible_msvc_dll],
>>>               [well-known location in VCINSTALLDIR])
>>>
>>>
>>> the 32bit configure correctly sets the msvcrt dll:
>>>
>>> POSSIBLE_MSVC_DLL /cygdrive/c/Program Files (x86)/Microsoft Visual
>>> Studio 12.0/VC/redist/x86/Microsoft.VC120.CRT/msvcr120.dll
>>> configure: Found msvcr120.dll at /cygdrive/c/Program Files
>>> (x86)/Microsoft Visual Studio
>>> 12.0/VC/redist/x86/Microsoft.VC120.CRT/msvcr120.dll using well-known
>>> location in VCINSTALLDIR
>>> checking found msvcr120.dll architecture... ok
>>>
>>> and I can start the build, but I get follow up errors:
>>>
>>> ...
>>> Creating hotspot/variant-server/tools/adlc/adlc.exe from 13 file(s)
>>> Compiling 2 files for BUILD_JVMTI_TOOLS
>>> make[3]: *** No rule to make target '/cygdrive/c/Program', needed by
>>> '/cygdrive/c/mine/projects/openjdk/jdk-jdk/output-fastdebug-32/support/modules_libs/java.base/Program'. 
>>>
>>> Stop.
>>> make[3]: *** Waiting for unfinished jobs....
>>> make[2]: *** [make/Main.gmk:165: java.base-copy] Error 2
>>> make[2]: *** Waiting for unfinished jobs....
>>>
>>> I stopped looking at that point, but to me it looks like the build
>>> cannot survive msvcrt.dll locations with spaces in them.
>>>
>>> Kind Regards, Thomas
>>
>




More information about the build-dev mailing list