aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-03-03 22:40:46 +0000
committerZachary Turner <zturner@google.com>2017-03-03 22:40:46 +0000
commit5013eb9e1acb16b81a3a16dbd47353cf3ce4a22b (patch)
tree595f8cf29813aae7aa64420959227c6a383806bc
parentbd6a2d850565341ff6fbf134998d48ad84d35585 (diff)
downloadllvm-5013eb9e1acb16b81a3a16dbd47353cf3ce4a22b.zip
llvm-5013eb9e1acb16b81a3a16dbd47353cf3ce4a22b.tar.gz
llvm-5013eb9e1acb16b81a3a16dbd47353cf3ce4a22b.tar.bz2
Add a script to dump out all project inter-dependencies.
llvm-svn: 296920
-rw-r--r--lldb/scripts/analyze-project-deps.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/lldb/scripts/analyze-project-deps.py b/lldb/scripts/analyze-project-deps.py
new file mode 100644
index 0000000..10a589b
--- /dev/null
+++ b/lldb/scripts/analyze-project-deps.py
@@ -0,0 +1,65 @@
+import os
+import re
+
+from use_lldb_suite import lldb_root
+
+src_dir = os.path.join(lldb_root, "source")
+inc_dir = os.path.join(lldb_root, "include")
+
+src_map = {}
+
+include_regex = re.compile('#include \"(lldb(.*/)+).*\"')
+
+def scan_deps(this_dir, file):
+ includes = set()
+ with open(file) as f:
+ for line in list(f):
+ m = include_regex.match(line)
+ if m is not None:
+ relative = m.groups()[0].rstrip("/")
+ if relative != this_dir:
+ includes.add(relative)
+ return includes
+
+def insert_or_add_mapping(base, deps):
+ global src_map
+ if len(deps) > 0:
+ if base in src_map:
+ existing_deps = src_map[base]
+ existing_deps.update(deps)
+ else:
+ src_map[base] = deps
+
+for (base, dirs, files) in os.walk(inc_dir):
+ dir = os.path.basename(base)
+ relative = os.path.relpath(base, inc_dir)
+ inc_files = filter(lambda x : os.path.splitext(x)[1] in [".h"], files)
+ deps = set()
+ for inc in inc_files:
+ inc_path = os.path.join(base, inc)
+ deps.update(scan_deps(relative, inc_path))
+ insert_or_add_mapping(relative, deps)
+
+for (base, dirs, files) in os.walk(src_dir):
+ dir = os.path.basename(base)
+ relative = os.path.relpath(base, src_dir)
+ src_files = filter(lambda x : os.path.splitext(x)[1] in [".cpp", ".h", ".mm"], files)
+ deps = set()
+ norm_base_path = os.path.normpath(os.path.join("lldb", relative))
+ norm_base_path = norm_base_path.replace("\\", "/")
+ for src in src_files:
+ src_path = os.path.join(base, src)
+ deps.update(scan_deps(norm_base_path, src_path))
+ insert_or_add_mapping(norm_base_path, deps)
+ pass
+
+items = list(src_map.iteritems())
+items.sort(lambda A, B : cmp(A[0], B[0]))
+
+for (path, deps) in items:
+ print path + ":"
+ sorted_deps = list(deps)
+ sorted_deps.sort()
+ for dep in sorted_deps:
+ print "\t" + dep
+pass \ No newline at end of file