| #!/usr/bin/env python3 | |
| # SPDX-License-Identifier: GPL-2.0-or-later | |
| # Copyright (C) 2021, Google Inc. | |
| # | |
| # Author: Paul Elder <paul.elder@ideasonboard.com> | |
| # | |
| # extract-docs.py - Extract doxygen documentation from mojom files | |
| import argparse | |
| import re | |
| import sys | |
| regex_block_start = re.compile('^\/\*\*$') | |
| regex_block_end = re.compile('^ \*\/$') | |
| regex_spdx = re.compile('^\/\* SPDX-License-Identifier: .* \*\/$') | |
| def main(argv): | |
| # Parse command line arguments | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('-o', dest='output', metavar='file', | |
| type=argparse.FileType('w', encoding='utf-8'), | |
| default=sys.stdout, | |
| help='Output file name (default: standard output)') | |
| parser.add_argument('input', type=str, | |
| help='Input file name.') | |
| args = parser.parse_args(argv[1:]) | |
| lines = open(args.input, 'r').readlines() | |
| pipeline = args.input.split('/')[-1].replace('.mojom', '') | |
| if not regex_spdx.match(lines[0]): | |
| raise Exception(f'Missing SPDX license header in {args.input}') | |
| data = lines[0] | |
| data += f'''\ | |
| /* | |
| * Copyright (C) 2021, Google Inc. | |
| * | |
| * {pipeline}_ipa_interface.cpp - Docs file for generated {pipeline}.mojom | |
| * | |
| * This file is auto-generated. Do not edit. | |
| */ | |
| namespace libcamera {{ | |
| ''' | |
| in_block = False | |
| comment = '' | |
| for lineno, line in enumerate(lines, start=1): | |
| if regex_block_start.match(line): | |
| if in_block: | |
| raise SyntaxError('Expected end of comment', | |
| (args.input, lineno, 1, line)) | |
| in_block = True | |
| comment = line | |
| continue | |
| if regex_block_end.match(line): | |
| if in_block: | |
| comment += line | |
| data += comment + '\n' | |
| in_block = False | |
| continue | |
| if in_block: | |
| comment += line | |
| data += '} /* namespace libcamera */\n' | |
| args.output.write(data) | |
| return 0 | |
| if __name__ == '__main__': | |
| sys.exit(main(sys.argv)) |