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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits