mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 10:33:28 +00:00
637fb323d9
Some files in runtime/ are UTF-8 encoded, e.g.: runtime/vm/unicode_test.cc Change-Id: Ie71fd46fb66fe793742dbf8a6645b8402956ab77 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/214381 Reviewed-by: Johnni Winther <johnniwinther@google.com>
80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
|
|
# for details. All rights reserved. Use of this source code is governed by a
|
|
# BSD-style license that can be found in the LICENSE file.
|
|
|
|
# Simple tool for verifying that sources from the standalone embedder do not
|
|
# directly include sources from the VM or vice versa.
|
|
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
INCLUDE_DIRECTIVE_RE = re.compile(r'^#include "(.*)"')
|
|
|
|
PLATFORM_LAYER_RE = re.compile(r'^runtime/platform/')
|
|
VM_LAYER_RE = re.compile(r'^runtime/(vm|lib)/')
|
|
BIN_LAYER_RE = re.compile(r'^runtime/bin/')
|
|
|
|
# Tests that don't match the simple case of *_test.cc.
|
|
EXTRA_TEST_FILES = [
|
|
'runtime/bin/run_vm_tests.cc',
|
|
'runtime/bin/ffi_unit_test/run_ffi_unit_tests.cc',
|
|
'runtime/vm/libfuzzer/dart_libfuzzer.cc'
|
|
]
|
|
|
|
|
|
def CheckFile(sdk_root, path):
|
|
includes = set()
|
|
with open(os.path.join(sdk_root, path), encoding='utf-8') as file:
|
|
for line in file:
|
|
m = INCLUDE_DIRECTIVE_RE.match(line)
|
|
if m is not None:
|
|
header = os.path.join('runtime', m.group(1))
|
|
if os.path.isfile(os.path.join(sdk_root, header)):
|
|
includes.add(header)
|
|
|
|
errors = []
|
|
for include in includes:
|
|
if PLATFORM_LAYER_RE.match(path):
|
|
if VM_LAYER_RE.match(include):
|
|
errors.append(
|
|
'LAYERING ERROR: %s must not include %s' % (path, include))
|
|
elif BIN_LAYER_RE.match(include):
|
|
errors.append(
|
|
'LAYERING ERROR: %s must not include %s' % (path, include))
|
|
elif VM_LAYER_RE.match(path):
|
|
if BIN_LAYER_RE.match(include):
|
|
errors.append(
|
|
'LAYERING ERROR: %s must not include %s' % (path, include))
|
|
elif BIN_LAYER_RE.match(path):
|
|
if VM_LAYER_RE.match(include):
|
|
errors.append(
|
|
'LAYERING ERROR: %s must not include %s' % (path, include))
|
|
return errors
|
|
|
|
|
|
def CheckDir(sdk_root, dir):
|
|
errors = []
|
|
for file in os.listdir(dir):
|
|
path = os.path.join(dir, file)
|
|
if os.path.isdir(path):
|
|
errors += CheckDir(sdk_root, path)
|
|
elif path.endswith('test.cc') or path in EXTRA_TEST_FILES:
|
|
None # Tests may violate layering.
|
|
elif path.endswith('.cc') or path.endswith('.h'):
|
|
errors += CheckFile(sdk_root, os.path.relpath(path, sdk_root))
|
|
return errors
|
|
|
|
|
|
def DoCheck(sdk_root):
|
|
return CheckDir(sdk_root, 'runtime')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
errors = DoCheck('.')
|
|
print('\n'.join(errors))
|
|
if errors:
|
|
sys.exit(-1)
|