#!/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()