source: waflib/Tools/fc_scan.py @ 65860ff

feature/autosinkfeature/cnnfeature/cnn_orgfeature/constantqfeature/crepefeature/crepe_orgfeature/pitchshiftfeature/pydocstringsfeature/timestretchfix/ffmpeg5pitchshiftsamplertimestretchyinfft+
Last change on this file since 65860ff was 0fa325b, checked in by Paul Brossier <piem@piem.org>, 11 years ago

waf: unpack

  • Property mode set to 100644
File size: 1.8 KB
RevLine 
[0fa325b]1#! /usr/bin/env python
2# encoding: utf-8
3# WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
4
5import re
6from waflib import Utils,Task,TaskGen,Logs
7from waflib.TaskGen import feature,before_method,after_method,extension
8from waflib.Configure import conf
9INC_REGEX="""(?:^|['">]\s*;)\s*INCLUDE\s+(?:\w+_)?[<"'](.+?)(?=["'>])"""
10USE_REGEX="""(?:^|;)\s*USE(?:\s+|(?:(?:\s*,\s*(?:NON_)?INTRINSIC)?\s*::))\s*(\w+)"""
11MOD_REGEX="""(?:^|;)\s*MODULE(?!\s*PROCEDURE)(?:\s+|(?:(?:\s*,\s*(?:NON_)?INTRINSIC)?\s*::))\s*(\w+)"""
12re_inc=re.compile(INC_REGEX,re.I)
13re_use=re.compile(USE_REGEX,re.I)
14re_mod=re.compile(MOD_REGEX,re.I)
15class fortran_parser(object):
16        def __init__(self,incpaths):
17                self.seen=[]
18                self.nodes=[]
19                self.names=[]
20                self.incpaths=incpaths
21        def find_deps(self,node):
22                txt=node.read()
23                incs=[]
24                uses=[]
25                mods=[]
26                for line in txt.splitlines():
27                        m=re_inc.search(line)
28                        if m:
29                                incs.append(m.group(1))
30                        m=re_use.search(line)
31                        if m:
32                                uses.append(m.group(1))
33                        m=re_mod.search(line)
34                        if m:
35                                mods.append(m.group(1))
36                return(incs,uses,mods)
37        def start(self,node):
38                self.waiting=[node]
39                while self.waiting:
40                        nd=self.waiting.pop(0)
41                        self.iter(nd)
42        def iter(self,node):
43                path=node.abspath()
44                incs,uses,mods=self.find_deps(node)
45                for x in incs:
46                        if x in self.seen:
47                                continue
48                        self.seen.append(x)
49                        self.tryfind_header(x)
50                for x in uses:
51                        name="USE@%s"%x
52                        if not name in self.names:
53                                self.names.append(name)
54                for x in mods:
55                        name="MOD@%s"%x
56                        if not name in self.names:
57                                self.names.append(name)
58        def tryfind_header(self,filename):
59                found=None
60                for n in self.incpaths:
61                        found=n.find_resource(filename)
62                        if found:
63                                self.nodes.append(found)
64                                self.waiting.append(found)
65                                break
66                if not found:
67                        if not filename in self.names:
68                                self.names.append(filename)
Note: See TracBrowser for help on using the repository browser.