1cde49466SMauro Carvalho Chehab#!/usr/bin/env python3 2cde49466SMauro Carvalho Chehab# SPDX-License-Identifier: GPL-2.0 3cde49466SMauro Carvalho Chehab# Copyright (c) 2016, 2025 by Mauro Carvalho Chehab <mchehab@kernel.org>. 4cde49466SMauro Carvalho Chehab# pylint: disable=C0103 5cde49466SMauro Carvalho Chehab 6cde49466SMauro Carvalho Chehab""" 7cde49466SMauro Carvalho ChehabConvert a C header or source file ``FILE_IN``, into a ReStructured Text 8cde49466SMauro Carvalho Chehabincluded via ..parsed-literal block with cross-references for the 9cde49466SMauro Carvalho Chehabdocumentation files that describe the API. It accepts an optional 10cde49466SMauro Carvalho Chehab``FILE_RULES`` file to describes what elements will be either ignored or 11cde49466SMauro Carvalho Chehabbe pointed to a non-default reference type/name. 12cde49466SMauro Carvalho Chehab 13cde49466SMauro Carvalho ChehabThe output is written at ``FILE_OUT``. 14cde49466SMauro Carvalho Chehab 15cde49466SMauro Carvalho ChehabIt is capable of identifying defines, functions, structs, typedefs, 16cde49466SMauro Carvalho Chehabenums and enum symbols and create cross-references for all of them. 17cde49466SMauro Carvalho ChehabIt is also capable of distinguish #define used for specifying a Linux 18cde49466SMauro Carvalho Chehabioctl. 19cde49466SMauro Carvalho Chehab 20cde49466SMauro Carvalho ChehabThe optional ``FILE_RULES`` contains a set of rules like: 21cde49466SMauro Carvalho Chehab 22cde49466SMauro Carvalho Chehab ignore ioctl VIDIOC_ENUM_FMT 23cde49466SMauro Carvalho Chehab replace ioctl VIDIOC_DQBUF vidioc_qbuf 24cde49466SMauro Carvalho Chehab replace define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ :c:type:`v4l2_event_motion_det` 25cde49466SMauro Carvalho Chehab""" 26cde49466SMauro Carvalho Chehab 27cde49466SMauro Carvalho Chehabimport argparse 28cde49466SMauro Carvalho Chehab 29cde49466SMauro Carvalho Chehabfrom lib.parse_data_structs import ParseDataStructs 30cde49466SMauro Carvalho Chehabfrom lib.enrich_formatter import EnrichFormatter 31cde49466SMauro Carvalho Chehab 32cde49466SMauro Carvalho Chehabdef main(): 33cde49466SMauro Carvalho Chehab """Main function""" 34cde49466SMauro Carvalho Chehab parser = argparse.ArgumentParser(description=__doc__, 35cde49466SMauro Carvalho Chehab formatter_class=EnrichFormatter) 36cde49466SMauro Carvalho Chehab 37cde49466SMauro Carvalho Chehab parser.add_argument("-d", "--debug", action="count", default=0, 38cde49466SMauro Carvalho Chehab help="Increase debug level. Can be used multiple times") 39*242cfe3fSMauro Carvalho Chehab parser.add_argument("-t", "--toc", action="store_true", 40*242cfe3fSMauro Carvalho Chehab help="instead of a literal block, outputs a TOC table at the RST file") 41*242cfe3fSMauro Carvalho Chehab 42cde49466SMauro Carvalho Chehab parser.add_argument("file_in", help="Input C file") 43cde49466SMauro Carvalho Chehab parser.add_argument("file_out", help="Output RST file") 44cde49466SMauro Carvalho Chehab parser.add_argument("file_rules", nargs="?", 45cde49466SMauro Carvalho Chehab help="Exceptions file (optional)") 46cde49466SMauro Carvalho Chehab 47cde49466SMauro Carvalho Chehab args = parser.parse_args() 48cde49466SMauro Carvalho Chehab 49cde49466SMauro Carvalho Chehab parser = ParseDataStructs(debug=args.debug) 50cde49466SMauro Carvalho Chehab parser.parse_file(args.file_in) 51cde49466SMauro Carvalho Chehab 52cde49466SMauro Carvalho Chehab if args.file_rules: 53cde49466SMauro Carvalho Chehab parser.process_exceptions(args.file_rules) 54cde49466SMauro Carvalho Chehab 55cde49466SMauro Carvalho Chehab parser.debug_print() 56*242cfe3fSMauro Carvalho Chehab parser.write_output(args.file_in, args.file_out, args.toc) 57cde49466SMauro Carvalho Chehab 58cde49466SMauro Carvalho Chehab 59cde49466SMauro Carvalho Chehabif __name__ == "__main__": 60cde49466SMauro Carvalho Chehab main() 61