162306a36Sopenharmony_ci===========================
262306a36Sopenharmony_ciIncluding uAPI header files
362306a36Sopenharmony_ci===========================
462306a36Sopenharmony_ci
562306a36Sopenharmony_ciSometimes, it is useful to include header files and C example codes in
662306a36Sopenharmony_ciorder to describe the userspace API and to generate cross-references
762306a36Sopenharmony_cibetween the code and the documentation. Adding cross-references for
862306a36Sopenharmony_ciuserspace API files has an additional vantage: Sphinx will generate warnings
962306a36Sopenharmony_ciif a symbol is not found at the documentation. That helps to keep the
1062306a36Sopenharmony_ciuAPI documentation in sync with the Kernel changes.
1162306a36Sopenharmony_ciThe :ref:`parse_headers.pl <parse_headers>` provide a way to generate such
1262306a36Sopenharmony_cicross-references. It has to be called via Makefile, while building the
1362306a36Sopenharmony_cidocumentation. Please see ``Documentation/userspace-api/media/Makefile`` for an example
1462306a36Sopenharmony_ciabout how to use it inside the Kernel tree.
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci.. _parse_headers:
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciparse_headers.pl
1962306a36Sopenharmony_ci^^^^^^^^^^^^^^^^
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciNAME
2262306a36Sopenharmony_ci****
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciparse_headers.pl - parse a C file, in order to identify functions, structs,
2662306a36Sopenharmony_cienums and defines and create cross-references to a Sphinx book.
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciSYNOPSIS
3062306a36Sopenharmony_ci********
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci\ **parse_headers.pl**\  [<options>] <C_FILE> <OUT_FILE> [<EXCEPTIONS_FILE>]
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciWhere <options> can be: --debug, --help or --usage.
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciOPTIONS
3962306a36Sopenharmony_ci*******
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci\ **--debug**\
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci Put the script in verbose mode, useful for debugging.
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci\ **--usage**\
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci Prints a brief help message and exits.
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci\ **--help**\
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci Prints a more detailed help message and exits.
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ciDESCRIPTION
6162306a36Sopenharmony_ci***********
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ciConvert a C header or source file (C_FILE), into a ReStructured Text
6562306a36Sopenharmony_ciincluded via ..parsed-literal block with cross-references for the
6662306a36Sopenharmony_cidocumentation files that describe the API. It accepts an optional
6762306a36Sopenharmony_ciEXCEPTIONS_FILE with describes what elements will be either ignored or
6862306a36Sopenharmony_cibe pointed to a non-default reference.
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ciThe output is written at the (OUT_FILE).
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ciIt is capable of identifying defines, functions, structs, typedefs,
7362306a36Sopenharmony_cienums and enum symbols and create cross-references for all of them.
7462306a36Sopenharmony_ciIt is also capable of distinguish #define used for specifying a Linux
7562306a36Sopenharmony_ciioctl.
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ciThe EXCEPTIONS_FILE contain two types of statements: \ **ignore**\  or \ **replace**\ .
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciThe syntax for the ignore tag is:
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciignore \ **type**\  \ **name**\
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ciThe \ **ignore**\  means that it won't generate cross references for a
8562306a36Sopenharmony_ci\ **name**\  symbol of type \ **type**\ .
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ciThe syntax for the replace tag is:
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cireplace \ **type**\  \ **name**\  \ **new_value**\
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ciThe \ **replace**\  means that it will generate cross references for a
9362306a36Sopenharmony_ci\ **name**\  symbol of type \ **type**\ , but, instead of using the default
9462306a36Sopenharmony_cireplacement rule, it will use \ **new_value**\ .
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ciFor both statements, \ **type**\  can be either one of the following:
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci\ **ioctl**\
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci The ignore or replace statement will apply to ioctl definitions like:
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci #define	VIDIOC_DBG_S_REGISTER 	 _IOW('V', 79, struct v4l2_dbg_register)
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci\ **define**\
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci The ignore or replace statement will apply to any other #define found
11062306a36Sopenharmony_ci at C_FILE.
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci\ **typedef**\
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci The ignore or replace statement will apply to typedef statements at C_FILE.
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci\ **struct**\
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci The ignore or replace statement will apply to the name of struct statements
12362306a36Sopenharmony_ci at C_FILE.
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci\ **enum**\
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci The ignore or replace statement will apply to the name of enum statements
13062306a36Sopenharmony_ci at C_FILE.
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci\ **symbol**\
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci The ignore or replace statement will apply to the name of enum value
13762306a36Sopenharmony_ci at C_FILE.
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci For replace statements, \ **new_value**\  will automatically use :c:type:
14062306a36Sopenharmony_ci references for \ **typedef**\ , \ **enum**\  and \ **struct**\  types. It will use :ref:
14162306a36Sopenharmony_ci for \ **ioctl**\ , \ **define**\  and \ **symbol**\  types. The type of reference can
14262306a36Sopenharmony_ci also be explicitly defined at the replace statement.
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ciEXAMPLES
14762306a36Sopenharmony_ci********
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ciignore define _VIDEODEV2_H
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ciIgnore a #define _VIDEODEV2_H at the C_FILE.
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ciignore symbol PRIVATE
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_ciOn a struct like:
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_cienum foo { BAR1, BAR2, PRIVATE };
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ciIt won't generate cross-references for \ **PRIVATE**\ .
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_cireplace symbol BAR1 :c:type:\`foo\`
16562306a36Sopenharmony_cireplace symbol BAR2 :c:type:\`foo\`
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ciOn a struct like:
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_cienum foo { BAR1, BAR2, PRIVATE };
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ciIt will make the BAR1 and BAR2 enum symbols to cross reference the foo
17362306a36Sopenharmony_cisymbol at the C domain.
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ciBUGS
17762306a36Sopenharmony_ci****
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ciReport bugs to Mauro Carvalho Chehab <mchehab@kernel.org>
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ciCOPYRIGHT
18462306a36Sopenharmony_ci*********
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ciCopyright (c) 2016 by Mauro Carvalho Chehab <mchehab+samsung@kernel.org>.
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ciLicense GPLv2: GNU GPL version 2 <https://gnu.org/licenses/gpl.html>.
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ciThis is free software: you are free to change and redistribute it.
19262306a36Sopenharmony_ciThere is NO WARRANTY, to the extent permitted by law.
193