Qfsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget+/translations/zh_CN/doc-guide/parse-headersmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hIncluding uAPI header filesh]hIncluding uAPI header files}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhE/var/lib/git/docbuild/linux/Documentation/doc-guide/parse-headers.rsthKubh paragraph)}(hXSometimes, it is useful to include header files and C example codes in order to describe the userspace API and to generate cross-references between the code and the documentation. Adding cross-references for userspace API files has an additional vantage: Sphinx will generate warnings if a symbol is not found at the documentation. That helps to keep the uAPI documentation in sync with the Kernel changes. The :ref:`parse_headers.pl ` provide a way to generate such cross-references. It has to be called via Makefile, while building the documentation. Please see ``Documentation/userspace-api/media/Makefile`` for an example about how to use it inside the Kernel tree.h](hXSometimes, it is useful to include header files and C example codes in order to describe the userspace API and to generate cross-references between the code and the documentation. Adding cross-references for userspace API files has an additional vantage: Sphinx will generate warnings if a symbol is not found at the documentation. That helps to keep the uAPI documentation in sync with the Kernel changes. The }(hhhhhNhNubh)}(h':ref:`parse_headers.pl `h]hinline)}(hhh]hparse_headers.pl}(hhhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdocdoc-guide/parse-headers refdomainhҌreftyperef refexplicitrefwarn reftarget parse_headersuh1hhhhKhhubh provide a way to generate such cross-references. It has to be called via Makefile, while building the documentation. Please see }(hhhhhNhNubhliteral)}(h.``Documentation/userspace-api/media/Makefile``h]h*Documentation/userspace-api/media/Makefile}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh; for an example about how to use it inside the Kernel tree.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubhtarget)}(h.. _parse_headers:h]h}(h]h ]h"]h$]h&]refid parse-headersuh1jhKhhhhhhubh)}(hhh](h)}(hparse_headers.plh]hparse_headers.pl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hNAMEh]hNAME}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhKubh)}(hparse_headers.pl - parse a C file, in order to identify functions, structs, enums and defines and create cross-references to a Sphinx book.h]hparse_headers.pl - parse a C file, in order to identify functions, structs, enums and defines and create cross-references to a Sphinx book.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj#hhubeh}(h]nameah ]h"]nameah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hSYNOPSISh]hSYNOPSIS}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhhhhhKubh)}(hL\ **parse_headers.pl**\ [] []h](h }(hj[hhhNhNubhstrong)}(h**parse_headers.pl**h]hparse_headers.pl}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jchj[ubh6 [] []}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK!hjJhhubh)}(h3Where can be: --debug, --help or --usage.h]h3Where can be: --debug, --help or --usage.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjJhhubeh}(h]synopsisah ]h"]synopsisah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hOPTIONSh]hOPTIONS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK'ubh)}(h\ **--debug**\h](h }(hjhhhNhNubjd)}(h **--debug**h]h--debug}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubh block_quote)}(h8Put the script in verbose mode, useful for debugging. h]h)}(h5Put the script in verbose mode, useful for debugging.h]h5Put the script in verbose mode, useful for debugging.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjubah}(h]h ]h"]h$]h&]uh1jhhhK-hjhhubh)}(h\ **--usage**\h](h }(hjhhhNhNubjd)}(h **--usage**h]h--usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK1hjhhubj)}(h)Prints a brief help message and exits. h]h)}(h&Prints a brief help message and exits.h]h&Prints a brief help message and exits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhhhK3hjhhubh)}(h \ **--help**\h](h }(hjhhhNhNubjd)}(h **--help**h]h--help}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubj)}(h0Prints a more detailed help message and exits. h]h)}(h.Prints a more detailed help message and exits.h]h.Prints a more detailed help message and exits.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hj6ubah}(h]h ]h"]h$]h&]uh1jhhhK9hjhhubeh}(h]optionsah ]h"]optionsah$]h&]uh1hhjhhhhhK'ubh)}(hhh](h)}(h DESCRIPTIONh]h DESCRIPTION}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhhhhhK=ubh)}(hX5Convert a C header or source file (C_FILE), into a reStructuredText included via ..parsed-literal block with cross-references for the documentation files that describe the API. It accepts an optional EXCEPTIONS_FILE with describes what elements will be either ignored or be pointed to a non-default reference.h]hX5Convert a C header or source file (C_FILE), into a reStructuredText included via ..parsed-literal block with cross-references for the documentation files that describe the API. It accepts an optional EXCEPTIONS_FILE with describes what elements will be either ignored or be pointed to a non-default reference.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hjVhhubh)}(h(The output is written at the (OUT_FILE).h]h(The output is written at the (OUT_FILE).}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKFhjVhhubh)}(hIt is capable of identifying defines, functions, structs, typedefs, enums and enum symbols and create cross-references for all of them. It is also capable of distinguish #define used for specifying a Linux ioctl.h]hIt is capable of identifying defines, functions, structs, typedefs, enums and enum symbols and create cross-references for all of them. It is also capable of distinguish #define used for specifying a Linux ioctl.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjVhhubh)}(hWThe EXCEPTIONS_FILE contain two types of statements: \ **ignore**\ or \ **replace**\ .h](h7The EXCEPTIONS_FILE contain two types of statements: }(hjhhhNhNubjd)}(h **ignore**h]hignore}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh or }(hjhhhNhNubjd)}(h **replace**h]hreplace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh .}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKMhjVhhubh)}(h!The syntax for the ignore tag is:h]h!The syntax for the ignore tag is:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjVhhubh)}(hignore \ **type**\ \ **name**\h](h ignore }(hjhhhNhNubjd)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh }(hjhhhNhNubjd)}(h**name**h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhjVhhubh)}(hpThe \ **ignore**\ means that it won't generate cross references for a \ **name**\ symbol of type \ **type**\ .h](hThe }(hjhhhNhNubjd)}(h **ignore**h]hignore}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh; means that it won’t generate cross references for a }(hjhhhNhNubjd)}(h**name**h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh symbol of type }(hjhhhNhNubjd)}(h**type**h]htype}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh .}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKThjVhhubh)}(h"The syntax for the replace tag is:h]h"The syntax for the replace tag is:}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjVhhubh)}(h2replace \ **type**\ \ **name**\ \ **new_value**\h](h replace }(hjUhhhNhNubjd)}(h**type**h]htype}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jchjUubh }(hjUhhhNhNubjd)}(h**name**h]hname}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jchjUubh }hjUsbjd)}(h **new_value**h]h new_value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjUubh}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKZhjVhhubh)}(hThe \ **replace**\ means that it will generate cross references for a \ **name**\ symbol of type \ **type**\ , but, instead of using the default replacement rule, it will use \ **new_value**\ .h](hThe }(hjhhhNhNubjd)}(h **replace**h]hreplace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh8 means that it will generate cross references for a }(hjhhhNhNubjd)}(h**name**h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh symbol of type }(hjhhhNhNubjd)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubhF , but, instead of using the default replacement rule, it will use }(hjhhhNhNubjd)}(h **new_value**h]h new_value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh .}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjVhhubh)}(hEFor both statements, \ **type**\ can be either one of the following:h](hFor both statements, }(hjhhhNhNubjd)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh& can be either one of the following:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK`hjVhhubh)}(h \ **ioctl**\h](h }(hjhhhNhNubjd)}(h **ioctl**h]hioctl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKchjVhhubj)}(hThe ignore or replace statement will apply to ioctl definitions like: #define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register) h](h)}(hEThe ignore or replace statement will apply to ioctl definitions like:h]hEThe ignore or replace statement will apply to ioctl definitions like:}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehj/ubh)}(hO#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)h]hS#define VIDIOC_DBG_S_REGISTER _IOW(‘V’, 79, struct v4l2_dbg_register)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKghj/ubeh}(h]h ]h"]h$]h&]uh1jhhhKehjVhhubh)}(h \ **define**\h](h }(hjUhhhNhNubjd)}(h **define**h]hdefine}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jchjUubh}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKkhjVhhubj)}(hSThe ignore or replace statement will apply to any other #define found at C_FILE. h]h)}(hPThe ignore or replace statement will apply to any other #define found at C_FILE.h]hPThe ignore or replace statement will apply to any other #define found at C_FILE.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjuubah}(h]h ]h"]h$]h&]uh1jhhhKmhjVhhubh)}(h\ **typedef**\h](h }(hjhhhNhNubjd)}(h **typedef**h]htypedef}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKrhjVhhubj)}(hNThe ignore or replace statement will apply to typedef statements at C_FILE. h]h)}(hKThe ignore or replace statement will apply to typedef statements at C_FILE.h]hKThe ignore or replace statement will apply to typedef statements at C_FILE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthjubah}(h]h ]h"]h$]h&]uh1jhhhKthjVhhubh)}(h \ **struct**\h](h }(hjhhhNhNubjd)}(h **struct**h]hstruct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKxhjVhhubj)}(hYThe ignore or replace statement will apply to the name of struct statements at C_FILE. h]h)}(hVThe ignore or replace statement will apply to the name of struct statements at C_FILE.h]hVThe ignore or replace statement will apply to the name of struct statements at C_FILE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhjubah}(h]h ]h"]h$]h&]uh1jhhhKzhjVhhubh)}(h \ **enum**\h](h }(hjhhhNhNubjd)}(h**enum**h]henum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjubh}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjVhhubj)}(hWThe ignore or replace statement will apply to the name of enum statements at C_FILE. h]h)}(hTThe ignore or replace statement will apply to the name of enum statements at C_FILE.h]hTThe ignore or replace statement will apply to the name of enum statements at C_FILE.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjVhhubh)}(h \ **symbol**\h](h }(hj5hhhNhNubjd)}(h **symbol**h]hsymbol}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jchj5ubh}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjVhhubj)}(hXThe ignore or replace statement will apply to the name of enum value at C_FILE. For replace statements, \ **new_value**\ will automatically use :c:type: references for \ **typedef**\ , \ **enum**\ and \ **struct**\ types. It will use :ref: for \ **ioctl**\ , \ **define**\ and \ **symbol**\ types. The type of reference can also be explicitly defined at the replace statement. h](h)}(hOThe ignore or replace statement will apply to the name of enum value at C_FILE.h]hOThe ignore or replace statement will apply to the name of enum value at C_FILE.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjUubh)}(hX-For replace statements, \ **new_value**\ will automatically use :c:type: references for \ **typedef**\ , \ **enum**\ and \ **struct**\ types. It will use :ref: for \ **ioctl**\ , \ **define**\ and \ **symbol**\ types. The type of reference can also be explicitly defined at the replace statement.h](hFor replace statements, }(hjghhhNhNubjd)}(h **new_value**h]h new_value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jchjgubh4 will automatically use :c:type: references for }(hjghhhNhNubjd)}(h **typedef**h]htypedef}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjgubh , }(hjghhhNhNubjd)}(h**enum**h]henum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjgubh and }(hjghhhNhNubjd)}(h **struct**h]hstruct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjgubh" types. It will use :ref: for }(hjghhhNhNubjd)}(h **ioctl**h]hioctl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjgubh , }hjgsbjd)}(h **define**h]hdefine}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjgubh and }hjgsbjd)}(h **symbol**h]hsymbol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jchjgubhX types. The type of reference can also be explicitly defined at the replace statement.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjUubeh}(h]h ]h"]h$]h&]uh1jhhhKhjVhhubeh}(h] descriptionah ]h"] descriptionah$]h&]uh1hhjhhhhhK=ubh)}(hhh](h)}(hEXAMPLESh]hEXAMPLES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hignore define _VIDEODEV2_Hh]hignore define _VIDEODEV2_H}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h,Ignore a #define _VIDEODEV2_H at the C_FILE.h]h,Ignore a #define _VIDEODEV2_H at the C_FILE.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hignore symbol PRIVATEh]hignore symbol PRIVATE}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hOn a struct like:h]hOn a struct like:}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h!enum foo { BAR1, BAR2, PRIVATE };h]h!enum foo { BAR1, BAR2, PRIVATE };}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h7It won't generate cross-references for \ **PRIVATE**\ .h](h+It won’t generate cross-references for }(hjXhhhNhNubjd)}(h **PRIVATE**h]hPRIVATE}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jchjXubh .}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hGreplace symbol BAR1 :c:type:\`foo\` replace symbol BAR2 :c:type:\`foo\`h]hGreplace symbol BAR1 :c:type:`foo` replace symbol BAR2 :c:type:`foo`}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hOn a struct like:h]hOn a struct like:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h!enum foo { BAR1, BAR2, PRIVATE };h]h!enum foo { BAR1, BAR2, PRIVATE };}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h^It will make the BAR1 and BAR2 enum symbols to cross reference the foo symbol at the C domain.h]h^It will make the BAR1 and BAR2 enum symbols to cross reference the foo symbol at the C domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]examplesah ]h"]examplesah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hBUGSh]hBUGS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h9Report bugs to Mauro Carvalho Chehab h](h&Report bugs to Mauro Carvalho Chehab <}(hjhhhNhNubh reference)}(hmchehab@kernel.orgh]hmchehab@kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:mchehab@kernel.orguh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]bugsah ]h"]bugsah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h COPYRIGHTh]h COPYRIGHT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hICopyright (c) 2016 by Mauro Carvalho Chehab .h](h-Copyright (c) 2016 by Mauro Carvalho Chehab <}(hjhhhNhNubj)}(hmchehab+samsung@kernel.orgh]hmchehab+samsung@kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri!mailto:mchehab+samsung@kernel.orguh1jhjubh>.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hELicense GPLv2: GNU GPL version 2 .h](h"License GPLv2: GNU GPL version 2 <}(hj(hhhNhNubj)}(h!https://gnu.org/licenses/gpl.htmlh]h!https://gnu.org/licenses/gpl.html}(hj0hhhNhNubah}(h]h ]h"]h$]h&]refurij2uh1jhj(ubh>.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hxThis is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.h]hxThis is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] copyrightah ]h"] copyrightah$]h&]uh1hhjhhhhhKubeh}(h](parse-headers-pljeh ]h"](parse_headers.pl parse_headerseh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jejsexpect_referenced_by_id}jjsubeh}(h]including-uapi-header-filesah ]h"]including uapi header filesah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j]jasnameids}(jqjnjejjdjajGjDjjjSjPjjjjjjj\jYu nametypes}(jqjejdjGjjSjjjj\uh}(jnhjjjajjDj#jjJjPjjjVjjjjjYju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h3Hyperlink target "parse-headers" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1juba transformerN include_log] decorationNhhub.