#!/usr/bin/env python # ===----------------------------------------------------------------------===## # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # # ===----------------------------------------------------------------------===## import argparse import sys if __name__ == "__main__": """Converts a header dependency CSV file to Graphviz dot file. The header dependency CSV files are found on the directory libcxx/test/libcxx/transitive_includes """ parser = argparse.ArgumentParser( description="""Converts a libc++ dependency CSV file to a Graphviz dot file. For example: libcxx/utils/graph_header_deps.py libcxx/test/libcxx/transitive_includes/cxx20.csv | dot -Tsvg > graph.svg """, formatter_class=argparse.RawDescriptionHelpFormatter, ) parser.add_argument( "input", default=None, metavar="FILE", help="The header dependency CSV file.", ) options = parser.parse_args() print( """digraph includes { graph [nodesep=0.5, ranksep=1]; node [shape=box, width=4];""" ) with open(options.input, "r") as f: for line in f.readlines(): elements = line.rstrip().split(" ") assert len(elements) == 2 print(f'\t"{elements[0]}" -> "{elements[1]}"') print("}")