Skip to content

Ninja: Fix support for MSVC with non-English output

Brad King requested to merge brad.king/cmake:ninja-cl-intl into master

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)

Merge request reports