Skip to content
  • Brad King's avatar
    Ninja: Fix support for MSVC with non-English output · de9840d1
    Brad King authored
    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 commit v3.9.0-rc1~47^2 (codecvt: Re-implement do_out and
    do_unshift, 2017-05-25), 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
    de9840d1