Index: tools/verify_source_deps.py |
diff --git a/tools/verify_source_deps.py b/tools/verify_source_deps.py |
index 7c147c06e038a317b0c476e7d131f2e9eed37db3..b5fa7a846935e54d1e942e1c48c055b7b0501324 100755 |
--- a/tools/verify_source_deps.py |
+++ b/tools/verify_source_deps.py |
@@ -16,18 +16,21 @@ tool won't be accurate for other sources in other directories (e.g. cctest). |
import itertools |
import re |
import os |
+import sys |
V8_BASE = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) |
V8_SRC_BASE = os.path.join(V8_BASE, 'src') |
+V8_TEST_BASE = os.path.join(V8_BASE, 'test') |
V8_INCLUDE_BASE = os.path.join(V8_BASE, 'include') |
GYP_FILES = [ |
os.path.join(V8_BASE, 'src', 'd8.gyp'), |
os.path.join(V8_BASE, 'src', 'v8.gyp'), |
- os.path.join(V8_BASE, 'src', 'inspector', 'inspector.gyp'), |
+ os.path.join(V8_BASE, 'src', 'inspector', 'inspector.gypi'), |
os.path.join(V8_BASE, 'src', 'third_party', 'vtune', 'v8vtune.gyp'), |
os.path.join(V8_BASE, 'test', 'cctest', 'cctest.gyp'), |
+ os.path.join(V8_BASE, 'test', 'fuzzer', 'fuzzer.gyp'), |
os.path.join(V8_BASE, 'test', 'unittests', 'unittests.gyp'), |
os.path.join(V8_BASE, 'tools', 'parser-shell.gyp'), |
] |
@@ -48,25 +51,46 @@ GN_UNSUPPORTED_FEATURES = [ |
'ppc', |
'qnx', |
'solaris', |
- 'valgrind', |
'vtune', |
'x87', |
] |
+ALL_GN_PREFIXES = [ |
+ '..', |
+ os.path.join('src', 'inspector'), |
+ 'src', |
+ os.path.join('test', 'cctest'), |
+ os.path.join('test', 'unittests'), |
+] |
+ |
+ALL_GYP_PREFIXES = [ |
+ '..', |
+ 'common', |
+ os.path.join('src', 'third_party', 'vtune'), |
+ 'src', |
+ os.path.join('test', 'cctest'), |
+ os.path.join('test', 'common'), |
+ os.path.join('test', 'fuzzer'), |
+ os.path.join('test', 'unittests'), |
+] |
-def path_no_prefix(path): |
- for prefix in ['../', 'src/inspector/', 'src/']: |
- if path.startswith(prefix): |
- return path_no_prefix(path[len(prefix):]) |
+def pathsplit(path): |
+ return re.split('[/\\\\]', path) |
+ |
+def path_no_prefix(path, prefixes): |
+ for prefix in prefixes: |
+ if path.startswith(prefix + os.sep): |
+ return path_no_prefix(path[len(prefix) + 1:], prefixes) |
return path |
-def isources(directory): |
+def isources(directory, prefixes): |
for root, dirs, files in os.walk(directory): |
for f in files: |
if not (f.endswith('.h') or f.endswith('.cc')): |
continue |
- yield path_no_prefix(os.path.relpath(os.path.join(root, f), V8_BASE)) |
+ yield path_no_prefix( |
+ os.path.relpath(os.path.join(root, f), V8_BASE), prefixes) |
def iflatten(obj): |
@@ -79,7 +103,7 @@ def iflatten(obj): |
for i in iflatten(value): |
yield i |
elif isinstance(obj, basestring): |
- yield path_no_prefix(obj) |
+ yield path_no_prefix(os.path.join(*pathsplit(obj)), ALL_GYP_PREFIXES) |
def iflatten_gyp_file(gyp_file): |
@@ -100,30 +124,46 @@ def iflatten_gn_file(gn_file): |
for line in f.read().splitlines(): |
match = re.match(r'.*"([^"]*)".*', line) |
if match: |
- yield path_no_prefix(match.group(1)) |
+ yield path_no_prefix( |
+ os.path.join(*pathsplit(match.group(1))), ALL_GN_PREFIXES) |
-def icheck_values(values, *source_dirs): |
+def icheck_values(values, prefixes, *source_dirs): |
for source_file in itertools.chain( |
- *[isources(source_dir) for source_dir in source_dirs] |
+ *[isources(source_dir, prefixes) for source_dir in source_dirs] |
): |
if source_file not in values: |
yield source_file |
-gyp_values = set(itertools.chain( |
- *[iflatten_gyp_file(gyp_file) for gyp_file in GYP_FILES] |
- )) |
+def missing_gyp_files(): |
+ gyp_values = set(itertools.chain( |
+ *[iflatten_gyp_file(gyp_file) for gyp_file in GYP_FILES] |
+ )) |
+ return sorted(icheck_values( |
+ gyp_values, ALL_GYP_PREFIXES, V8_SRC_BASE, V8_INCLUDE_BASE, V8_TEST_BASE)) |
+ |
-print "----------- Files not in gyp: ------------" |
-for i in sorted(icheck_values(gyp_values, V8_SRC_BASE, V8_INCLUDE_BASE)): |
- print i |
+def missing_gn_files(): |
+ gn_values = set(itertools.chain( |
+ *[iflatten_gn_file(gn_file) for gn_file in GN_FILES] |
+ )) |
-gn_values = set(itertools.chain( |
- *[iflatten_gn_file(gn_file) for gn_file in GN_FILES] |
- )) |
+ gn_files = sorted(icheck_values( |
+ gn_values, ALL_GN_PREFIXES, V8_SRC_BASE, V8_INCLUDE_BASE, V8_TEST_BASE)) |
+ return filter( |
+ lambda x: not any(i in x for i in GN_UNSUPPORTED_FEATURES), gn_files) |
-print "\n----------- Files not in gn: -------------" |
-for i in sorted(icheck_values(gn_values, V8_SRC_BASE, V8_INCLUDE_BASE)): |
- if not any(f in i for f in GN_UNSUPPORTED_FEATURES): |
+ |
+def main(): |
+ print "----------- Files not in gyp: ------------" |
+ for i in missing_gyp_files(): |
+ print i |
+ |
+ print "\n----------- Files not in gn: -------------" |
+ for i in missing_gn_files(): |
print i |
+ return 0 |
+ |
+if '__main__' == __name__: |
+ sys.exit(main()) |