| #!/usr/bin/env python3 |
| # Copyright 2018 The Emscripten Authors. All rights reserved. |
| # Emscripten is available under two separate licenses, the MIT license and the |
| # University of Illinois/NCSA Open Source License. Both these licenses can be |
| # found in the LICENSE file. |
| |
| """Add or verify emscripten license header in source files.""" |
| |
| import sys |
| import os |
| import subprocess |
| |
| script_dir = os.path.dirname(os.path.abspath(__file__)) |
| __rootpath__ = os.path.dirname(script_dir) |
| |
| cpp_license = '''\ |
| // Copyright %s The Emscripten Authors. All rights reserved. |
| // Emscripten is available under two separate licenses, the MIT license and the |
| // University of Illinois/NCSA Open Source License. Both these licenses can be |
| // found in the LICENSE file. |
| ''' |
| |
| py_license = '''\ |
| # Copyright %s The Emscripten Authors. All rights reserved. |
| # Emscripten is available under two separate licenses, the MIT license and the |
| # University of Illinois/NCSA Open Source License. Both these licenses can be |
| # found in the LICENSE file. |
| ''' |
| |
| c_license = '''\ |
| /* |
| * Copyright %s The Emscripten Authors. All rights reserved. |
| * Emscripten is available under two separate licenses, the MIT license and the |
| * University of Illinois/NCSA Open Source License. Both these licenses can be |
| * found in the LICENSE file. |
| */ |
| ''' |
| |
| c_license_base = '''\ |
| /* |
| * Copyright %s The Emscripten Authors. All rights reserved. |
| * Emscripten is available under two separate licenses, the MIT license and the |
| * University of Illinois/NCSA Open Source License. Both these licenses can be |
| * found in the LICENSE file. |
| * |
| ''' |
| |
| exclude_filenames = [ |
| 'system/include/', |
| 'system/lib/libc/musl/', |
| 'system/lib/html5/dom_pk_codes.c', |
| 'system/lib/dlmalloc.c', |
| 'third_party/', |
| 'tests/glbook/', |
| 'tests/optimizer/', |
| 'site/source/_themes/', |
| ] |
| |
| exclude_contents = ['Copyright', 'LICENSE.TXT', 'PUBLIC DOMAIN'] |
| |
| |
| def process_file(filename): |
| if any(filename.startswith(ex) for ex in exclude_filenames): |
| return |
| ext = os.path.splitext(filename)[1] |
| if ext not in ('.py', '.c', '.cpp', '.h', '.js'): |
| return |
| with open(filename) as f: |
| contents = f.read() |
| header = '\n'.join(contents.splitlines()[:30]) |
| if any(ex in header for ex in exclude_contents): |
| return |
| output = subprocess.check_output(['git', 'log', '--pretty=format:%cd', '--date=format:%Y', filename]) |
| year = output.splitlines()[-1].split()[0] |
| print(filename) |
| with open(filename, 'w') as f: |
| if ext == '.py': |
| if contents.startswith('#!'): |
| line1, rest = contents.split('\n', 1) |
| f.write(line1 + '\n') |
| contents = rest |
| f.write(py_license % year) |
| if not contents.startswith('\n'): |
| f.write('\n') |
| elif ext in ('.c', '.h'): |
| f.write(c_license % year) |
| if not contents.startswith('\n'): |
| f.write('\n') |
| elif ext in ('.cpp', '.js'): |
| if contents.startswith('/*\n'): |
| contents = contents[3:] |
| f.write(c_license_base % year) |
| else: |
| f.write(cpp_license % year) |
| if not contents.startswith('\n'): |
| f.write('\n') |
| else: |
| assert False |
| f.write(contents) |
| |
| |
| def main(): |
| os.chdir(__rootpath__) |
| filenames = sys.argv[1:] |
| if not filenames: |
| filenames = subprocess.check_output(['git', 'ls-files']).splitlines() |
| for filename in filenames: |
| process_file(filename) |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |