| #!/usr/bin/env python |
| |
| import plistlib |
| |
| def main(): |
| from optparse import OptionParser, OptionGroup |
| parser = OptionParser("""\ |
| usage: %prog [options] <path> |
| |
| Utility for dumping Clang-style logged diagnostics.\ |
| """) |
| (opts, args) = parser.parse_args() |
| |
| if len(args) != 1: |
| parser.error("invalid number of arguments") |
| |
| path, = args |
| |
| # Read the diagnostics log. |
| f = open(path) |
| try: |
| data = f.read() |
| finally: |
| f.close() |
| |
| # Complete the plist (the log itself is just the chunks). |
| data = """\ |
| <?xml version="1.0" encoding="UTF-8"?> |
| <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \ |
| "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
| <plist version="1.0"> |
| <array> |
| %s |
| </array> |
| </plist>""" % data |
| |
| # Load the diagnostics. |
| diags = plistlib.readPlistFromString(data) |
| |
| # Print out the diagnostics. |
| print |
| print "**** BUILD DIAGNOSTICS ****" |
| for i, file_diags in enumerate(diags): |
| file = file_diags.get('main-file') |
| print "*** %s ***" % file |
| for d in file_diags.get('diagnostics', ()): |
| print "%s:%s:%s: %s: %s" % ( |
| d.get('filename'), d.get('line'), d.get('column'), |
| d.get('level'), d.get('message')) |
| |
| if __name__ == "__main__": |
| main() |