mirror of https://github.com/abinit/abinit.git
178 lines
4.8 KiB
Python
Executable File
178 lines
4.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
re_f90 = re.compile("\.[Ff]90$")
|
|
re_ign = re.compile(r"_(ext|noabirule)")
|
|
re_int = re.compile("interfaces_")
|
|
|
|
def main(source_tree):
|
|
|
|
tests = dict()
|
|
tests["mod"] = re.compile(r"(module|program)",re.IGNORECASE)
|
|
tests["sub"] = re.compile(r"end (subroutine|function)",re.IGNORECASE)
|
|
tests["hdr"] = re.compile(r"!!\*\*\*\*")
|
|
tests["fun"] = re.compile("!! FUNCTION")
|
|
|
|
ign = list()
|
|
sbm = list()
|
|
|
|
cnt = dict()
|
|
acc = dict()
|
|
glo = dict()
|
|
dcc = dict()
|
|
|
|
glo["mod"] = 0
|
|
glo["sub"] = 0
|
|
glo["hdr"] = 0
|
|
glo["fun"] = 0
|
|
glo["dsc"] = 0
|
|
glo["mis"] = 0
|
|
|
|
print( "Status of RoboDOC headers in %s" % (source_tree))
|
|
print( "")
|
|
print( "")
|
|
print( "")
|
|
|
|
for root,dirs,files in os.walk(source_tree):
|
|
acc["mod"] = 0
|
|
acc["sub"] = 0
|
|
acc["hdr"] = 0
|
|
acc["fun"] = 0
|
|
acc["dsc"] = 0
|
|
acc["mis"] = 0
|
|
|
|
dirs.sort()
|
|
files.sort()
|
|
if ( "01_interfaces_ext" in dirs ):
|
|
ign.append(os.path.join(root,"01_interfaces_ext"))
|
|
dirs.remove("01_interfaces_ext")
|
|
for d in dirs:
|
|
if ( re_ign.search(d) ):
|
|
ign.append(os.path.join(root,d))
|
|
dirs.remove(d)
|
|
|
|
sources = list()
|
|
if ( re_ign.search(root) ):
|
|
ign.append(root)
|
|
else:
|
|
for src in files:
|
|
if ( (re_f90.search(src)) and not (re_int.match(src)) ):
|
|
sources.append(os.path.join(root,src))
|
|
|
|
if ( len(sources) > 0 ):
|
|
print ("File Mods Subs Hdrs Funs Dscs Miss")
|
|
print ("------------------------------------------------ ---- ---- ---- ---- ---- ----")
|
|
|
|
for src in sources:
|
|
cnt["mod"] = 0
|
|
cnt["sub"] = 0
|
|
cnt["hdr"] = 0
|
|
cnt["fun"] = 0
|
|
cnt["dsc"] = 0
|
|
cnt["mis"] = 0
|
|
|
|
chk_fun = False
|
|
with open(src, "r") as fh:
|
|
inp = fh.readlines()
|
|
|
|
for line in inp:
|
|
tmp = line.split()
|
|
if ( chk_fun ):
|
|
if ( len(tmp) > 5 ):
|
|
cnt["dsc"] += 1
|
|
chk_fun = False
|
|
|
|
for blk in tests:
|
|
if ( tests[blk].match(line.strip()) ):
|
|
cnt[blk] += 1
|
|
if ( blk == "fun" ):
|
|
chk_fun = True
|
|
|
|
cnt["mis"] = (cnt["mod"]+cnt["sub"]-cnt["fun"]) + (cnt["fun"]-cnt["dsc"])
|
|
if ( cnt["mis"] < 0 ):
|
|
cnt["mis"] = 0
|
|
|
|
print ("%-48s %4d %4d %4d %4d %4d %4d" % \
|
|
(src,cnt["mod"],cnt["sub"],cnt["hdr"],cnt["fun"],cnt["dsc"],cnt["mis"]))
|
|
|
|
for blk in cnt:
|
|
acc[blk] += cnt[blk]
|
|
|
|
if ( (cnt["sub"] > 1) and (cnt["mod"] == 0) ):
|
|
sbm.append(src)
|
|
|
|
if ( len(sources) > 0 ):
|
|
my_sum = acc["mod"] + acc["sub"]
|
|
if ( my_sum > 0 ):
|
|
dcc[root] = int(float(my_sum-acc["mis"])*100.0/float(my_sum))
|
|
|
|
print ("------------------------------------------------ ---- ---- ---- ---- ---- ----")
|
|
print ("Total in %-39s %4d %4d %4d %4d %4d %4d" % \
|
|
(root,acc["mod"],acc["sub"],acc["hdr"],acc["fun"],acc["dsc"],acc["mis"]))
|
|
print ("")
|
|
print ("")
|
|
print ("")
|
|
|
|
for blk in cnt:
|
|
glo[blk] += acc[blk]
|
|
|
|
print ("================================================ ==== ==== ==== ==== ==== ====")
|
|
print ("Summary Mods Subs Hdrs Funs Dscs Miss")
|
|
print ("------------------------------------------------ ---- ---- ---- ---- ---- ----")
|
|
print ("%-48s %4d %4d %4d %4d %4d %4d" % \
|
|
("*",glo["mod"],glo["sub"],glo["hdr"],glo["fun"],glo["dsc"],glo["mis"]))
|
|
print ("================================================ ==== ==== ==== ==== ==== ====")
|
|
print ("")
|
|
print ("Mods: number of Fortran modules or programs")
|
|
print ("Subs: number of subroutines or functions")
|
|
print ("Hdrs: number of RoboDOC headers")
|
|
print ("Funs: number of RoboDOC 'FUNCTION' keywords")
|
|
print ("Dscs: number of actually described functions")
|
|
print ("Miss: number of missing descriptions")
|
|
print ("")
|
|
print ("")
|
|
print ("")
|
|
|
|
print ("Directory % done")
|
|
print ("------------------------ --------")
|
|
dcc_keys = sorted(dcc.keys())
|
|
for key in dcc_keys:
|
|
print ("%-24s %8d" % (key,dcc[key]))
|
|
my_sum = glo["mod"] + glo["sub"]
|
|
if ( my_sum > 0 ):
|
|
pct = int(float(my_sum-glo["mis"])*100.0/float(my_sum))
|
|
print ("------------------------ --------")
|
|
print ("%-24s %8d" % ("*",pct))
|
|
print ("")
|
|
print ("")
|
|
print ("")
|
|
|
|
print ("The following directories have been ignored:")
|
|
print ("")
|
|
for d in ign:
|
|
print (" * %s/" % (d))
|
|
print ("")
|
|
print ("")
|
|
print ("")
|
|
|
|
print ("The following files are not modules, but contain a collection of routines:" )
|
|
print ("")
|
|
for src in sbm:
|
|
print (" * %s" % (src))
|
|
print ("")
|
|
print ("")
|
|
print ("")
|
|
|
|
if __name__ == "__main__":
|
|
|
|
if len(sys.argv) == 1:
|
|
source_tree = "src"
|
|
else:
|
|
source_tree = sys.argv[1]
|
|
|
|
main(source_tree)
|