| # 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() |