<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p><br>
</p>
<div class="moz-cite-prefix">On 2023-11-14 15:41, Magnus Ihse Bursie
wrote:<br>
</div>
<blockquote type="cite" cite="mid:57db7f21-42e9-437e-8fe9-cf49257d5428@oracle.com">
<p>On 2023-11-06 15:56, 吴国璋 wrote:</p>
<blockquote type="cite" cite="mid:SJ0PR14MB662647ACC1BF903DA542C779B2AAA@SJ0PR14MB6626.namprd14.prod.outlook.com">
<div dir="auto">Thanks Magnus for your opionion. Just one thing
to point out: reaching out to Microsoft is not needed. Here is
the reason:
<div dir="auto"><br>
</div>
<div dir="auto">If Visual Studio is installed with both
English and another language pack, cl.exe will present
itself in English while running configure.</div>
<div dir="auto"><br>
</div>
<div dir="auto">If Visual Studio is installed without English
language pack, cl.exe will present itself in an installed
language.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Therefore now the issue is that the
documentation needs to be improved.</div>
</div>
</blockquote>
<p>That is great news! While I'm still slightly worried that there
can be other issues lurking around the corner with a non-en-US
locale, if the Microsoft toolchain is in English it would at
least take care of the majority of the problems. There are two
other broad categories of tools we're running in the build, java
tools and "unix" (cygwin) tools. The former are already using
the proper locale using -Duser.language=en -Duser.country=US,
and the latter using LC_ALL=C. Apart from this, the compiler
toolchain is the major source of issues.</p>
<p>However, I'd like to have some more investigation into how
cl.exe picks the language. <br>
</p>
</blockquote>
<p>I googled this a bit, and found the following reference:</p>
<p><a class="moz-txt-link-freetext" href="https://learn.microsoft.com/en-us/visualstudio/install/install-visual-studio?view=vs-2022#step-6---install-language-packs-optional">https://learn.microsoft.com/en-us/visualstudio/install/install-visual-studio?view=vs-2022#step-6---install-language-packs-optional</a></p>
<p>It claims:</p>
<blockquote type="cite">
<p>Another way that you can change the default language is by
running the installer from the command line.
For example, you can force the installer to run in English by
using the following command:</p>
<code class="lang-shell" data-author-content="vs_installer.exe --locale en-US
"><span>vs_installer.exe --locale en-US</span></code>
</blockquote>
<p><br>
</p>
<p>but it is not clear to me if that changes the default language
for just the GUI of the installer, or the default language of the
installed tools. If it is the latter, we should document this
command, or even try to have the build system run it
automatically.</p>
<p>Can you help me check this out?<br>
</p>
<p>/Magnus<br>
</p>
<p><br>
</p>
<blockquote type="cite" cite="mid:57db7f21-42e9-437e-8fe9-cf49257d5428@oracle.com">
<p>Is it a hard-coded behavior that it always picks English if it
is installed? If so, it does not really make sense to have more
than one language pack installed. Or is there some way to tell
cl.exe which language to pick? Perhaps we send those signals
without realizing it, like if it happens to look at LC_ALL. If
that is the case, we need to know about this, so we don't
inadvertently break it.</p>
<p>I have never installed a VS language pack. Is it installed like
other VS components?</p>
<p>/Magnus<br>
</p>
<p><br>
</p>
<p><br>
</p>
<blockquote type="cite" cite="mid:SJ0PR14MB662647ACC1BF903DA542C779B2AAA@SJ0PR14MB6626.namprd14.prod.outlook.com">
<div dir="auto">
<div dir="auto"><br>
</div>
<div dir="auto">Before I sent the original email, I tried to
find out whether JDK welcomes other languages, and I found
in the code that JDK did pay some effort for supporting
them, so I assumed that an en-us environment is not
required. Since it is not the case, then the documentation
needs improvement.</div>
<div dir="auto"><br>
</div>
<div dir="auto">In details, the documentation needs the
following modification:</div>
<div dir="auto"><br>
</div>
<div dir="auto">- It needs to advice developers to install
Visual Studio English language pack, if they speak another
language as their mother tongue;</div>
<div dir="auto">- Switching the Windows system to English is
not required (I tried it several times, just installing the
language pack can solve)</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">2023年11月6日 21:00,Magnus Ihse Bursie <a class="moz-txt-link-rfc2396E" href="mailto:magnus.ihse.bursie@oracle.com" moz-do-not-send="true"><magnus.ihse.bursie@oracle.com></a>写道:<br type="attribution">
<blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<p>Let me expand a bit on what Erik says, and also
somewhat contradict him. :-)</p>
<p>There is an open bug for documenting that en-US
locale is needed to build the JDK on Windows: <a href="https://bugs.openjdk.org/browse/JDK-8264425" moz-do-not-send="true" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8264425</a></p>
<p>Unfortunately I have never gotten around to actually
write this down in the docs. I'll try to prioritize
it, since it's a simple fix and can help others in
your position.</p>
<p>To expand on what Erik says: Yes, we have no
principal opinion discriminating against non en-US
locale support, and in general we accept patches that
help users build in different scenarios. For
non-Windows platforms, all user locales are supported,
since we can set LC_ALL=C in the build and run with an
international locale.</p>
<p>Unfortunately, this or any other method of
temporarily changing the locale is not supported on
Windows. :-( There have been several attempts over the
year to overcome this problem, none of which has been
successful. (You can search the archives of this
mailing list for examples.) Therefore the conclusion,
after the last such effort, was that we can only ever
support building on en-US on Windows.<br>
</p>
<p>The problem on supporting the JDK on a different
locale is that there are so many small things that can
go wrong. Just to give an example on the top of my
mind: a few weeks ago, the code that set the en-US
locale to jtreg testing went AWOL. This caused some
jtreg test runs to fail on a Swiss (iirc) locale,
since that used a quote (´) as thousands separator,
which caused parse errors.</p>
<p>Getting stuck on the version parsing of the compiler
is just the very first steps on a road filled with
pain and suffering.</p>
<p>So, to contradict with what Erik says: No, I don't
think we should accept a patch that changes version
determination for cl.exe from string parsing to
compiling macros. </p>
<p>There are several reasons: compiling code in
configure is always tricky. This would be done before
we have even determined what compiler we have or what
version it is. We used to have a binary "fixpath" tool
that was compiled early on, it was a constant source
of trouble, and have now been removed due to those
problems.<br>
</p>
<p>This would also add complexity to the configure
script, since a trivial method (read and parse the
output of running with --version or similar) that is
shared by all compilers, now need to be replaced with
a different method for cl.exe only.</p>
<p>If this was guaranteed to be the only things needed
to make the JDK build and test on non-en-US locales,
then I could probably consider it. But it is highly
unlikely to be. And even if the build passes without
error, I would be pretty wary about assuming that the
build is actually identical to one built on the
"official" locale.</p>
<p>I encourage you to get in touch with Microsoft and
request them to add a solution similar to LC_ALL, so
processes can run in a different locale than the
default user locale. I realize a single voice does not
convince them, but if the message is repeated over and
over from all kinds of developers, it might have some
effect.</p>
<p>/Magnus<br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<div>On 2023-11-04 13:12, 吴 国璋 wrote:<br>
</div>
<blockquote>
<div>
<p>If making the build work on different locales is
accepted, then we can further discuss on this
topic.</p>
<p> </p>
<p>I would like to implement this with C macros
instead of parsing the output, because the MSVC
reference includes the C predefined macros, but
does not include the output format.</p>
<p> </p>
<p>In fact, Visual Studio supports 14 language
packs, and I only know how cl.exe presents itself
in English and Chinese, maybe also French. Maybe
the sentence structure is also different in Korean
or Japanese, I am not sure. With C macros the
implementation will be less impacted by locale and
more stable.<span style="font-size:12pt"></span></p>
<p> </p>
<div style="border:none;border-top:solid #e1e1e1 1pt;padding:3pt 0cm 0cm 0cm">
<p style="border:none;padding:0cm"><b>From: </b><a href="mailto:erik.joelsson@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">erik.joelsson@oracle.com</a><br>
<b>Sent: </b>2023年11月3日 21:04<br>
<b>To: </b><a href="mailto:zcxsythenew@outlook.com" moz-do-not-send="true">吴 国璋</a>; <a href="mailto:david.holmes@oracle.com" moz-do-not-send="true"> David Holmes</a>; <a href="mailto:build-dev@openjdk.org" moz-do-not-send="true" class="moz-txt-link-freetext">build-dev@openjdk.org</a><br>
<b>Subject: </b>Re: Cannot configure on Windows
in Chinese Environment</p>
</div>
<p><span style="font-size:12pt;font-family:'simsun'"> </span></p>
<div>
<p>On 11/2/23 22:18, 吴 国璋 wrote:<span style="font-size:12pt"></span></p>
</div>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<div>
<p>If OpenJDK requires en-us environment, then
nothing needs to be changed. Please ignore
this thread.</p>
</div>
</blockquote>
<p>I should clarify this a bit. We aren't against
making the build work on different locales, but
most of us are unable to verify that it keeps
working on anything by US-English. If you are
willing to put in the work to make it work in a
Chinese environment, and the set of changes
required seem reasonable, we would accept that
contribution. Just be prepared to maintain that
support over time, as it's quite likely that
future changes may break it.</p>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<p>>> </p>
<div>
<div>
<p>>> 1. Does JDK welcome localized
Visual Studio?<br>
>> I read the file
`make/autoconf/toolchains.m4` and found the
following comment:<br>
>> > elif test
"x$TOOLCHAIN_TYPE" = xmicrosoft; then<br>
>> > # There is no specific
version flag, but all output starts with a
version string.<br>
>> > # First line typically
looks something like:<br>
>> > # Microsoft (R) 32-bit
C/C++ Optimizing Compiler Version
16.00.40219.01 for 80x86<br>
>> > # but the compiler name
may vary depending on locale.<br>
>> >
COMPILER_VERSION_OUTPUT=`$COMPILER
2>&1 1>/dev/null | $HEAD -n 1 |
$TR -d '\r'`<br>
>><br>
>> Therefore, it can be inferred that
JDK knows that there are different
localizations of Visual Studio and is ready
for them. JDK thinks that maybe there will
be different names of "Optimizing Compiler"
or others. However, in some languages, the
whole structure of the sentence is
completely different, not just the names.</p>
</div>
</div>
</blockquote>
<p>So far we have only received contributions for
different western type languages, so the current
parsing logic has only been adapted for that.<br>
<br>
<span style="font-size:12pt"></span></p>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<div>
<div>
<p>>> 2. How can the problem be solved?<br>
>> One solution is to change the way
to parse the output of `cl.exe`. For
example, JDK treat the last word separated
by a blank as the target CPU, which is "x64"
in English environment but "版" in Chinese
environment. (`make/autoconf/toolchain.m4`,
Lines 983 to 997.) We may use `grep`
command to search for "x64" directly, and <br>
> then the issue can be solved.<br>
>> However, this solution is not good
enough, because it is also based on parsing
the output, which is intended to be read by
human, not by scripts. (What if "x64" is
changed into "64-bit" or "64 位" in a future
version?)</p>
</div>
</div>
</blockquote>
<p>If the output changes, we adapt the regex. We
need explicit changes to support a new major
version of Visual Studio anyway, so it would be
done as part of those changes. The likelihood of
it changing in a minor update is basically non
existent.<br>
<br>
<span style="font-size:12pt"></span></p>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<div>
<div>
<p>>> 3. What is the best solution?<br>
>> According to MSVC reference, a
solid way to get the MSVC version and the
target CPU is via predefined macros.<br>
>> To get the MSVC version, we can use
`_MSC_VER`. When Visual Studio 2019 is used,
the macro evaluates between 1920 and 1929.
When Visual Studio 2022 is used, the macro
evaluates above 1930.<br>
>> To get the target CPU, we can use
`_M_X64`, `_M_IX86`, `_M_ARM` and
`_M_ARM64`. For example, if the target CPU
is x64, `_M_X64` will be evaluated to 100,
and the other three macros are undefined.</p>
</div>
</div>
</blockquote>
<p>Using the C preprocessor may work, but as Robbin
pointed out, we would prefer if you used one of
the Autoconf macros for generating the input files
and running it if you were to go that route.
However, I think I would prefer if you could just
adapt the current logic for parsing the compiler
version output.</p>
<p>/Erik</p>
<p><span style="font-size:12pt;font-family:'simsun'"> </span></p>
</div>
</blockquote>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
</blockquote>
</body>
</html>