Nek5000
SEM for Incompressible NS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
cdep.py
Go to the documentation of this file.
1 #!/usr/bin/python
2 
3 import sys, os, re
4 
5 #mergestr = lambda x: reduce((lambda a,b: a+" "+b),x,"")
6 
7 pathjoin = lambda a,b: os.path.normpath(os.path.join(a,b))
8 include_re = re.compile("\s*#\s*include\s*\"([^\"]*)\"")
9 incmatch = lambda x: ( include_re.match(line) for line in open(x) )
10 incline = lambda x,m: pathjoin(os.path.split(x)[0],m.group(1))
11 incl = lambda x: [ incline(x,m) for m in incmatch(x) if m!=None ]
12 includes = {}
13 def get_include(x):
14  if not includes.has_key(x): includes[x] = incl(x)
15  return includes[x]
16 
17 def closure(seq,f):
18  v = [], [x for x in seq], set(x for x in seq)
19  while len(v[1]): [(v[1].append(y),v[2].add(y)) for y in
20  f((lambda x: (v[0].append(x),x)[1])(v[1].pop())) if not y in v[2]]
21  return v[0]
22 
23 src_files = sys.argv[1:]
24 files = closure(src_files, get_include)
25 deps = dict((x,closure(includes[x],lambda y: includes[y])) for x in src_files)
26 
27 obj = lambda x: os.path.splitext(x)[0]+".o"
28 
29 for x in src_files:
30  print obj(x)+": "+x+reduce((lambda a,b: a+" "+b),deps[x],"")
31 
32 print
33 print "OBJECTS="+reduce((lambda a,b: a+" "+obj(b)),src_files,"")
list incl
Definition: cdep.py:11
tuple pathjoin
Definition: cdep.py:7
tuple obj
Definition: cdep.py:27
def get_include
Definition: cdep.py:13
tuple incline
Definition: cdep.py:10
def closure
Definition: cdep.py:17
tuple incmatch
Definition: cdep.py:9