1094a4845SMauro Carvalho Chehab#!/usr/bin/env python3
2094a4845SMauro Carvalho Chehab# SPDX-License-Identifier: GPL-2.0
3094a4845SMauro Carvalho Chehab# Copyright(c) 2025: Mauro Carvalho Chehab <mchehab@kernel.org>.
4094a4845SMauro Carvalho Chehab#
5fc973dcdSMauro Carvalho Chehab# pylint: disable=C0103,R0912,R0914,R0915
6fc973dcdSMauro Carvalho Chehab
7fc973dcdSMauro Carvalho Chehab# NOTE: While kernel-doc requires at least version 3.6 to run, the
8fc973dcdSMauro Carvalho Chehab#       command line should work with Python 3.2+ (tested with 3.4).
9fc973dcdSMauro Carvalho Chehab#       The rationale is that it shall fail gracefully during Kernel
10fc973dcdSMauro Carvalho Chehab#       compilation with older Kernel versions. Due to that:
11fc973dcdSMauro Carvalho Chehab#       - encoding line is needed here;
12fc973dcdSMauro Carvalho Chehab#       - no f-strings can be used on this file.
13fc973dcdSMauro Carvalho Chehab#       - the libraries that require newer versions can only be included
14fc973dcdSMauro Carvalho Chehab#         after Python version is checked.
15fc973dcdSMauro Carvalho Chehab
16094a4845SMauro Carvalho Chehab# Converted from the kernel-doc script originally written in Perl
17094a4845SMauro Carvalho Chehab# under GPLv2, copyrighted since 1998 by the following authors:
18094a4845SMauro Carvalho Chehab#
19094a4845SMauro Carvalho Chehab#    Aditya Srivastava <yashsri421@gmail.com>
20094a4845SMauro Carvalho Chehab#    Akira Yokosawa <akiyks@gmail.com>
21094a4845SMauro Carvalho Chehab#    Alexander A. Klimov <grandmaster@al2klimov.de>
22094a4845SMauro Carvalho Chehab#    Alexander Lobakin <aleksander.lobakin@intel.com>
23094a4845SMauro Carvalho Chehab#    André Almeida <andrealmeid@igalia.com>
24094a4845SMauro Carvalho Chehab#    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
25094a4845SMauro Carvalho Chehab#    Anna-Maria Behnsen <anna-maria@linutronix.de>
26094a4845SMauro Carvalho Chehab#    Armin Kuster <akuster@mvista.com>
27094a4845SMauro Carvalho Chehab#    Bart Van Assche <bart.vanassche@sandisk.com>
28094a4845SMauro Carvalho Chehab#    Ben Hutchings <ben@decadent.org.uk>
29094a4845SMauro Carvalho Chehab#    Borislav Petkov <bbpetkov@yahoo.de>
30094a4845SMauro Carvalho Chehab#    Chen-Yu Tsai <wenst@chromium.org>
31094a4845SMauro Carvalho Chehab#    Coco Li <lixiaoyan@google.com>
32094a4845SMauro Carvalho Chehab#    Conchúr Navid <conchur@web.de>
33094a4845SMauro Carvalho Chehab#    Daniel Santos <daniel.santos@pobox.com>
34094a4845SMauro Carvalho Chehab#    Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>
35094a4845SMauro Carvalho Chehab#    Dan Luedtke <mail@danrl.de>
36094a4845SMauro Carvalho Chehab#    Donald Hunter <donald.hunter@gmail.com>
37094a4845SMauro Carvalho Chehab#    Gabriel Krisman Bertazi <krisman@collabora.co.uk>
38094a4845SMauro Carvalho Chehab#    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
39094a4845SMauro Carvalho Chehab#    Harvey Harrison <harvey.harrison@gmail.com>
40094a4845SMauro Carvalho Chehab#    Horia Geanta <horia.geanta@freescale.com>
41094a4845SMauro Carvalho Chehab#    Ilya Dryomov <idryomov@gmail.com>
42094a4845SMauro Carvalho Chehab#    Jakub Kicinski <kuba@kernel.org>
43094a4845SMauro Carvalho Chehab#    Jani Nikula <jani.nikula@intel.com>
44094a4845SMauro Carvalho Chehab#    Jason Baron <jbaron@redhat.com>
45094a4845SMauro Carvalho Chehab#    Jason Gunthorpe <jgg@nvidia.com>
46094a4845SMauro Carvalho Chehab#    Jérémy Bobbio <lunar@debian.org>
47094a4845SMauro Carvalho Chehab#    Johannes Berg <johannes.berg@intel.com>
48094a4845SMauro Carvalho Chehab#    Johannes Weiner <hannes@cmpxchg.org>
49094a4845SMauro Carvalho Chehab#    Jonathan Cameron <Jonathan.Cameron@huawei.com>
50094a4845SMauro Carvalho Chehab#    Jonathan Corbet <corbet@lwn.net>
51094a4845SMauro Carvalho Chehab#    Jonathan Neuschäfer <j.neuschaefer@gmx.net>
52094a4845SMauro Carvalho Chehab#    Kamil Rytarowski <n54@gmx.com>
53094a4845SMauro Carvalho Chehab#    Kees Cook <kees@kernel.org>
54094a4845SMauro Carvalho Chehab#    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
55094a4845SMauro Carvalho Chehab#    Levin, Alexander (Sasha Levin) <alexander.levin@verizon.com>
56094a4845SMauro Carvalho Chehab#    Linus Torvalds <torvalds@linux-foundation.org>
57094a4845SMauro Carvalho Chehab#    Lucas De Marchi <lucas.demarchi@profusion.mobi>
58094a4845SMauro Carvalho Chehab#    Mark Rutland <mark.rutland@arm.com>
59094a4845SMauro Carvalho Chehab#    Markus Heiser <markus.heiser@darmarit.de>
60094a4845SMauro Carvalho Chehab#    Martin Waitz <tali@admingilde.org>
61094a4845SMauro Carvalho Chehab#    Masahiro Yamada <masahiroy@kernel.org>
62094a4845SMauro Carvalho Chehab#    Matthew Wilcox <willy@infradead.org>
63094a4845SMauro Carvalho Chehab#    Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
64094a4845SMauro Carvalho Chehab#    Michal Wajdeczko <michal.wajdeczko@intel.com>
65094a4845SMauro Carvalho Chehab#    Michael Zucchi
66094a4845SMauro Carvalho Chehab#    Mike Rapoport <rppt@linux.ibm.com>
67094a4845SMauro Carvalho Chehab#    Niklas Söderlund <niklas.soderlund@corigine.com>
68094a4845SMauro Carvalho Chehab#    Nishanth Menon <nm@ti.com>
69094a4845SMauro Carvalho Chehab#    Paolo Bonzini <pbonzini@redhat.com>
70094a4845SMauro Carvalho Chehab#    Pavan Kumar Linga <pavan.kumar.linga@intel.com>
71094a4845SMauro Carvalho Chehab#    Pavel Pisa <pisa@cmp.felk.cvut.cz>
72094a4845SMauro Carvalho Chehab#    Peter Maydell <peter.maydell@linaro.org>
73094a4845SMauro Carvalho Chehab#    Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
74094a4845SMauro Carvalho Chehab#    Randy Dunlap <rdunlap@infradead.org>
75094a4845SMauro Carvalho Chehab#    Richard Kennedy <richard@rsk.demon.co.uk>
76094a4845SMauro Carvalho Chehab#    Rich Walker <rw@shadow.org.uk>
77094a4845SMauro Carvalho Chehab#    Rolf Eike Beer <eike-kernel@sf-tec.de>
78094a4845SMauro Carvalho Chehab#    Sakari Ailus <sakari.ailus@linux.intel.com>
79094a4845SMauro Carvalho Chehab#    Silvio Fricke <silvio.fricke@gmail.com>
80094a4845SMauro Carvalho Chehab#    Simon Huggins
81094a4845SMauro Carvalho Chehab#    Tim Waugh <twaugh@redhat.com>
82094a4845SMauro Carvalho Chehab#    Tomasz Warniełło <tomasz.warniello@gmail.com>
83094a4845SMauro Carvalho Chehab#    Utkarsh Tripathi <utripathi2002@gmail.com>
84094a4845SMauro Carvalho Chehab#    valdis.kletnieks@vt.edu <valdis.kletnieks@vt.edu>
85094a4845SMauro Carvalho Chehab#    Vegard Nossum <vegard.nossum@oracle.com>
86094a4845SMauro Carvalho Chehab#    Will Deacon <will.deacon@arm.com>
87094a4845SMauro Carvalho Chehab#    Yacine Belkadi <yacine.belkadi.1@gmail.com>
88094a4845SMauro Carvalho Chehab#    Yujie Liu <yujie.liu@intel.com>
89094a4845SMauro Carvalho Chehab
90094a4845SMauro Carvalho Chehab"""
91094a4845SMauro Carvalho Chehabkernel_doc
92094a4845SMauro Carvalho Chehab==========
93094a4845SMauro Carvalho Chehab
94094a4845SMauro Carvalho ChehabPrint formatted kernel documentation to stdout
95094a4845SMauro Carvalho Chehab
96094a4845SMauro Carvalho ChehabRead C language source or header FILEs, extract embedded
97094a4845SMauro Carvalho Chehabdocumentation comments, and print formatted documentation
98094a4845SMauro Carvalho Chehabto standard output.
99094a4845SMauro Carvalho Chehab
100094a4845SMauro Carvalho ChehabThe documentation comments are identified by the "/**"
101094a4845SMauro Carvalho Chehabopening comment mark.
102094a4845SMauro Carvalho Chehab
103094a4845SMauro Carvalho ChehabSee Documentation/doc-guide/kernel-doc.rst for the
104094a4845SMauro Carvalho Chehabdocumentation comment syntax.
105094a4845SMauro Carvalho Chehab"""
106094a4845SMauro Carvalho Chehab
107094a4845SMauro Carvalho Chehabimport argparse
108094a4845SMauro Carvalho Chehabimport logging
109094a4845SMauro Carvalho Chehabimport os
110094a4845SMauro Carvalho Chehabimport sys
111094a4845SMauro Carvalho Chehab
112e31fd36dSMauro Carvalho Chehab# Import Python modules
113094a4845SMauro Carvalho Chehab
114e31fd36dSMauro Carvalho ChehabLIB_DIR = "lib/kdoc"
115e31fd36dSMauro Carvalho ChehabSRC_DIR = os.path.dirname(os.path.realpath(__file__))
116094a4845SMauro Carvalho Chehab
117e31fd36dSMauro Carvalho Chehabsys.path.insert(0, os.path.join(SRC_DIR, LIB_DIR))
118094a4845SMauro Carvalho Chehab
119094a4845SMauro Carvalho ChehabDESC = """
120094a4845SMauro Carvalho ChehabRead C language source or header FILEs, extract embedded documentation comments,
121094a4845SMauro Carvalho Chehaband print formatted documentation to standard output.
122094a4845SMauro Carvalho Chehab
123094a4845SMauro Carvalho ChehabThe documentation comments are identified by the "/**" opening comment mark.
124094a4845SMauro Carvalho Chehab
125094a4845SMauro Carvalho ChehabSee Documentation/doc-guide/kernel-doc.rst for the documentation comment syntax.
126094a4845SMauro Carvalho Chehab"""
127094a4845SMauro Carvalho Chehab
128094a4845SMauro Carvalho ChehabEXPORT_FILE_DESC = """
129094a4845SMauro Carvalho ChehabSpecify an additional FILE in which to look for EXPORT_SYMBOL information.
130094a4845SMauro Carvalho Chehab
131094a4845SMauro Carvalho ChehabMay be used multiple times.
132094a4845SMauro Carvalho Chehab"""
133094a4845SMauro Carvalho Chehab
134094a4845SMauro Carvalho ChehabEXPORT_DESC = """
135094a4845SMauro Carvalho ChehabOnly output documentation for the symbols that have been
136094a4845SMauro Carvalho Chehabexported using EXPORT_SYMBOL() and related macros in any input
137094a4845SMauro Carvalho ChehabFILE or -export-file FILE.
138094a4845SMauro Carvalho Chehab"""
139094a4845SMauro Carvalho Chehab
140094a4845SMauro Carvalho ChehabINTERNAL_DESC = """
141094a4845SMauro Carvalho ChehabOnly output documentation for the symbols that have NOT been
142094a4845SMauro Carvalho Chehabexported using EXPORT_SYMBOL() and related macros in any input
143094a4845SMauro Carvalho ChehabFILE or -export-file FILE.
144094a4845SMauro Carvalho Chehab"""
145094a4845SMauro Carvalho Chehab
146094a4845SMauro Carvalho ChehabFUNCTION_DESC = """
147094a4845SMauro Carvalho ChehabOnly output documentation for the given function or DOC: section
148094a4845SMauro Carvalho Chehabtitle. All other functions and DOC: sections are ignored.
149094a4845SMauro Carvalho Chehab
150094a4845SMauro Carvalho ChehabMay be used multiple times.
151094a4845SMauro Carvalho Chehab"""
152094a4845SMauro Carvalho Chehab
153094a4845SMauro Carvalho ChehabNOSYMBOL_DESC = """
154094a4845SMauro Carvalho ChehabExclude the specified symbol from the output documentation.
155094a4845SMauro Carvalho Chehab
156094a4845SMauro Carvalho ChehabMay be used multiple times.
157094a4845SMauro Carvalho Chehab"""
158094a4845SMauro Carvalho Chehab
159094a4845SMauro Carvalho ChehabFILES_DESC = """
160094a4845SMauro Carvalho ChehabHeader and C source files to be parsed.
161094a4845SMauro Carvalho Chehab"""
162094a4845SMauro Carvalho Chehab
163094a4845SMauro Carvalho ChehabWARN_CONTENTS_BEFORE_SECTIONS_DESC = """
164094a4845SMauro Carvalho ChehabWarns if there are contents before sections (deprecated).
165094a4845SMauro Carvalho Chehab
166094a4845SMauro Carvalho ChehabThis option is kept just for backward-compatibility, but it does nothing,
167094a4845SMauro Carvalho Chehabneither here nor at the original Perl script.
168094a4845SMauro Carvalho Chehab"""
169094a4845SMauro Carvalho Chehab
170094a4845SMauro Carvalho Chehab
1710a4e2412SMauro Carvalho Chehabclass MsgFormatter(logging.Formatter):
172485f6f79SMauro Carvalho Chehab    """Helper class to format warnings on a similar way to kernel-doc.pl"""
173485f6f79SMauro Carvalho Chehab
1740a4e2412SMauro Carvalho Chehab    def format(self, record):
1750a4e2412SMauro Carvalho Chehab        record.levelname = record.levelname.capitalize()
1760a4e2412SMauro Carvalho Chehab        return logging.Formatter.format(self, record)
1770a4e2412SMauro Carvalho Chehab
178094a4845SMauro Carvalho Chehabdef main():
179094a4845SMauro Carvalho Chehab    """Main program"""
180094a4845SMauro Carvalho Chehab
181094a4845SMauro Carvalho Chehab    parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter,
182094a4845SMauro Carvalho Chehab                                     description=DESC)
183094a4845SMauro Carvalho Chehab
184094a4845SMauro Carvalho Chehab    # Normal arguments
185094a4845SMauro Carvalho Chehab
186094a4845SMauro Carvalho Chehab    parser.add_argument("-v", "-verbose", "--verbose", action="store_true",
187094a4845SMauro Carvalho Chehab                        help="Verbose output, more warnings and other information.")
188094a4845SMauro Carvalho Chehab
189094a4845SMauro Carvalho Chehab    parser.add_argument("-d", "-debug", "--debug", action="store_true",
190094a4845SMauro Carvalho Chehab                        help="Enable debug messages")
191094a4845SMauro Carvalho Chehab
192094a4845SMauro Carvalho Chehab    parser.add_argument("-M", "-modulename", "--modulename",
1932ab867a4SMauro Carvalho Chehab                        default="Kernel API",
194094a4845SMauro Carvalho Chehab                        help="Allow setting a module name at the output.")
195094a4845SMauro Carvalho Chehab
196094a4845SMauro Carvalho Chehab    parser.add_argument("-l", "-enable-lineno", "--enable_lineno",
197094a4845SMauro Carvalho Chehab                        action="store_true",
198094a4845SMauro Carvalho Chehab                        help="Enable line number output (only in ReST mode)")
199094a4845SMauro Carvalho Chehab
200094a4845SMauro Carvalho Chehab    # Arguments to control the warning behavior
201094a4845SMauro Carvalho Chehab
202094a4845SMauro Carvalho Chehab    parser.add_argument("-Wreturn", "--wreturn", action="store_true",
203094a4845SMauro Carvalho Chehab                        help="Warns about the lack of a return markup on functions.")
204094a4845SMauro Carvalho Chehab
205094a4845SMauro Carvalho Chehab    parser.add_argument("-Wshort-desc", "-Wshort-description", "--wshort-desc",
206094a4845SMauro Carvalho Chehab                        action="store_true",
207094a4845SMauro Carvalho Chehab                        help="Warns if initial short description is missing")
208094a4845SMauro Carvalho Chehab
209094a4845SMauro Carvalho Chehab    parser.add_argument("-Wcontents-before-sections",
210094a4845SMauro Carvalho Chehab                        "--wcontents-before-sections", action="store_true",
211094a4845SMauro Carvalho Chehab                        help=WARN_CONTENTS_BEFORE_SECTIONS_DESC)
212094a4845SMauro Carvalho Chehab
213094a4845SMauro Carvalho Chehab    parser.add_argument("-Wall", "--wall", action="store_true",
214094a4845SMauro Carvalho Chehab                        help="Enable all types of warnings")
215094a4845SMauro Carvalho Chehab
216094a4845SMauro Carvalho Chehab    parser.add_argument("-Werror", "--werror", action="store_true",
217094a4845SMauro Carvalho Chehab                        help="Treat warnings as errors.")
218094a4845SMauro Carvalho Chehab
219094a4845SMauro Carvalho Chehab    parser.add_argument("-export-file", "--export-file", action='append',
220094a4845SMauro Carvalho Chehab                        help=EXPORT_FILE_DESC)
221094a4845SMauro Carvalho Chehab
222094a4845SMauro Carvalho Chehab    # Output format mutually-exclusive group
223094a4845SMauro Carvalho Chehab
224094a4845SMauro Carvalho Chehab    out_group = parser.add_argument_group("Output format selection (mutually exclusive)")
225094a4845SMauro Carvalho Chehab
226094a4845SMauro Carvalho Chehab    out_fmt = out_group.add_mutually_exclusive_group()
227094a4845SMauro Carvalho Chehab
228094a4845SMauro Carvalho Chehab    out_fmt.add_argument("-m", "-man", "--man", action="store_true",
229094a4845SMauro Carvalho Chehab                         help="Output troff manual page format.")
230094a4845SMauro Carvalho Chehab    out_fmt.add_argument("-r", "-rst", "--rst", action="store_true",
231094a4845SMauro Carvalho Chehab                         help="Output reStructuredText format (default).")
232094a4845SMauro Carvalho Chehab    out_fmt.add_argument("-N", "-none", "--none", action="store_true",
233094a4845SMauro Carvalho Chehab                         help="Do not output documentation, only warnings.")
234094a4845SMauro Carvalho Chehab
235094a4845SMauro Carvalho Chehab    # Output selection mutually-exclusive group
236094a4845SMauro Carvalho Chehab
237094a4845SMauro Carvalho Chehab    sel_group = parser.add_argument_group("Output selection (mutually exclusive)")
238094a4845SMauro Carvalho Chehab    sel_mut = sel_group.add_mutually_exclusive_group()
239094a4845SMauro Carvalho Chehab
240094a4845SMauro Carvalho Chehab    sel_mut.add_argument("-e", "-export", "--export", action='store_true',
241094a4845SMauro Carvalho Chehab                         help=EXPORT_DESC)
242094a4845SMauro Carvalho Chehab
243094a4845SMauro Carvalho Chehab    sel_mut.add_argument("-i", "-internal", "--internal", action='store_true',
244094a4845SMauro Carvalho Chehab                         help=INTERNAL_DESC)
245094a4845SMauro Carvalho Chehab
246094a4845SMauro Carvalho Chehab    sel_mut.add_argument("-s", "-function", "--symbol", action='append',
247094a4845SMauro Carvalho Chehab                         help=FUNCTION_DESC)
248094a4845SMauro Carvalho Chehab
2490873e554SMauro Carvalho Chehab    # Those are valid for all 3 types of filter
250094a4845SMauro Carvalho Chehab    parser.add_argument("-n", "-nosymbol", "--nosymbol", action='append',
251094a4845SMauro Carvalho Chehab                        help=NOSYMBOL_DESC)
252094a4845SMauro Carvalho Chehab
2530873e554SMauro Carvalho Chehab    parser.add_argument("-D", "-no-doc-sections", "--no-doc-sections",
2540873e554SMauro Carvalho Chehab                        action='store_true', help="Don't outputt DOC sections")
2550873e554SMauro Carvalho Chehab
256094a4845SMauro Carvalho Chehab    parser.add_argument("files", metavar="FILE",
257094a4845SMauro Carvalho Chehab                        nargs="+", help=FILES_DESC)
258094a4845SMauro Carvalho Chehab
259094a4845SMauro Carvalho Chehab    args = parser.parse_args()
260094a4845SMauro Carvalho Chehab
261094a4845SMauro Carvalho Chehab    if args.wall:
262094a4845SMauro Carvalho Chehab        args.wreturn = True
263094a4845SMauro Carvalho Chehab        args.wshort_desc = True
264094a4845SMauro Carvalho Chehab        args.wcontents_before_sections = True
265094a4845SMauro Carvalho Chehab
2660a4e2412SMauro Carvalho Chehab    logger = logging.getLogger()
2670a4e2412SMauro Carvalho Chehab
268094a4845SMauro Carvalho Chehab    if not args.debug:
2690a4e2412SMauro Carvalho Chehab        logger.setLevel(logging.INFO)
270094a4845SMauro Carvalho Chehab    else:
2710a4e2412SMauro Carvalho Chehab        logger.setLevel(logging.DEBUG)
2720a4e2412SMauro Carvalho Chehab
2730a4e2412SMauro Carvalho Chehab    formatter = MsgFormatter('%(levelname)s: %(message)s')
2740a4e2412SMauro Carvalho Chehab
2750a4e2412SMauro Carvalho Chehab    handler = logging.StreamHandler()
2760a4e2412SMauro Carvalho Chehab    handler.setFormatter(formatter)
2770a4e2412SMauro Carvalho Chehab
2780a4e2412SMauro Carvalho Chehab    logger.addHandler(handler)
279094a4845SMauro Carvalho Chehab
2807740f9dbSMauro Carvalho Chehab    python_ver = sys.version_info[:2]
2817740f9dbSMauro Carvalho Chehab    if python_ver < (3,6):
282fc973dcdSMauro Carvalho Chehab        # Depending on Kernel configuration, kernel-doc --none is called at
283fc973dcdSMauro Carvalho Chehab        # build time. As we don't want to break compilation due to the
284fc973dcdSMauro Carvalho Chehab        # usage of an old Python version, return 0 here.
285fc973dcdSMauro Carvalho Chehab        if args.none:
286fc973dcdSMauro Carvalho Chehab            logger.error("Python 3.6 or later is required by kernel-doc. skipping checks")
2877740f9dbSMauro Carvalho Chehab            sys.exit(0)
2887740f9dbSMauro Carvalho Chehab
289fc973dcdSMauro Carvalho Chehab        sys.exit("Python 3.6 or later is required by kernel-doc. Aborting.")
290fc973dcdSMauro Carvalho Chehab
2917740f9dbSMauro Carvalho Chehab    if python_ver < (3,7):
2927740f9dbSMauro Carvalho Chehab        logger.warning("Python 3.7 or later is required for correct results")
2937740f9dbSMauro Carvalho Chehab
294fc973dcdSMauro Carvalho Chehab    # Import kernel-doc libraries only after checking Python version
295fc973dcdSMauro Carvalho Chehab    from kdoc_files import KernelFiles                  # pylint: disable=C0415
296fc973dcdSMauro Carvalho Chehab    from kdoc_output import RestFormat, ManFormat       # pylint: disable=C0415
297fc973dcdSMauro Carvalho Chehab
298094a4845SMauro Carvalho Chehab    if args.man:
2992ab867a4SMauro Carvalho Chehab        out_style = ManFormat(modulename=args.modulename)
300094a4845SMauro Carvalho Chehab    elif args.none:
301094a4845SMauro Carvalho Chehab        out_style = None
302094a4845SMauro Carvalho Chehab    else:
303094a4845SMauro Carvalho Chehab        out_style = RestFormat()
304094a4845SMauro Carvalho Chehab
305799b0d2aSMauro Carvalho Chehab    kfiles = KernelFiles(verbose=args.verbose,
306094a4845SMauro Carvalho Chehab                         out_style=out_style, werror=args.werror,
307094a4845SMauro Carvalho Chehab                         wreturn=args.wreturn, wshort_desc=args.wshort_desc,
3082ab867a4SMauro Carvalho Chehab                         wcontents_before_sections=args.wcontents_before_sections)
309094a4845SMauro Carvalho Chehab
310799b0d2aSMauro Carvalho Chehab    kfiles.parse(args.files, export_file=args.export_file)
311094a4845SMauro Carvalho Chehab
3124fa5e411SMauro Carvalho Chehab    for t in kfiles.msg(enable_lineno=args.enable_lineno, export=args.export,
313094a4845SMauro Carvalho Chehab                        internal=args.internal, symbol=args.symbol,
31416740c29SMauro Carvalho Chehab                        nosymbol=args.nosymbol, export_file=args.export_file,
3150873e554SMauro Carvalho Chehab                        no_doc_sections=args.no_doc_sections):
3164fa5e411SMauro Carvalho Chehab        msg = t[1]
3174fa5e411SMauro Carvalho Chehab        if msg:
3184fa5e411SMauro Carvalho Chehab            print(msg)
319094a4845SMauro Carvalho Chehab
32011afeab6SMauro Carvalho Chehab    error_count = kfiles.errors
32111afeab6SMauro Carvalho Chehab    if not error_count:
32211afeab6SMauro Carvalho Chehab        sys.exit(0)
32311afeab6SMauro Carvalho Chehab
32411afeab6SMauro Carvalho Chehab    if args.werror:
325fc973dcdSMauro Carvalho Chehab        print("%s warnings as errors" % error_count)    # pylint: disable=C0209
32611afeab6SMauro Carvalho Chehab        sys.exit(error_count)
32711afeab6SMauro Carvalho Chehab
32811afeab6SMauro Carvalho Chehab    if args.verbose:
329fc973dcdSMauro Carvalho Chehab        print("%s errors" % error_count)                # pylint: disable=C0209
33011afeab6SMauro Carvalho Chehab
33111afeab6SMauro Carvalho Chehab    if args.none:
33211afeab6SMauro Carvalho Chehab        sys.exit(0)
33311afeab6SMauro Carvalho Chehab
33411afeab6SMauro Carvalho Chehab    sys.exit(error_count)
33511afeab6SMauro Carvalho Chehab
336094a4845SMauro Carvalho Chehab
337094a4845SMauro Carvalho Chehab# Call main method
338094a4845SMauro Carvalho Chehabif __name__ == "__main__":
339094a4845SMauro Carvalho Chehab    main()
340