comparison python/make-targets.py @ 343:71345f4de3ce

programs to list make targets
author Jeff Hammel <jhammel@mozilla.com>
date Sun, 23 Jun 2013 12:54:11 -0700
parents
children
comparison
equal deleted inserted replaced
342:481b55fc4b96 343:71345f4de3ce
1 #!/usr/bin/python
2
3 """
4 list the targets for a makefile
5 """
6
7 import argparse
8 import subprocess
9 import sys
10
11 call = subprocess.check_output
12
13 def main(args=sys.argv[1:]):
14
15 ignore = ['%', '.', '(', '/']
16
17 parser = argparse.ArgumentParser()
18 parser.add_argument("-a", "--all", action="store_true",
19 help="show all matches")
20 parser.add_argument("--origin", action="store_true",
21 help="show original line")
22 args = parser.parse_args(args)
23
24 if args.all:
25 ignore = []
26
27 line_dict = {}
28 names = []
29 output = call(["make", "-pn"]).strip()
30 for index, line in enumerate(output.splitlines()):
31 _orig = line
32 line = line.strip()
33 if not line:
34 continue
35 if line.startswith('#'):
36 continue
37 if ':' not in line:
38 continue
39 name, rhs = line.split(':', 1)
40 if rhs and rhs[0] == '=':
41 continue
42 name = name.strip()
43 if '=' in name or not name:
44 continue
45
46 # ignore thingies
47 if name.startswith(tuple(ignore)):
48 continue
49
50 names.append(name)
51 line_dict.setdefault(name, (index, _orig))
52
53 names = list(set(names))
54 names.sort()
55 if args.origin:
56 for name in names:
57 index, line = line_dict[name]
58 print '%s: `%s`:%d' % (name, line, index+1)
59 return
60 print '\n'.join(names)
61
62 if __name__ == '__main__':
63 main()