summaryrefslogtreecommitdiff
path: root/script/make_depend.py
diff options
context:
space:
mode:
Diffstat (limited to 'script/make_depend.py')
-rwxr-xr-xscript/make_depend.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/script/make_depend.py b/script/make_depend.py
new file mode 100755
index 0000000..15c656e
--- /dev/null
+++ b/script/make_depend.py
@@ -0,0 +1,57 @@
+#!/bin/env python
+""" generation of module dependances for a xxx.f90 or xxx.F90 file """
+
+import string,sys
+from subprocess import Popen, PIPE
+
+def noComment(mot):
+ """ remove comment characters in a word """
+ ind= string.find(mot,'!')
+ if ind != -1:
+ mot= mot[:ind]
+ return mot
+
+class md9:
+ """ a file, its module and its dependances """
+ def __init__(self,fic):
+ self.name= fic
+ self.used= []
+ #find all module dependances
+ listeLignes= open(self.name,'r').readlines()
+ self.module= "dummy"
+ for ligne in listeLignes:
+ ligne= string.lower(ligne)
+ if string.count(ligne,'use'):
+ ligne= string.replace(ligne,',',' ')
+ listeMots= string.split(ligne)
+ if listeMots[0] == 'use':
+ mod= noComment(listeMots[1])
+ if mod not in self.used and mod != 'intrinsic':
+ self.used.append(mod)
+ elif string.count(ligne,'module'):
+ listeMots= string.split(ligne)
+ if listeMots[0] == 'module' and \
+ noComment(listeMots[1]) != 'procedure':
+ self.module= listeMots[1]
+ def utilise(self,other):
+ return (other.module in self.used)
+
+listeClasse= list()
+for x in sys.argv[1:]:
+ if x.endswith('.f90') or x.endswith('.F90') : listeClasse.append(md9(x))
+#sort the file list
+listeRes= []
+while listeClasse:
+ lgav= len(listeClasse)
+ for fic in listeClasse:
+ if len(filter(lambda x,y=fic:y.utilise(x),listeClasse)) == 0:
+ listeRes.append(fic)
+ listeClasse.remove(fic)
+ lgap= len(listeClasse)
+ if lgav == lgap and lgap != 0:
+ raise RuntimeError("make_depend: cross-references found")
+#result output
+resstr=''
+for fic in listeRes:
+ resstr=resstr+fic.name+' '
+print resstr