|  | # Copyright 2018 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. | 
|  |  | 
|  | """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. All rights reserved. | 
|  | // 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() |