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