blob: 45607b7fb7f957706b5c322a6d8a3da2bb4517e5 [file] [log] [blame] [edit]
# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import os
def contains_license_block(source_file):
# This check is somewhat easier than in the engine because all sources need to
# have the same license.
py_license = """# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file."""
c_license = py_license.replace('#', '//')
# Make sure we don't read the entire file into memory.
read_size = (max(len(py_license), len(c_license)))
for lic in [c_license, py_license]:
with open(source_file) as source:
if source.read(read_size).startswith(lic):
return True
return False
def is_source_file(path):
known_extensions = [
'.cc',
'.cpp',
'.c',
'.h',
'.hpp',
'.py',
'.sh',
'.gn',
'.gni',
'.glsl',
'.sl.h',
'.vert',
'.frag',
'.tesc',
'.tese',
'.yaml',
'.dart',
]
for extension in known_extensions:
if os.path.basename(path).endswith(extension):
return True
return False
# Checks that all source files have the same license preamble.
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--source-root', type=str, required=True, help='The source root.'
)
args = parser.parse_args()
assert os.path.exists(args.source_root)
source_files = set()
for root, _, files in os.walk(os.path.abspath(args.source_root)):
for file in files:
file_path = os.path.join(root, file)
if is_source_file(file_path):
source_files.add(file_path)
for source_file in source_files:
if not contains_license_block(source_file):
raise Exception(
'Could not find valid license block in source ', source_file
)
if __name__ == '__main__':
main()