backend/ninja: Fix bug in NinjaRule.length_estimate

The code would create a dictionary that was of type `str : list[str] |
str | None`. Then would later try to call `len(' '.join(dict[key]))`.
This would result in two different bugs:

 1. If the value is `None` it would except, since None isn't iterable
    and cannot be converted to a string
 2. If the value was a string, then it would double the length of the
    actual string and return that, by adding a space between each
    character
pull/13146/head
Dylan Baker 7 months ago
parent fb5a0b4b61
commit cf0fecfcef
  1. 15
      mesonbuild/backend/ninjabackend.py

@ -278,14 +278,13 @@ class NinjaRule:
# determine variables
# this order of actions only approximates ninja's scoping rules, as
# documented at: https://ninja-build.org/manual.html#ref_scope
ninja_vars: T.Dict[str, T.Union[T.List[str], T.Optional[str]]] = {}
for e in elems:
name, value = e
ninja_vars[name] = value
ninja_vars['deps'] = self.deps
ninja_vars['depfile'] = self.depfile
ninja_vars['in'] = infiles
ninja_vars['out'] = outfiles
ninja_vars = dict(elems)
if self.deps is not None:
ninja_vars['deps'] = [self.deps]
if self.depfile is not None:
ninja_vars['depfile'] = [self.depfile]
ninja_vars['in'] = [infiles]
ninja_vars['out'] = [outfiles]
# expand variables in command
command = ' '.join([self._quoter(x) for x in self.command + self.args])

Loading…
Cancel
Save