1#!/usr/bin/env python
2
3import plistlib
4
5def main():
6    from optparse import OptionParser, OptionGroup
7    parser = OptionParser("""\
8usage: %prog [options] <path>
9
10Utility for dumping Clang-style logged diagnostics.\
11""")
12    (opts, args) = parser.parse_args()
13
14    if len(args) != 1:
15        parser.error("invalid number of arguments")
16
17    path, = args
18
19    # Read the diagnostics log.
20    f = open(path)
21    try:
22        data = f.read()
23    finally:
24        f.close()
25
26    # Complete the plist (the log itself is just the chunks).
27    data = """\
28<?xml version="1.0" encoding="UTF-8"?>
29<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
30                       "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
31<plist version="1.0">
32<array>
33%s
34</array>
35</plist>""" % data
36
37    # Load the diagnostics.
38    diags = plistlib.readPlistFromString(data)
39
40    # Print out the diagnostics.
41    print
42    print "**** BUILD DIAGNOSTICS ****"
43    for i, file_diags in enumerate(diags):
44        file = file_diags.get('main-file')
45        print "*** %s ***" % file
46        for d in file_diags.get('diagnostics', ()):
47            print "%s:%s:%s: %s: %s" % (
48                d.get('filename'), d.get('line'), d.get('column'),
49                d.get('level'), d.get('message'))
50
51if __name__ == "__main__":
52    main()
53