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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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))
« 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