Fix MSVC backend crashes when `c_pch` or `cpp_pch` is not an array

0.44
Christophe Gouiran 7 years ago committed by Nirbheek Chauhan
parent ac8e885068
commit a2d87b76f5
  1. 8
      mesonbuild/backend/vs2010backend.py

@ -862,7 +862,14 @@ class Vs2010Backend(backends.Backend):
if not pch: if not pch:
continue continue
pch_node.text = 'Use' 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] 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 len(pch_sources) == 1:
# If there is only 1 language with precompiled headers, we can use it for the entire project, which # 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. # is cleaner than specifying it for each source file.
@ -1017,6 +1024,7 @@ class Vs2010Backend(backends.Backend):
self.add_include_dirs(lang, inc_cl, file_inc_dirs) self.add_include_dirs(lang, inc_cl, file_inc_dirs)
for lang in pch_sources: for lang in pch_sources:
header, impl, suffix = pch_sources[lang] header, impl, suffix = pch_sources[lang]
if impl:
relpath = os.path.join(proj_to_src_dir, impl) relpath = os.path.join(proj_to_src_dir, impl)
inc_cl = ET.SubElement(inc_src, 'CLCompile', Include=relpath) inc_cl = ET.SubElement(inc_src, 'CLCompile', Include=relpath)
pch = ET.SubElement(inc_cl, 'PrecompiledHeader') pch = ET.SubElement(inc_cl, 'PrecompiledHeader')

Loading…
Cancel
Save