#!/usr/bin/env python # Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Create files with copyright boilerplate and header include guards. Usage: tools/boilerplate.py path/to/file.{h,cc} """ from datetime import date import os import os.path import sys LINES = [ 'Copyright %d The Chromium Authors. All rights reserved.' % date.today().year, 'Use of this source code is governed by a BSD-style license that can be', 'found in the LICENSE file.' ] EXTENSIONS_TO_COMMENTS = { 'h': '//', 'cc': '//', 'mm': '//', 'js': '//', 'py': '#', 'gn': '#', 'gni': '#', } def _GetHeader(filename): _, ext = os.path.splitext(filename) ext = ext[1:] comment = EXTENSIONS_TO_COMMENTS[ext] + ' ' return '\n'.join([comment + line for line in LINES]) def _CppHeader(filename): guard = filename.replace('/', '_').replace('.', '_').upper() + '_' return '\n'.join([ '', '#ifndef ' + guard, '#define ' + guard, '', '#endif // ' + guard, '' ]) def _CppImplementation(filename): base, _ = os.path.splitext(filename) include = '#include "' + base + '.h"' return '\n'.join(['', include]) def _ObjCppImplementation(filename): base, _ = os.path.splitext(filename) include = '#import "' + base + '.h"' return '\n'.join(['', include]) def _CreateFile(filename): contents = _GetHeader(filename) + '\n' if filename.endswith('.h'): contents += _CppHeader(filename) elif filename.endswith('.cc'): contents += _CppImplementation(filename) elif filename.endswith('.mm'): contents += _ObjCppImplementation(filename) fd = open(filename, 'w') fd.write(contents) fd.close() def Main(): files = sys.argv[1:] if len(files) < 1: print >> sys.stderr, 'Usage: boilerplate.py path/to/file.h path/to/file.cc' return 1 # Perform checks first so that the entire operation is atomic. for f in files: _, ext = os.path.splitext(f) if not ext[1:] in EXTENSIONS_TO_COMMENTS: print >> sys.stderr, 'Unknown file type for %s' % f return 2 if os.path.exists(f): print >> sys.stderr, 'A file at path %s already exists' % f return 2 for f in files: _CreateFile(f) if __name__ == '__main__': sys.exit(Main())