Process VS dependency string as raw bytes.
@@ -166,14 +166,20 @@ class NinjaBackend(backends.Backend):
int dummy;
''')
- pc, stdo = Popen_safe(['cl', '/showIncludes', '/c', 'incdetect.c'],
- cwd=self.environment.get_scratch_dir())[0:2]
-
- for line in stdo.split('\n'):
- if line.endswith('stdio.h'):
- matchstr = ':'.join(line.split(':')[0:2]) + ':'
- with open(tempfilename, 'a') as binfile:
- binfile.write('msvc_deps_prefix = ' + matchstr + '\n')
+ # The output of cl dependency information is language
+ # and locale dependent. Any attempt at converting it to
+ # Python strings leads to failure. We _must_ do this detection
+ # in raw byte mode and write the result in raw bytes.
+ pc = subprocess.Popen(['cl', '/showIncludes', '/c', 'incdetect.c'],
+ cwd=self.environment.get_scratch_dir(),
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ (stdo, _) = pc.communicate()
+
+ for line in stdo.split(b'\r\n'):
+ if line.endswith(b'stdio.h'):
+ matchstr = b':'.join(line.split(b':')[0:2]) + b':'
+ with open(tempfilename, 'ab') as binfile:
+ binfile.write(b'msvc_deps_prefix = ' + matchstr + b'\n')
return open(tempfilename, 'a')
raise MesonException('Could not determine vs dep dependency prefix string.')
