1#! /usr/bin/python2 2import os.path 3import sys 4import shlex 5import re 6 7from headerutils import * 8 9 10 11usage = False 12src = list() 13flist = { } 14process_h = False 15process_c = False 16verbose = False 17level = 0 18match_all = False 19num_match = 1 20 21file_list = list() 22current = True 23deeper = True 24scanfiles = True 25for x in sys.argv[1:]: 26 if x[0:2] == "-h": 27 usage = True 28 elif x[0:2] == "-i": 29 process_h = True 30 elif x[0:2] == "-s" or x[0:2] == "-c": 31 process_c = True 32 elif x[0:2] == "-v": 33 verbose = True 34 elif x[0:2] == "-a": 35 match_all = True 36 elif x[0:2] == "-n": 37 num_match = int(x[2:]) 38 elif x[0:2] == "-1": 39 deeper = False 40 elif x[0:2] == "-2": 41 current = False 42 elif x[0:2] == "-f": 43 file_list = open (x[2:]).read().splitlines() 44 scanfiles = False 45 elif x[0] == "-": 46 print "Error: Unknown option " + x 47 usage = True 48 else: 49 src.append (x) 50 51if match_all: 52 num_match = len (src) 53 54if not process_h and not process_c: 55 process_h = True 56 process_c = True 57 58if len(src) == 0: 59 usage = True 60 61if not usage: 62 if scanfiles: 63 if process_h: 64 file_list = find_gcc_files ("\*.h", current, deeper) 65 if process_c: 66 file_list = file_list + find_gcc_files ("\*.c", current, deeper) 67 file_list = file_list + find_gcc_files ("\*.cc", current, deeper) 68 else: 69 newlist = list() 70 for x in file_list: 71 if process_h and x[-2:] == ".h": 72 newlist.append (x) 73 elif process_c and (x[-2:] == ".c" or x[-3:] == ".cc"): 74 newlist.append (x) 75 file_list = newlist; 76 77 file_list.sort() 78 for fn in file_list: 79 found = find_unique_include_list (fn) 80 careabout = list() 81 output = "" 82 for inc in found: 83 if inc in src: 84 careabout.append (inc) 85 if output == "": 86 output = fn 87 if verbose: 88 output = output + " [" + inc +"]" 89 if len (careabout) < num_match: 90 output = "" 91 if output != "": 92 print output 93else: 94 print "included-by [-h] [-i] [-c] [-v] [-a] [-nx] file1 [file2] ... [filen]" 95 print "find the list of all files in subdirectories that include any of " 96 print "the listed files. processed to a depth of 3 subdirs" 97 print " -h : Show this message" 98 print " -i : process only header files (*.h) for #include" 99 print " -c : process only source files (*.c *.cc) for #include" 100 print " If nothing is specified, defaults to -i -c" 101 print " -s : Same as -c." 102 print " -v : Show which include(s) were found" 103 print " -nx : Only list files which have at least x different matches. Default = 1" 104 print " -a : Show only files which all listed files are included" 105 print " This is equivilent to -nT where T == # of items in list" 106 print " -flistfile : Show only files contained in the list of files" 107 108 109 110 111 112 113