bug fix: util.lower_case(str)
[lazy-man.git] / lazy_lib_c.py
blob1364c6c9560009e635295dae667be6c3527bc4b9
1 from lazy_man import *
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')
17 def get_funcs(str):
18 func_list = re.findall('^(.*?) (\w+)\((.*?)\)\s*\n{(.*?)^}', str, re.M|re.S)
19 def args_slots(args):
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]
23 def get_structs(str):
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):
28 srcs = files(srcs)
29 lm.update(c_env, srcs=srcs, out=out, objs=ext(srcs, 'o'))
30 lm.update(args)
31 lm.add(
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),