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