summaryrefslogtreecommitdiff
path: root/script/make_depend_py3.py
blob: a47d7fb43bd6b5d0aba4a89b4988f76c2f227368 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/env python3
""" 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= mot.find('!')
    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',encoding='utf8',errors='ignore').readlines()
        self.module= "dummy"
        for ligne in listeLignes:
            ligne= ligne.lower()
            if ligne.count('use'):
                ligne= ligne.replace(',',' ')
                listeMots= ligne.split()
                if listeMots[0] == 'use':
                    mod= noComment(listeMots[1])
                    if mod not in self.used and mod != 'intrinsic':
                        self.used.append(mod)
            elif ligne.count('module'):
                listeMots= ligne.split()
                if listeMots[0] == 'module' and \
                   noComment(listeMots[1]) != 'procedure':
                    self.module= listeMots[1]
    def utilise(self,other):
        return (other.module in self.used)

#list the file names
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(list(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)