diff --git a/Tools/PyUtils/bin/dso-stats.py b/Tools/PyUtils/bin/dso-stats.py index 41ede670c3a25e72dbeb40c18adbd966cc8f94b8..1b9883314af3231541d5b5dd74262ea03e4e8a5e 100755 --- a/Tools/PyUtils/bin/dso-stats.py +++ b/Tools/PyUtils/bin/dso-stats.py @@ -12,23 +12,6 @@ import re import sys import os import subprocess -import six - -## monkey patch subprocess to be forward compatible with py-3k -def getstatusoutput(cmd): - if isinstance(cmd, str): - cmd = cmd.split() - if not isinstance(cmd, (list, tuple)): - raise TypeError('expects a list, a tuple or a space separated string') - encargs = {} if six.PY2 else {'encoding' : 'utf-8'} - process = subprocess.Popen(cmd, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - **encargs) - stdout, _ = process.communicate() - return process.returncode, stdout -subprocess.getstatusoutput = getstatusoutput -del getstatusoutput def getstatus(cmd): sc,_ = subprocess.getstatusoutput(cmd) @@ -98,7 +81,7 @@ class Data: self.ro = 0 self.rw = 0 - + if secs: self.add_secs (secs) self.est_frag() @@ -157,7 +140,7 @@ class Data: self.cpp += sz self.rw += sz - + elif s in ['.jcr']: self.java += sz self.rw += sz @@ -196,51 +179,46 @@ class Data: kw['bss'] = _form (self.bss) kw['total'] = _form (self.total()) print (format % kw, file=f) - - -# secs = parse_lib (lib) -# data = Data(secs, name = lib) -# print data.dso, data.code, data.puredata, data.cpp, data.java, data.initdata, data.bss -# print data.ro, data.rw, data.frag - -# data2 = Data(secs) -# data += data2 -# print data.dso, data.code, data.puredata, data.cpp, data.java, data.initdata, data.bss -# print data.ro, data.rw, data.frag - - - -# data.dump (sys.stdout) - - -kw = {'name' : 'Name', - 'dso' : 'DSO', - 'code' : 'Code', - 'puredata': 'Pure', - 'cpp' : 'C++', - 'java' : 'Java', - 'initdata': 'data', - 'bss' : 'BSS', - 'frag' : 'Frag', - 'total': 'Total'} -print (format % kw, file=sys.stdout) - - -total = Data(name = 'Total') -import fileinput -libs = [] -for l in fileinput.input(): - if l[-1] == '\n': - l = l[:-1] - if l[-1] == '*': - l = l[:-1] - secs = parse_lib(l) - data = Data (secs, name = l) - libs.append (data) - total += data - -libs.sort (key = lambda x: x.total(), reverse=True) - -for l in libs: - l.dump (sys.stdout) -total.dump (sys.stdout) + +def main(): + + import optparse + parser = optparse.OptionParser(description="compile size statistics for shared libraries", + usage="%prog LIB [LIB...]") + + (opt, args) = parser.parse_args() + if len(args)==0: + parser.error("Invalid number of arguments specified") + + libs = [] + total = Data(name = 'Total') + for lib in args: + secs = parse_lib(lib) + data = Data (secs, name = lib) + libs.append (data) + total += data + libs.sort (key = lambda x: x.total(), reverse=True) + kw = {'name' : 'Name', + 'dso' : 'DSO', + 'code' : 'Code', + 'puredata': 'Pure', + 'cpp' : 'C++', + 'java' : 'Java', + 'initdata': 'data', + 'bss' : 'BSS', + 'frag' : 'Frag', + 'total': 'Total'} + print (format % kw, file=sys.stdout) + for l in libs: + l.dump (sys.stdout) + total.dump (sys.stdout) + + return 0 + + +if __name__ == "__main__": + try: + sys.exit(main()) + except KeyboardInterrupt: + sys.exit(1) +