diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-02-13 18:33:18 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-02-13 18:33:18 +0000 |
commit | ef7f798c0921cde7e665935a5630578cc1065e0f (patch) | |
tree | cf30aae9ac2c1e83a2384280f8dbbb41e1ff930d /bindings/python/examples/cindex/cindex-includes.py | |
parent | b51abe9b5f76e5d06d348c8ef2d0a7cd9d797b58 (diff) |
cindex/Python: Add TranslationUnit.get_includes, patch by Andrew Sutton!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96106 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings/python/examples/cindex/cindex-includes.py')
-rw-r--r-- | bindings/python/examples/cindex/cindex-includes.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/bindings/python/examples/cindex/cindex-includes.py b/bindings/python/examples/cindex/cindex-includes.py new file mode 100644 index 0000000000..2220552d08 --- /dev/null +++ b/bindings/python/examples/cindex/cindex-includes.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +#===- cindex-includes.py - cindex/Python Inclusion Graph -----*- python -*--===# +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +#===------------------------------------------------------------------------===# + +""" +A simple command line tool for dumping a Graphviz description (dot) that +describes include dependencies. +""" + +def main(): + import sys + from clang.cindex import Index + + # FIXME: Allow the user to pass command line options to clang so that + # we can use -D and -U. + from optparse import OptionParser, OptionGroup + + parser = OptionParser("usage: %prog [options] {filename} [clang-args*]") + parser.disable_interspersed_args() + (opts, args) = parser.parse_args() + if len(args) == 0: + parser.error('invalid number arguments') + + # FIXME: Add an output file option + out = sys.stdout + + input_path = args.pop(0) + + + index = Index.create() + tu = index.parse(input_path, args) + if not tu: + parser.error("unable to load input") + + # A helper function for generating the node name. + def name(f): + return "\"" + f.name + "\"" + + # Generate the include graph + out.write("digraph G {\n") + for i in tu.get_includes(): + line = " "; + if i.is_input_file: + # Always write the input file as a node just in case it doesn't + # actually include anything. This would generate a 1 node graph. + line += name(i.include) + else: + line += name(i.source) + "->" + name(i.include) + line += "\n"; + out.write(line) + out.write("}\n") + +if __name__ == '__main__': + main() + |