Chromium Code Reviews| Index: tools/mb/mb.py |
| diff --git a/tools/mb/mb.py b/tools/mb/mb.py |
| index c550a1ae884e566f44d23391b13c5eb3a73afe01..d18045cbcf6502980c05cb59185c916cd9855643 100755 |
| --- a/tools/mb/mb.py |
| +++ b/tools/mb/mb.py |
| @@ -23,9 +23,9 @@ import subprocess |
| def main(args): |
| - mb = MetaBuildWrapper() |
| - mb.ParseArgs(args) |
| - return mb.args.func() |
| + mbw = MetaBuildWrapper() |
| + mbw.ParseArgs(args) |
| + return mbw.args.func() |
| class MetaBuildWrapper(object): |
| @@ -284,8 +284,8 @@ class MetaBuildWrapper(object): |
| for m in mixins: |
| if m not in self.mixins: |
| raise MBErr('Unknown mixin "%s"' % m) |
| - if m in visited: |
| - raise MBErr('Cycle in mixins for "%s": %s' % (m, visited)) |
|
Dirk Pranke
2015/04/08 21:37:31
This logic didn't actually work right; it would er
|
| + |
| + # TODO: check for cycles in mixins. |
| visited.append(m) |
| @@ -316,7 +316,7 @@ class MetaBuildWrapper(object): |
| def GNCmd(self, path, gn_args): |
| # TODO(dpranke): Find gn explicitly in the path ... |
| cmd = ['gn', 'gen', path] |
| - gn_args = gn_args.replace("$(goma_dir)", gn_args) |
| + gn_args = gn_args.replace("$(goma_dir)", self.args.goma_dir) |
| if gn_args: |
| cmd.append('--args=%s' % gn_args) |
| return cmd |
| @@ -343,13 +343,15 @@ class MetaBuildWrapper(object): |
| ret, _, _ = self.Run(cmd) |
| return ret |
| - def ParseGYPOutputPath(self, path): |
| + def ToSrcRelPath(self, path): |
| + """Returns a relative path from the top of the repo.""" |
| + # TODO: Support normal paths in addition to source-absolute paths. |
| assert(path.startswith('//')) |
| return path[2:] |
| def ParseGYPConfigPath(self, path): |
| - assert(path.startswith('//')) |
| - output_dir, _, config = path[2:].rpartition('/') |
| + rpath = self.ToSrcRelPath(path) |
| + output_dir, _, config = rpath.rpartition('/') |
| self.CheckGYPConfigIsSupported(config, path) |
| return output_dir, config |
| @@ -389,21 +391,18 @@ class MetaBuildWrapper(object): |
| self.WriteJSONOutput({'status': 'Found dependency (all)'}) |
| return 0 |
| - cmd = (['gn', 'refs', self.args.path[0]] + inp['files'] + |
| + cmd = (['gn', 'refs', self.args.path[0] ] + |
| + ['//' + f for f in inp['files']] + |
| ['--type=executable', '--all', '--as=output']) |
| needed_targets = [] |
| ret, out, _ = self.Run(cmd) |
| - |
| if ret: |
| self.WriteFailureAndRaise('gn refs returned %d: %s' % (ret, out)) |
| - rpath = os.path.relpath(self.args.path[0], self.chromium_src_dir) + os.sep |
| + rpath = self.ToSrcRelPath(self.args.path[0]) + os.sep |
| needed_targets = [t.replace(rpath, '') for t in out.splitlines()] |
| needed_targets = [nt for nt in needed_targets if nt in inp['targets']] |
| - for nt in needed_targets: |
| - self.Print(nt) |
| - |
| if needed_targets: |
| # TODO: it could be that a target X might depend on a target Y |
| # and both would be listed in the input, but we would only need |
| @@ -444,7 +443,7 @@ class MetaBuildWrapper(object): |
| output_path = self.args.output_path[0] |
| if output_path: |
| try: |
| - self.WriteFile(output_path, json.dumps(obj)) |
| + self.WriteFile(output_path, json.dumps(obj, indent=2) + '\n') |
| except Exception as e: |
| raise MBErr('Error %s writing to the output path "%s"' % |
| (e, output_path)) |
| @@ -467,9 +466,9 @@ class MetaBuildWrapper(object): |
| ret, out, err = self.Call(cmd) |
| if self.args.verbose: |
| if out: |
| - self.Print(out) |
| + self.Print(out, end='') |
| if err: |
| - self.Print(err, file=sys.stderr) |
| + self.Print(err, end='', file=sys.stderr) |
| return ret, out, err |
| def Call(self, cmd): |