#!/usr/bin/env python

"""
Script to Summarize statistics in the scan-build output.

Statistics are enabled by passing '-internal-stats' option to scan-build 
(or '-analyzer-stats' to the analyzer).

"""

import string
from operator import itemgetter
import sys

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print >> sys.stderr, 'Usage: ', sys.argv[0],\
                             'scan_build_output_file'
        sys.exit(-1)

    f = open(sys.argv[1], 'r')
    Time = 0.0
    TotalTime = 0.0
    MaxTime = 0.0
    Warnings = 0
    Count = 0
    FunctionsAnalyzed = 0
    ReachableBlocks = 0
    ReachedMaxSteps = 0
    NumSteps = 0
    MaxCFGSize = 0
    Mode = 1
    for line in f:
        if ("Miscellaneous Ungrouped Timers" in line) :
          Mode = 1
        if (("Analyzer Total Time" in line) and (Mode == 1)) :
          s = line.split()
          Time = Time + float(s[6])
          Count = Count + 1
          if (float(s[6]) > MaxTime) :
            MaxTime = float(s[6])
        if ((("warning generated." in line) or ("warnings generated." in line)) and Mode == 1) :
          s = line.split()
          Warnings = Warnings + int(s[0])
        if (("The # of functions analysed (as top level)." in line) and (Mode == 1)) :
          s = line.split()
          FunctionsAnalyzed = FunctionsAnalyzed + int(s[0])
        if (("The % of reachable basic blocks" in line) and (Mode == 1)) :
          s = line.split()
          ReachableBlocks = ReachableBlocks + int(s[0])
        if (("The # of times we reached the max number of steps." in line) and (Mode == 1)) :
          s = line.split()
          ReachedMaxSteps = ReachedMaxSteps + int(s[0])
        if (("The maximum number of basic blocks in a function" in line) and (Mode == 1)) :
          s = line.split()
          if (MaxCFGSize < int(s[0])) :
            MaxCFGSize = int(s[0])
        if (("The # of steps executed." in line) and (Mode == 1)) :
          s = line.split()
          NumSteps = NumSteps + int(s[0])
        if ((")  Total" in line) and (Mode == 1)) :
          s = line.split()
          TotalTime = TotalTime + float(s[6])
          
    print "TU Count %d" % (Count)
    print "Time %f" % (Time)
    print "Warnings %d" % (Warnings)
    print "Functions Analyzed %d" % (FunctionsAnalyzed)
    print "Reachable Blocks %d" % (ReachableBlocks)
    print "Reached Max Steps %d" % (ReachedMaxSteps)
    print "Number of Steps %d" % (NumSteps)
    print "MaxTime %f" % (MaxTime)
    print "TotalTime %f" % (TotalTime)
    print "Max CFG Size %d" % (MaxCFGSize)
    