• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python
2#
3# Copyright 2013 The Chromium Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7"""An Ant wrapper that suppresses useless Ant output.
8
9Ant build scripts output "BUILD SUCCESSFUL" and build timing at the end of
10every build. In the Android build, this just adds a lot of useless noise to the
11build output. This script forwards its arguments to ant, and prints Ant's
12output up until the BUILD SUCCESSFUL line.
13
14Also, when a command fails, this script will re-run that ant command with the
15'-verbose' argument so that the failure is easier to debug.
16"""
17
18import optparse
19import sys
20import traceback
21
22from util import build_utils
23
24
25def main(argv):
26  option_parser = optparse.OptionParser()
27  build_utils.AddDepfileOption(option_parser)
28  options, args = option_parser.parse_args(argv[1:])
29
30  try:
31    stdout = build_utils.CheckOutput(['ant'] + args)
32  except build_utils.CalledProcessError:
33    # It is very difficult to diagnose ant failures without the '-verbose'
34    # argument. So, when an ant command fails, re-run it with '-verbose' so that
35    # the cause of the failure is easier to identify.
36    verbose_args = ['-verbose'] + [a for a in args if a != '-quiet']
37    try:
38      stdout = build_utils.CheckOutput(['ant'] + verbose_args)
39    except build_utils.CalledProcessError:
40      traceback.print_exc()
41      sys.exit(1)
42
43    # If this did sys.exit(1), building again would succeed (which would be
44    # awkward). Instead, just print a big warning.
45    build_utils.PrintBigWarning(
46        'This is unexpected. `ant ' + ' '.join(args) + '` failed.' +
47        'But, running `ant ' + ' '.join(verbose_args) + '` passed.')
48
49  stdout = stdout.strip().split('\n')
50  for line in stdout:
51    if line.strip() == 'BUILD SUCCESSFUL':
52      break
53    print line
54
55  if options.depfile:
56    assert '-buildfile' in args
57    ant_buildfile = args[args.index('-buildfile') + 1]
58
59    build_utils.WriteDepfile(
60        options.depfile,
61        [ant_buildfile] + build_utils.GetPythonDependencies())
62
63
64if __name__ == '__main__':
65  sys.exit(main(sys.argv))
66