18c2ecf20Sopenharmony_ci===========================
28c2ecf20Sopenharmony_ciIncluding uAPI header files
38c2ecf20Sopenharmony_ci===========================
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ciSometimes, it is useful to include header files and C example codes in
68c2ecf20Sopenharmony_ciorder to describe the userspace API and to generate cross-references
78c2ecf20Sopenharmony_cibetween the code and the documentation. Adding cross-references for
88c2ecf20Sopenharmony_ciuserspace API files has an additional vantage: Sphinx will generate warnings
98c2ecf20Sopenharmony_ciif a symbol is not found at the documentation. That helps to keep the
108c2ecf20Sopenharmony_ciuAPI documentation in sync with the Kernel changes.
118c2ecf20Sopenharmony_ciThe :ref:`parse_headers.pl <parse_headers>` provide a way to generate such
128c2ecf20Sopenharmony_cicross-references. It has to be called via Makefile, while building the
138c2ecf20Sopenharmony_cidocumentation. Please see ``Documentation/userspace-api/media/Makefile`` for an example
148c2ecf20Sopenharmony_ciabout how to use it inside the Kernel tree.
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci.. _parse_headers:
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ciparse_headers.pl
198c2ecf20Sopenharmony_ci^^^^^^^^^^^^^^^^
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ciNAME
228c2ecf20Sopenharmony_ci****
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ciparse_headers.pl - parse a C file, in order to identify functions, structs,
268c2ecf20Sopenharmony_cienums and defines and create cross-references to a Sphinx book.
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ciSYNOPSIS
308c2ecf20Sopenharmony_ci********
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci\ **parse_headers.pl**\  [<options>] <C_FILE> <OUT_FILE> [<EXCEPTIONS_FILE>]
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ciWhere <options> can be: --debug, --help or --usage.
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ciOPTIONS
398c2ecf20Sopenharmony_ci*******
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci\ **--debug**\
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci Put the script in verbose mode, useful for debugging.
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci\ **--usage**\
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci Prints a brief help message and exits.
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci\ **--help**\
568c2ecf20Sopenharmony_ci
578c2ecf20Sopenharmony_ci Prints a more detailed help message and exits.
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ciDESCRIPTION
618c2ecf20Sopenharmony_ci***********
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ciConvert a C header or source file (C_FILE), into a ReStructured Text
658c2ecf20Sopenharmony_ciincluded via ..parsed-literal block with cross-references for the
668c2ecf20Sopenharmony_cidocumentation files that describe the API. It accepts an optional
678c2ecf20Sopenharmony_ciEXCEPTIONS_FILE with describes what elements will be either ignored or
688c2ecf20Sopenharmony_cibe pointed to a non-default reference.
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ciThe output is written at the (OUT_FILE).
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ciIt is capable of identifying defines, functions, structs, typedefs,
738c2ecf20Sopenharmony_cienums and enum symbols and create cross-references for all of them.
748c2ecf20Sopenharmony_ciIt is also capable of distinguish #define used for specifying a Linux
758c2ecf20Sopenharmony_ciioctl.
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ciThe EXCEPTIONS_FILE contain two types of statements: \ **ignore**\  or \ **replace**\ .
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ciThe syntax for the ignore tag is:
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ciignore \ **type**\  \ **name**\
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ciThe \ **ignore**\  means that it won't generate cross references for a
858c2ecf20Sopenharmony_ci\ **name**\  symbol of type \ **type**\ .
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ciThe syntax for the replace tag is:
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_cireplace \ **type**\  \ **name**\  \ **new_value**\
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ciThe \ **replace**\  means that it will generate cross references for a
938c2ecf20Sopenharmony_ci\ **name**\  symbol of type \ **type**\ , but, instead of using the default
948c2ecf20Sopenharmony_cireplacement rule, it will use \ **new_value**\ .
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ciFor both statements, \ **type**\  can be either one of the following:
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_ci\ **ioctl**\
1008c2ecf20Sopenharmony_ci
1018c2ecf20Sopenharmony_ci The ignore or replace statement will apply to ioctl definitions like:
1028c2ecf20Sopenharmony_ci
1038c2ecf20Sopenharmony_ci #define	VIDIOC_DBG_S_REGISTER 	 _IOW('V', 79, struct v4l2_dbg_register)
1048c2ecf20Sopenharmony_ci
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci
1078c2ecf20Sopenharmony_ci\ **define**\
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci The ignore or replace statement will apply to any other #define found
1108c2ecf20Sopenharmony_ci at C_FILE.
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci\ **typedef**\
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ci The ignore or replace statement will apply to typedef statements at C_FILE.
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci\ **struct**\
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ci The ignore or replace statement will apply to the name of struct statements
1238c2ecf20Sopenharmony_ci at C_FILE.
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ci
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ci\ **enum**\
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci The ignore or replace statement will apply to the name of enum statements
1308c2ecf20Sopenharmony_ci at C_FILE.
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ci
1338c2ecf20Sopenharmony_ci
1348c2ecf20Sopenharmony_ci\ **symbol**\
1358c2ecf20Sopenharmony_ci
1368c2ecf20Sopenharmony_ci The ignore or replace statement will apply to the name of enum value
1378c2ecf20Sopenharmony_ci at C_FILE.
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci For replace statements, \ **new_value**\  will automatically use :c:type:
1408c2ecf20Sopenharmony_ci references for \ **typedef**\ , \ **enum**\  and \ **struct**\  types. It will use :ref:
1418c2ecf20Sopenharmony_ci for \ **ioctl**\ , \ **define**\  and \ **symbol**\  types. The type of reference can
1428c2ecf20Sopenharmony_ci also be explicitly defined at the replace statement.
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ci
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_ciEXAMPLES
1478c2ecf20Sopenharmony_ci********
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ci
1508c2ecf20Sopenharmony_ciignore define _VIDEODEV2_H
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ciIgnore a #define _VIDEODEV2_H at the C_FILE.
1548c2ecf20Sopenharmony_ci
1558c2ecf20Sopenharmony_ciignore symbol PRIVATE
1568c2ecf20Sopenharmony_ci
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ciOn a struct like:
1598c2ecf20Sopenharmony_ci
1608c2ecf20Sopenharmony_cienum foo { BAR1, BAR2, PRIVATE };
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_ciIt won't generate cross-references for \ **PRIVATE**\ .
1638c2ecf20Sopenharmony_ci
1648c2ecf20Sopenharmony_cireplace symbol BAR1 :c:type:\`foo\`
1658c2ecf20Sopenharmony_cireplace symbol BAR2 :c:type:\`foo\`
1668c2ecf20Sopenharmony_ci
1678c2ecf20Sopenharmony_ci
1688c2ecf20Sopenharmony_ciOn a struct like:
1698c2ecf20Sopenharmony_ci
1708c2ecf20Sopenharmony_cienum foo { BAR1, BAR2, PRIVATE };
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ciIt will make the BAR1 and BAR2 enum symbols to cross reference the foo
1738c2ecf20Sopenharmony_cisymbol at the C domain.
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_ci
1768c2ecf20Sopenharmony_ciBUGS
1778c2ecf20Sopenharmony_ci****
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci
1808c2ecf20Sopenharmony_ciReport bugs to Mauro Carvalho Chehab <mchehab@kernel.org>
1818c2ecf20Sopenharmony_ci
1828c2ecf20Sopenharmony_ci
1838c2ecf20Sopenharmony_ciCOPYRIGHT
1848c2ecf20Sopenharmony_ci*********
1858c2ecf20Sopenharmony_ci
1868c2ecf20Sopenharmony_ci
1878c2ecf20Sopenharmony_ciCopyright (c) 2016 by Mauro Carvalho Chehab <mchehab+samsung@kernel.org>.
1888c2ecf20Sopenharmony_ci
1898c2ecf20Sopenharmony_ciLicense GPLv2: GNU GPL version 2 <https://gnu.org/licenses/gpl.html>.
1908c2ecf20Sopenharmony_ci
1918c2ecf20Sopenharmony_ciThis is free software: you are free to change and redistribute it.
1928c2ecf20Sopenharmony_ciThere is NO WARRANTY, to the extent permitted by law.
193