6 from optparse import OptionParser, OptionGroup
7 parser = OptionParser("""\
8 Usage: %prog [options] <path>
10 Utility for dumping Clang-style logged diagnostics.\
12 parser.add_option("-a", "--all", action="store_true", dest="all",
13 default=False, help="dump all messages.")
14 parser.add_option("-e", "--error", action="store_true", dest="error",
15 default=False, help="dump 'error' messages.")
16 parser.add_option("-f", "--fatal", action="store_true", dest="fatal",
17 default=False, help="dump 'fatal error' messages.")
18 parser.add_option("-i", "--ignored", action="store_true", dest="ignored",
19 default=False, help="dump 'ignored' messages.")
20 parser.add_option("-n", "--note", action="store_true", dest="note",
21 default=False, help="dump 'note' messages.")
22 parser.add_option("-w", "--warning", action="store_true", dest="warning",
23 default=False, help="dump 'warning' messages.")
24 (opts, args) = parser.parse_args()
27 parser.error("invalid number of arguments")
29 levels = {'error': False, 'fatal error': False, 'ignored': False,
30 'note': False, 'warning': False}
32 levels['error'] = True
34 levels['fatal error'] = True
36 levels['ignored'] = True
40 levels['warning'] = True
44 # Read the diagnostics log.
51 # Complete the plist (the log itself is just the chunks).
53 <?xml version="1.0" encoding="UTF-8"?>
54 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
55 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
62 # Load the diagnostics.
63 diags = plistlib.readPlistFromString(data)
65 # Print out the diagnostics.
67 print "**** BUILD DIAGNOSTICS ****"
68 for i, file_diags in enumerate(diags):
69 file = file_diags.get('main-file')
70 print "*** %s ***" % file
71 for d in file_diags.get('diagnostics', ()):
72 if levels[d.get('level')] or opts.all:
73 print " %s:%s:%s: %s: %s" % (
74 d.get('filename'), d.get('line'), d.get('column'),
75 d.get('level'), d.get('message'))
77 if __name__ == "__main__":