3 def _c_dep(src
, cppflags
):
4 cmd
= "cpp -M -MM -MG %s -MT %s %s"%(cppflags
, ext(src
, 'o')[0], src
)
5 output
= Popen(cmd
, shell
=True, stdout
=PIPE
).communicate()[0]
6 target
, deps
= output
.split(':')
7 deps
= deps
.replace('\\', '').split()
8 return StaticRule(target
, deps
)
10 def c_dep(srcs
, cppflags
):
11 return [_c_dep(src
, cppflags
) for src
in list_(srcs
)]
13 c_env
= dict(cc
='gcc', ld
='ld',
14 include
='include', cppflags
='-I. -Iinclude',
15 cflags
='-g -Wall -Werror')
18 func_list
= re
.findall('^(.*?) (\w+)\((.*?)\)\s*\n{(.*?)^}', str, re
.M|re
.S
)
20 return [i
.split()[-1] for i
in args
.split(',')]
21 return [{'return': _return
, 'name':name
, 'args': args
, 'args_slots': args_slots(args
), 'body': body
} for _return
, name
, args
, body
in func_list
]
24 struct_list
= re
.findall('^(?:typedef )?struct (\w+) {\n(.*?)^}', str, re
.M|re
.S
)
25 return [{'name': name
, 'body':body
} for name
, body
in struct_list
]
27 def cprj_setup(lm
, out
, srcs
="*.c", **args
):
29 lm
.update(c_env
, srcs
=srcs
, out
=out
, objs
=ext(srcs
, 'o'))
32 StaticRule(lm
.out
, lm
.objs
, action
="$cc $ldflags -o $target $deps"),
33 RegexpRule("(.+)\.o", "\\1.c", action
="$cc -o $target $cppflags $cflags -c $deps"),
34 c_dep(lm
.srcs
, lm
.cppflags
),