Commit 82801d06 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Jonathan Corbet

docs-rst: kernel-doc: fix typedef output in RST format

When using a typedef function like this one:
	typedef bool v4l2_check_dv_timings_fnc (const struct v4l2_dv_timings * t, void * handle);

The Sphinx C domain expects it to create a c:type: reference,
as that's the way it creates the type references when parsing
a c:function:: declaration.

So, a declaration like:

	.. c:function:: bool v4l2_valid_dv_timings (const struct v4l2_dv_timings * t, const struct v4l2_dv_timings_cap * cap, v4l2_check_dv_timings_fnc fnc, void * fnc_handle)

Will create a cross reference for :c:type:`v4l2_check_dv_timings_fnc`.

So, when outputting such typedefs in RST format, we need to handle
this special case, as otherwise it will produce those warnings:

	./include/media/v4l2-dv-timings.h:43: WARNING: c:type reference target not found: v4l2_check_dv_timings_fnc
	./include/media/v4l2-dv-timings.h:60: WARNING: c:type reference target not found: v4l2_check_dv_timings_fnc
	./include/media/v4l2-dv-timings.h:81: WARNING: c:type reference target not found: v4l2_check_dv_timings_fnc

So, change the kernel-doc script to produce a RST output for the
above typedef as:
	.. c:type:: v4l2_check_dv_timings_fnc

	   **Typedef**: timings check callback

	**Syntax**

	  ``bool v4l2_check_dv_timings_fnc (const struct v4l2_dv_timings * t, void * handle);``
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
parent d37c43ce
...@@ -1831,13 +1831,22 @@ sub output_function_rst(%) { ...@@ -1831,13 +1831,22 @@ sub output_function_rst(%) {
my %args = %{$_[0]}; my %args = %{$_[0]};
my ($parameter, $section); my ($parameter, $section);
my $oldprefix = $lineprefix; my $oldprefix = $lineprefix;
my $start; my $start = "";
if ($args{'typedef'}) {
print ".. c:type:: ". $args{'function'} . "\n\n";
print_lineno($declaration_start_line);
print " **Typedef**: ";
$lineprefix = "";
output_highlight_rst($args{'purpose'});
$start = "\n\n**Syntax**\n\n ``";
} else {
print ".. c:function:: "; print ".. c:function:: ";
}
if ($args{'functiontype'} ne "") { if ($args{'functiontype'} ne "") {
$start = $args{'functiontype'} . " " . $args{'function'} . " ("; $start .= $args{'functiontype'} . " " . $args{'function'} . " (";
} else { } else {
$start = $args{'function'} . " ("; $start .= $args{'function'} . " (";
} }
print $start; print $start;
...@@ -1856,11 +1865,15 @@ sub output_function_rst(%) { ...@@ -1856,11 +1865,15 @@ sub output_function_rst(%) {
print $type . " " . $parameter; print $type . " " . $parameter;
} }
} }
if ($args{'typedef'}) {
print ");``\n\n";
} else {
print ")\n\n"; print ")\n\n";
print_lineno($declaration_start_line); print_lineno($declaration_start_line);
$lineprefix = " "; $lineprefix = " ";
output_highlight_rst($args{'purpose'}); output_highlight_rst($args{'purpose'});
print "\n"; print "\n";
}
print "**Parameters**\n\n"; print "**Parameters**\n\n";
$lineprefix = " "; $lineprefix = " ";
...@@ -2203,6 +2216,7 @@ sub dump_typedef($$) { ...@@ -2203,6 +2216,7 @@ sub dump_typedef($$) {
output_declaration($declaration_name, output_declaration($declaration_name,
'function', 'function',
{'function' => $declaration_name, {'function' => $declaration_name,
'typedef' => 1,
'module' => $modulename, 'module' => $modulename,
'functiontype' => $return_type, 'functiontype' => $return_type,
'parameterlist' => \@parameterlist, 'parameterlist' => \@parameterlist,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment