blob: 917fc913256b00830b217da375664ca54a1c9861 [file] [log] [blame]
Zachary Turnere030d102017-03-06 17:40:36 +00001import os
2import re
3
4from use_lldb_suite import lldb_root
5
6src_dir = os.path.join(lldb_root, "source")
7inc_dir = os.path.join(lldb_root, "include")
8
9src_map = {}
10
11include_regex = re.compile('#include \"(lldb(.*/)+).*\"')
12
13def scan_deps(this_dir, file):
14 includes = set()
15 with open(file) as f:
16 for line in list(f):
17 m = include_regex.match(line)
18 if m is not None:
19 relative = m.groups()[0].rstrip("/")
20 if relative != this_dir:
21 includes.add(relative)
22 return includes
23
24def insert_or_add_mapping(base, deps):
25 global src_map
26 if len(deps) > 0:
27 if base in src_map:
28 existing_deps = src_map[base]
29 existing_deps.update(deps)
30 else:
31 src_map[base] = deps
32
33for (base, dirs, files) in os.walk(inc_dir):
34 dir = os.path.basename(base)
35 relative = os.path.relpath(base, inc_dir)
36 inc_files = filter(lambda x : os.path.splitext(x)[1] in [".h"], files)
37 deps = set()
38 relative = relative.replace("\\", "/")
39 for inc in inc_files:
40 inc_path = os.path.join(base, inc)
41 deps.update(scan_deps(relative, inc_path))
42 insert_or_add_mapping(relative, deps)
43
44for (base, dirs, files) in os.walk(src_dir):
45 dir = os.path.basename(base)
46 relative = os.path.relpath(base, src_dir)
47 src_files = filter(lambda x : os.path.splitext(x)[1] in [".cpp", ".h", ".mm"], files)
48 deps = set()
49 norm_base_path = os.path.normpath(os.path.join("lldb", relative))
50 norm_base_path = norm_base_path.replace("\\", "/")
51 for src in src_files:
52 src_path = os.path.join(base, src)
53 deps.update(scan_deps(norm_base_path, src_path))
54 insert_or_add_mapping(norm_base_path, deps)
55 pass
56
57items = list(src_map.iteritems())
58items.sort(lambda A, B : cmp(A[0], B[0]))
59
60for (path, deps) in items:
61 print path + ":"
62 sorted_deps = list(deps)
63 sorted_deps.sort()
64 for dep in sorted_deps:
65 print "\t" + dep
Zachary Turner5013eb92017-03-03 22:40:46 +000066pass