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