[Lldb-commits] [lldb] r296920 - Add a script to dump out all project inter-dependencies.

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Fri Mar 3 14:40:46 PST 2017


Author: zturner
Date: Fri Mar  3 16:40:46 2017
New Revision: 296920

URL: http://llvm.org/viewvc/llvm-project?rev=296920&view=rev
Log:
Add a script to dump out all project inter-dependencies.

Added:
    lldb/trunk/scripts/analyze-project-deps.py

Added: lldb/trunk/scripts/analyze-project-deps.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/analyze-project-deps.py?rev=296920&view=auto
==============================================================================
--- lldb/trunk/scripts/analyze-project-deps.py (added)
+++ lldb/trunk/scripts/analyze-project-deps.py Fri Mar  3 16:40:46 2017
@@ -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




More information about the lldb-commits mailing list