OLD | NEW |
(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)) |
OLD | NEW |