# Copyright 2018 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Generates an umbrella header for an iOS framework.""" import argparse import datetime import os import re import string HEADER_TEMPLATE = string.Template('''\ // Copyright $year The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // This file is auto-generated by //build/ios/config/generate_umbrella_header.py #ifndef $header_guard #define $header_guard $imports #endif // $header_guard ''') def ComputeHeaderGuard(file_path): """Computes the header guard for a file path. Args: file_path: The path to convert into an header guard. Returns: The header guard string for the file_path. """ return re.sub(r'[.+/\\]', r'_', file_path.upper()) + '_' def WriteUmbrellaHeader(output_path, imported_headers): """Writes the umbrella header. Args: output_path: The path to the umbrella header. imported_headers: A list of headers to #import in the umbrella header. """ year = datetime.date.today().year header_guard = ComputeHeaderGuard(output_path) imports = '\n'.join([ '#import "%s"' % os.path.basename(header) for header in sorted(imported_headers) ]) with open(output_path, 'w') as output_file: output_file.write( HEADER_TEMPLATE.safe_substitute({ 'year': year, 'header_guard': header_guard, 'imports': imports, })) def Main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--output-path', required=True, type=str, help='Path to the generated umbrella header.') parser.add_argument('imported_headers', type=str, nargs='+', help='Headers to #import in the umbrella header.') options = parser.parse_args() return WriteUmbrellaHeader(options.output_path, options.imported_headers) if __name__ == '__main__': Main()