Index: tools/dev/gen-tags.py |
diff --git a/tools/dev/gen-tags.py b/tools/dev/gen-tags.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..4e0e98c8d46cc3e13544a9d22d90ea6846c6f678 |
--- /dev/null |
+++ b/tools/dev/gen-tags.py |
@@ -0,0 +1,89 @@ |
+#!/usr/bin/env python |
+# Copyright 2017 the V8 project authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+"""\ |
+Convenience script for generating arch-specific ctags file. |
+This script MUST be executed at the top directory. |
+ |
+Usage: |
+ $ tools/dev/gen-tags.py [<arch>...] |
+ |
+The example usage is as follows: |
+ $ tools/dev/gen-tags.py x64 |
+ |
+If no <arch> is given, it generates tags file for all arches: |
+ $ tools/dev/gen-tags.py |
+""" |
+import os |
+import subprocess |
+import sys |
+ |
+# All arches that this script understands. |
+ARCHES = ["ia32", "x64", "arm", "arm64", "mips", "mips64", "ppc", "s390", "x87"] |
+ |
+def PrintHelpAndExit(): |
+ print(__doc__) |
+ sys.exit(0) |
+ |
+ |
+def _Call(cmd, silent=False): |
+ if not silent: print("# %s" % cmd) |
+ return subprocess.call(cmd, shell=True) |
+ |
+ |
+def ParseArguments(argv): |
+ if not "tools/dev" in argv[0]: |
+ PrintHelpAndExit() |
+ argv = argv[1:] |
+ |
+ # If no argument is given, then generate ctags for all arches. |
+ if len(argv) == 0: |
+ return ARCHES |
+ |
+ user_arches = [] |
+ for argstring in argv: |
+ if argstring in ("-h", "--help", "help"): |
+ PrintHelpAndExit() |
+ if argstring not in ARCHES: |
+ print("Invalid argument: %s" % argstring) |
+ sys.exit(1) |
+ user_arches.append(argstring) |
+ |
+ return user_arches |
+ |
+ |
+def Exclude(fullpath, exclude_arches): |
+ for arch in exclude_arches: |
+ if ("/%s/" % arch) in fullpath: return True |
+ return False |
+ |
+ |
+def Main(argv): |
+ user_arches = [] |
+ |
+ user_arches = ParseArguments(argv) |
+ |
+ exclude_arches = list(ARCHES) |
+ for user_arch in user_arches: |
+ exclude_arches.remove(user_arch) |
+ |
+ paths = ["include", "src", "test"] |
+ exts = [".h", ".cc", ".c"] |
+ |
+ gtags_filename = "gtags.files" |
+ |
+ with open(gtags_filename, "w") as gtags: |
+ for path in paths: |
+ for root, dirs, files in os.walk(path): |
+ for file in files: |
+ if not file.endswith(tuple(exts)): continue |
+ fullpath = os.path.join(root, file) |
+ if Exclude(fullpath, exclude_arches): continue |
+ gtags.write(fullpath + os.linesep) |
+ |
+ _Call("ctags --fields=+l -L " + gtags_filename) |
+ |
+ |
+if __name__ == "__main__": |
+ sys.exit(Main(sys.argv)) |