Skip to content

Commit 5013eb9

Browse files
author
Zachary Turner
committed
Add a script to dump out all project inter-dependencies.
llvm-svn: 296920
1 parent bd6a2d8 commit 5013eb9

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

lldb/scripts/analyze-project-deps.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import os
2+
import re
3+
4+
from use_lldb_suite import lldb_root
5+
6+
src_dir = os.path.join(lldb_root, "source")
7+
inc_dir = os.path.join(lldb_root, "include")
8+
9+
src_map = {}
10+
11+
include_regex = re.compile('#include \"(lldb(.*/)+).*\"')
12+
13+
def 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+
24+
def 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+
33+
for (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+
for inc in inc_files:
39+
inc_path = os.path.join(base, inc)
40+
deps.update(scan_deps(relative, inc_path))
41+
insert_or_add_mapping(relative, deps)
42+
43+
for (base, dirs, files) in os.walk(src_dir):
44+
dir = os.path.basename(base)
45+
relative = os.path.relpath(base, src_dir)
46+
src_files = filter(lambda x : os.path.splitext(x)[1] in [".cpp", ".h", ".mm"], files)
47+
deps = set()
48+
norm_base_path = os.path.normpath(os.path.join("lldb", relative))
49+
norm_base_path = norm_base_path.replace("\\", "/")
50+
for src in src_files:
51+
src_path = os.path.join(base, src)
52+
deps.update(scan_deps(norm_base_path, src_path))
53+
insert_or_add_mapping(norm_base_path, deps)
54+
pass
55+
56+
items = list(src_map.iteritems())
57+
items.sort(lambda A, B : cmp(A[0], B[0]))
58+
59+
for (path, deps) in items:
60+
print path + ":"
61+
sorted_deps = list(deps)
62+
sorted_deps.sort()
63+
for dep in sorted_deps:
64+
print "\t" + dep
65+
pass

0 commit comments

Comments
 (0)