blob: a478ee3f565ec3015e94181a5654346fda61f6cd [file] [log] [blame]
#!/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.
$ tools/dev/ [<arch>...]
The example usage is as follows:
$ tools/dev/ x64
If no <arch> is given, it generates tags file for all arches:
$ tools/dev/
# for py2/py3 compatibility
from __future__ import print_function
import os
import subprocess
import sys
# All arches that this script understands.
ARCHES = ["ia32", "x64", "arm", "arm64", "mips", "mips64", "ppc", "s390"]
def PrintHelpAndExit():
def _Call(cmd, silent=False):
if not silent: print("# %s" % cmd)
return, shell=True)
def ParseArguments(argv):
if not "tools/dev" in argv[0]:
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"):
if argstring not in ARCHES:
print("Invalid argument: %s" % 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:
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__":