Fix MSVC backend crashes when `c_pch` or `cpp_pch` is not an array
@@ -861,7 +861,14 @@ class Vs2010Backend(backends.Backend):
if not pch:
continue
pch_node.text = 'Use'
+ if compiler.id == 'msvc':
+ if len(pch) != 2:
+ raise RuntimeError('MSVC requires one header and one source to produce precompiled headers.')
pch_sources[lang] = [pch[0], pch[1], lang]
+ else:
+ # I don't know whether its relevant but let's handle other compilers
+ # used with a vs backend
+ pch_sources[lang] = [pch[0], None, lang]
if len(pch_sources) == 1:
# If there is only 1 language with precompiled headers, we can use it for the entire project, which
# is cleaner than specifying it for each source file.
@@ -1016,6 +1023,7 @@ class Vs2010Backend(backends.Backend):
self.add_include_dirs(lang, inc_cl, file_inc_dirs)
for lang in pch_sources:
header, impl, suffix = pch_sources[lang]
+ if impl:
relpath = os.path.join(proj_to_src_dir, impl)
inc_cl = ET.SubElement(inc_src, 'CLCompile', Include=relpath)
pch = ET.SubElement(inc_cl, 'PrecompiledHeader')
