ninja: Suppress unused rules in output

Don't bother outputting any rules which aren't referenced by any build
statement.
pull/5309/head
Jon Turney 6 years ago
parent 091459cbdf
commit 0debaab8d1
No known key found for this signature in database
GPG Key ID: C7C86F0370285C81
  1. 15
      mesonbuild/backend/ninjabackend.py

@ -85,8 +85,12 @@ class NinjaRule:
self.depfile = depfile
self.extra = extra
self.rspable = rspable # if a rspfile can be used
self.refcount = 0
def write(self, outfile):
if not self.refcount:
return
outfile.write('rule %s\n' % self.name)
if self.rspable:
outfile.write(' command = %s @$out.rsp\n' % ' '.join(self.command))
@ -275,7 +279,7 @@ int dummy;
with self.detect_vs_dep_prefix(tempfilename) as outfile:
self.generate_rules()
self.write_rules(outfile)
self.build_elements = []
self.generate_phony()
self.add_build_comment(NinjaComment('Build rules for targets'))
@ -293,7 +297,10 @@ int dummy;
self.add_build_comment(NinjaComment('Suffix'))
self.generate_utils()
self.generate_ending()
self.write_rules(outfile)
self.write_builds(outfile)
default = 'default all\n\n'
outfile.write(default)
# Only overwrite the old build file after the new one has been
@ -830,6 +837,7 @@ int dummy;
def generate_rules(self):
self.rules = []
self.ruledict = {}
self.add_rule_comment(NinjaComment('Rules for compiling.'))
self.generate_compile_rules()
@ -865,10 +873,15 @@ int dummy;
def add_rule(self, rule):
self.rules.append(rule)
self.ruledict[rule.name] = rule
def add_build(self, build):
self.build_elements.append(build)
# increment rule refcount
if build.rule != 'phony':
self.ruledict[build.rule].refcount += 1
def write_rules(self, outfile):
for r in self.rules:
r.write(outfile)

Loading…
Cancel
Save