1037e7968Spatrick#!/usr/bin/env python 2037e7968Spatrick# ===----------------------------------------------------------------------===## 3037e7968Spatrick# 4037e7968Spatrick# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5037e7968Spatrick# See https://llvm.org/LICENSE.txt for license information. 6037e7968Spatrick# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7037e7968Spatrick# 8037e7968Spatrick# ===----------------------------------------------------------------------===## 9037e7968Spatrick 1076d0caaeSpatrickimport argparse 1176d0caaeSpatrickimport sys 12037e7968Spatrick 13*4bdff4beSrobertif __name__ == "__main__": 14*4bdff4beSrobert """Converts a header dependency CSV file to Graphviz dot file. 15037e7968Spatrick 16*4bdff4beSrobert The header dependency CSV files are found on the directory 17*4bdff4beSrobert libcxx/test/libcxx/transitive_includes 18*4bdff4beSrobert """ 19037e7968Spatrick 2076d0caaeSpatrick parser = argparse.ArgumentParser( 21*4bdff4beSrobert description="""Converts a libc++ dependency CSV file to a Graphviz dot file. 22*4bdff4beSrobertFor example: 23*4bdff4beSrobert libcxx/utils/graph_header_deps.py libcxx/test/libcxx/transitive_includes/cxx20.csv | dot -Tsvg > graph.svg 24*4bdff4beSrobert""", 2576d0caaeSpatrick formatter_class=argparse.RawDescriptionHelpFormatter, 2676d0caaeSpatrick ) 27*4bdff4beSrobert parser.add_argument( 28*4bdff4beSrobert "input", 29*4bdff4beSrobert default=None, 30*4bdff4beSrobert metavar="FILE", 31*4bdff4beSrobert help="The header dependency CSV file.", 32*4bdff4beSrobert ) 3376d0caaeSpatrick options = parser.parse_args() 3476d0caaeSpatrick 35*4bdff4beSrobert print( 36*4bdff4beSrobert """digraph includes { 37*4bdff4beSrobertgraph [nodesep=0.5, ranksep=1]; 38*4bdff4beSrobertnode [shape=box, width=4];""" 39*4bdff4beSrobert ) 40*4bdff4beSrobert with open(options.input, "r") as f: 41*4bdff4beSrobert for line in f.readlines(): 42*4bdff4beSrobert elements = line.rstrip().split(" ") 43*4bdff4beSrobert assert len(elements) == 2 4476d0caaeSpatrick 45*4bdff4beSrobert print(f'\t"{elements[0]}" -> "{elements[1]}"') 4676d0caaeSpatrick 47*4bdff4beSrobert print("}") 48