xref: /netbsd-src/external/gpl3/gcc.old/dist/contrib/header-tools/included-by (revision 36ac495d2b3ea2b9d96377b2143ebfedac224b92)
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