#!/usr/bin/python

import lldb
import shlex

def dump_module_sources(module, result):
    if module:
        print >> result, "Module: %s" % (module.file)
        for compile_unit in module.compile_units:
            if compile_unit.file:
                print >> result, "  %s" % (compile_unit.file)
    
def info_sources(debugger, command, result, dict):
    description='''This command will dump all compile units in any modules that are listed as arguments, or for all modules if no arguments are supplied.'''
    module_names = shlex.split(command)
    target = debugger.GetSelectedTarget()
    if module_names:
        for module_name in module_names:
            dump_module_sources(target.module[module_name], result)
    else:
        for module in target.modules:
            dump_module_sources(module, result)
        
        
def __lldb_init_module (debugger, dict):
    # Add any commands contained in this module to LLDB
    debugger.HandleCommand('command script add -f sources.info_sources info_sources')
    print 'The "info_sources" command has been installed, type "help info_sources" or "info_sources --help" for detailed help.'
