Hi Erik,

I see the error on two very different machines. One is my private
machine - windows 7, VS2013 and VS2017 installed. The second one is my
corporate Laptop, Windows 10 and only VS2013.

In both cases I use a very recent cygwin64 installation.

Both cases run in TOOLCHAIN_SETUP_MSVC_DLL into the "# Probe: Using
well-known location from Visual Studio 12.0 and older" case, and in
the for loop at line 559 attempt to tokenize the POSSIBLE_MSVC_DLL
variable content. Here the 64bit build on my corporate laptop:

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
checking found msvcr120.dll architecture... ok
checking for msvcr120.dll... /cygdrive/c/WINDOWS/system32/msvcr120.dll
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/msvcp120.dll
configure: Found msvcp120.dll at
/cygdrive/c/WINDOWS/system32/msvcp120.dll using well-known location in
SYSTEMROOT

As you can see, we fall back to the default in windows/system32, which
happens to be working for 64bit. On 32bit, we get this error:

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/x86/Microsoft.VC120.CRT/msvcr120.dll
configure: Found msvcr120.dll at
/cygdrive/c/WINDOWS/system32/msvcr120.dll using well-known location in
SYSTEMROOT
checking found msvcr120.dll architecture... incorrect, ignoring
configure: The file type of the located msvcr120.dll is PE32+
executable (DLL) (GUI) x86-64, for MS Windows
configure: Found msvcr120.dll at /cygdrive/c/Program Files
(x86)/Microsoft Visual Studio
12.0/VC/redist/arm/Microsoft.VC120.CRT/msvcr120.dll using search of
VCINSTALLDIR
checking found msvcr120.dll architecture... incorrect, ignoring
configure: The file type of the located msvcr120.dll is PE32
executable (DLL) (GUI) ARMv7 Thumb, for MS Windows
checking for msvcr120.dll... no
configure: error: Could not find msvcr120.dll. Please specify using
--with-msvcr-dll.
configure exiting with result code 1

Best Regards, Thomas

On Thu, May 3, 2018 at 7:18 PM, Erik Joelsson <erik.joels...@oracle.com> wrote:
> 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
>>>
>>>
>>
>

Reply via email to