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