Ninja: Fix support for MSVC with non-English output
With MSVC the Ninja generator extracts the cl -showIncludes
prefix.
When MSVC is configured to have non-English output, e.g. via
VSLANG=2052
in the environment, then cl
prints the prefix encoded
for the current code page, which is not necessarily UTF-8 encoding.
Currently we fail to convert the prefix to our internal UTF-8 encoding,
but assume it is UTF-8 later.
While writing rules.ninja
, the Ninja generator converts our internal
UTF-8 encoding to the current code page. The msvc_deps_prefix =
line
needs to be encoded as the current code page so that ninja
can match
in the output from cl -showIncludes
during the build.
Prior to !891 (merged), the non-UTF-8 prefix extracted above was
written without noticing its incorrect internal encoding. The
rules.ninja
file was successfully written, but possibly with a mangled
msvc_deps_prefix
. Since that commit the output stream correctly
rejects the non-UTF-8 byte sequence and writing rules.ninja
fails.
Fix this by correctly converting the cl -showIncludes
output from the
current code page to our internal UTF-8 encoding.
Fixes: #17191 (closed)