Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(657)

Side by Side Diff: tools/dev/gen-tags.py

Issue 2762903002: tools: Add a script to generate arch-specific ctags (Closed)
Patch Set: tools: Add a script to generate arch-specific ctags Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2017 the V8 project authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5 """\
6 Convenience script for generating arch-specific ctags file.
7 This script MUST be executed at the top directory.
8
9 Usage:
10 $ tools/dev/gen-tags.py [<arch>...]
11
12 The example usage is as follows:
13 $ tools/dev/gen-tags.py x64
14
15 If no <arch> is given, it generates tags file for all arches:
16 $ tools/dev/gen-tags.py
17 """
18 import os
19 import subprocess
20 import sys
21
22 # All arches that this script understands.
23 ARCHES = ["ia32", "x64", "arm", "arm64", "mips", "mips64", "ppc", "s390", "x87"]
24
25 def PrintHelpAndExit():
26 print(__doc__)
27 sys.exit(0)
28
29
30 def _Call(cmd, silent=False):
31 if not silent: print("# %s" % cmd)
32 return subprocess.call(cmd, shell=True)
33
34
35 def ParseArguments(argv):
36 if not "tools/dev" in argv[0]:
37 PrintHelpAndExit()
38 argv = argv[1:]
39
40 # If no argument is given, then generate ctags for all arches.
41 if len(argv) == 0:
42 return ARCHES
43
44 user_arches = []
45 for argstring in argv:
46 if argstring in ("-h", "--help", "help"):
47 PrintHelpAndExit()
48 if argstring not in ARCHES:
49 print("Invalid argument: %s" % argstring)
50 sys.exit(1)
51 user_arches.append(argstring)
52
53 return user_arches
54
55
56 def Exclude(fullpath, exclude_arches):
57 for arch in exclude_arches:
58 if ("/%s/" % arch) in fullpath: return True
59 return False
60
61
62 def Main(argv):
63 user_arches = []
64
65 user_arches = ParseArguments(argv)
66
67 exclude_arches = list(ARCHES)
68 for user_arch in user_arches:
69 exclude_arches.remove(user_arch)
70
71 paths = ["include", "src", "test"]
72 exts = [".h", ".cc", ".c"]
73
74 gtags_filename = "gtags.files"
75
76 with open(gtags_filename, "w") as gtags:
77 for path in paths:
78 for root, dirs, files in os.walk(path):
79 for file in files:
80 if not file.endswith(tuple(exts)): continue
81 fullpath = os.path.join(root, file)
82 if Exclude(fullpath, exclude_arches): continue
83 gtags.write(fullpath + os.linesep)
84
85 _Call("ctags --fields=+l -L " + gtags_filename)
86
87
88 if __name__ == "__main__":
89 sys.exit(Main(sys.argv))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698