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