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))
14 if not includes.has_key(x): includes[x] =
incl(x)
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]]
23 src_files = sys.argv[1:]
25 deps = dict((x,
closure(includes[x],
lambda y: includes[y]))
for x
in src_files)
27 obj =
lambda x: os.path.splitext(x)[0]+
".o"
30 print obj(x)+
": "+x+reduce((
lambda a,b: a+
" "+b),deps[x],
"")
33 print "OBJECTS="+reduce((
lambda a,b: a+
" "+
obj(b)),src_files,
"")