diff options
Diffstat (limited to 'scripts/kernel-doc')
-rwxr-xr-x | scripts/kernel-doc | 80 |
1 files changed, 41 insertions, 39 deletions
diff --git a/scripts/kernel-doc b/scripts/kernel-doc index 9fd5f5b87d1e..99fe4b7fb2f1 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc | |||
@@ -45,7 +45,7 @@ use strict; | |||
45 | # Note: This only supports 'c'. | 45 | # Note: This only supports 'c'. |
46 | 46 | ||
47 | # usage: | 47 | # usage: |
48 | # kerneldoc [ -docbook | -html | -text | -man ] | 48 | # kernel-doc [ -docbook | -html | -text | -man ] |
49 | # [ -function funcname [ -function funcname ...] ] c file(s)s > outputfile | 49 | # [ -function funcname [ -function funcname ...] ] c file(s)s > outputfile |
50 | # or | 50 | # or |
51 | # [ -nofunction funcname [ -function funcname ...] ] c file(s)s > outputfile | 51 | # [ -nofunction funcname [ -function funcname ...] ] c file(s)s > outputfile |
@@ -59,7 +59,7 @@ use strict; | |||
59 | # -nofunction funcname | 59 | # -nofunction funcname |
60 | # If set, then only generate documentation for the other function(s). All | 60 | # If set, then only generate documentation for the other function(s). All |
61 | # other functions are ignored. Cannot be used with -function together | 61 | # other functions are ignored. Cannot be used with -function together |
62 | # (yes thats a bug - perl hackers can fix it 8)) | 62 | # (yes, that's a bug -- perl hackers can fix it 8)) |
63 | # | 63 | # |
64 | # c files - list of 'c' files to process | 64 | # c files - list of 'c' files to process |
65 | # | 65 | # |
@@ -90,28 +90,28 @@ use strict; | |||
90 | # * my_function - does my stuff | 90 | # * my_function - does my stuff |
91 | # * @my_arg: its mine damnit | 91 | # * @my_arg: its mine damnit |
92 | # * | 92 | # * |
93 | # * Does my stuff explained. | 93 | # * Does my stuff explained. |
94 | # */ | 94 | # */ |
95 | # | 95 | # |
96 | # or, could also use: | 96 | # or, could also use: |
97 | # /** | 97 | # /** |
98 | # * my_function - does my stuff | 98 | # * my_function - does my stuff |
99 | # * @my_arg: its mine damnit | 99 | # * @my_arg: its mine damnit |
100 | # * Description: Does my stuff explained. | 100 | # * Description: Does my stuff explained. |
101 | # */ | 101 | # */ |
102 | # etc. | 102 | # etc. |
103 | # | 103 | # |
104 | # Beside functions you can also write documentation for structs, unions, | 104 | # Beside functions you can also write documentation for structs, unions, |
105 | # enums and typedefs. Instead of the function name you must write the name | 105 | # enums and typedefs. Instead of the function name you must write the name |
106 | # of the declaration; the struct/union/enum/typedef must always precede | 106 | # of the declaration; the struct/union/enum/typedef must always precede |
107 | # the name. Nesting of declarations is not supported. | 107 | # the name. Nesting of declarations is not supported. |
108 | # Use the argument mechanism to document members or constants. | 108 | # Use the argument mechanism to document members or constants. |
109 | # e.g. | 109 | # e.g. |
110 | # /** | 110 | # /** |
111 | # * struct my_struct - short description | 111 | # * struct my_struct - short description |
112 | # * @a: first member | 112 | # * @a: first member |
113 | # * @b: second member | 113 | # * @b: second member |
114 | # * | 114 | # * |
115 | # * Longer description | 115 | # * Longer description |
116 | # */ | 116 | # */ |
117 | # struct my_struct { | 117 | # struct my_struct { |
@@ -122,12 +122,12 @@ use strict; | |||
122 | # }; | 122 | # }; |
123 | # | 123 | # |
124 | # All descriptions can be multiline, except the short function description. | 124 | # All descriptions can be multiline, except the short function description. |
125 | # | 125 | # |
126 | # You can also add additional sections. When documenting kernel functions you | 126 | # You can also add additional sections. When documenting kernel functions you |
127 | # should document the "Context:" of the function, e.g. whether the functions | 127 | # should document the "Context:" of the function, e.g. whether the functions |
128 | # can be called form interrupts. Unlike other sections you can end it with an | 128 | # can be called form interrupts. Unlike other sections you can end it with an |
129 | # empty line. | 129 | # empty line. |
130 | # Example-sections should contain the string EXAMPLE so that they are marked | 130 | # Example-sections should contain the string EXAMPLE so that they are marked |
131 | # appropriately in DocBook. | 131 | # appropriately in DocBook. |
132 | # | 132 | # |
133 | # Example: | 133 | # Example: |
@@ -135,7 +135,7 @@ use strict; | |||
135 | # * user_function - function that can only be called in user context | 135 | # * user_function - function that can only be called in user context |
136 | # * @a: some argument | 136 | # * @a: some argument |
137 | # * Context: !in_interrupt() | 137 | # * Context: !in_interrupt() |
138 | # * | 138 | # * |
139 | # * Some description | 139 | # * Some description |
140 | # * Example: | 140 | # * Example: |
141 | # * user_function(22); | 141 | # * user_function(22); |
@@ -223,9 +223,9 @@ my %highlights = %highlights_man; | |||
223 | my $blankline = $blankline_man; | 223 | my $blankline = $blankline_man; |
224 | my $modulename = "Kernel API"; | 224 | my $modulename = "Kernel API"; |
225 | my $function_only = 0; | 225 | my $function_only = 0; |
226 | my $man_date = ('January', 'February', 'March', 'April', 'May', 'June', | 226 | my $man_date = ('January', 'February', 'March', 'April', 'May', 'June', |
227 | 'July', 'August', 'September', 'October', | 227 | 'July', 'August', 'September', 'October', |
228 | 'November', 'December')[(localtime)[4]] . | 228 | 'November', 'December')[(localtime)[4]] . |
229 | " " . ((localtime)[5]+1900); | 229 | " " . ((localtime)[5]+1900); |
230 | 230 | ||
231 | # Essentially these are globals | 231 | # Essentially these are globals |
@@ -236,7 +236,7 @@ my ($function, %function_table,%parametertypes,$declaration_purpose); | |||
236 | my ($type,$declaration_name,$return_type); | 236 | my ($type,$declaration_name,$return_type); |
237 | my ($newsection,$newcontents,$prototype,$filelist, $brcount, %source_map); | 237 | my ($newsection,$newcontents,$prototype,$filelist, $brcount, %source_map); |
238 | 238 | ||
239 | # Generated docbook code is inserted in a template at a point where | 239 | # Generated docbook code is inserted in a template at a point where |
240 | # docbook v3.1 requires a non-zero sequence of RefEntry's; see: | 240 | # docbook v3.1 requires a non-zero sequence of RefEntry's; see: |
241 | # http://www.oasis-open.org/docbook/documentation/reference/html/refentry.html | 241 | # http://www.oasis-open.org/docbook/documentation/reference/html/refentry.html |
242 | # We keep track of number of generated entries and generate a dummy | 242 | # We keep track of number of generated entries and generate a dummy |
@@ -365,7 +365,7 @@ sub dump_section { | |||
365 | # parameterdescs => %parameter descriptions | 365 | # parameterdescs => %parameter descriptions |
366 | # sectionlist => @list of sections | 366 | # sectionlist => @list of sections |
367 | # sections => %descriont descriptions | 367 | # sections => %descriont descriptions |
368 | # | 368 | # |
369 | 369 | ||
370 | sub output_highlight { | 370 | sub output_highlight { |
371 | my $contents = join "\n",@_; | 371 | my $contents = join "\n",@_; |
@@ -400,7 +400,7 @@ sub output_section_html(%) { | |||
400 | print "<blockquote>\n"; | 400 | print "<blockquote>\n"; |
401 | output_highlight($args{'sections'}{$section}); | 401 | output_highlight($args{'sections'}{$section}); |
402 | print "</blockquote>\n"; | 402 | print "</blockquote>\n"; |
403 | } | 403 | } |
404 | } | 404 | } |
405 | 405 | ||
406 | # output enum in html | 406 | # output enum in html |
@@ -434,7 +434,7 @@ sub output_enum_html(%) { | |||
434 | print "<hr>\n"; | 434 | print "<hr>\n"; |
435 | } | 435 | } |
436 | 436 | ||
437 | # output tyepdef in html | 437 | # output typedef in html |
438 | sub output_typedef_html(%) { | 438 | sub output_typedef_html(%) { |
439 | my %args = %{$_[0]}; | 439 | my %args = %{$_[0]}; |
440 | my ($parameter); | 440 | my ($parameter); |
@@ -551,7 +551,7 @@ sub output_intro_html(%) { | |||
551 | 551 | ||
552 | sub output_section_xml(%) { | 552 | sub output_section_xml(%) { |
553 | my %args = %{$_[0]}; | 553 | my %args = %{$_[0]}; |
554 | my $section; | 554 | my $section; |
555 | # print out each section | 555 | # print out each section |
556 | $lineprefix=" "; | 556 | $lineprefix=" "; |
557 | foreach $section (@{$args{'sectionlist'}}) { | 557 | foreach $section (@{$args{'sectionlist'}}) { |
@@ -778,7 +778,7 @@ sub output_enum_xml(%) { | |||
778 | print "</refsynopsisdiv>\n"; | 778 | print "</refsynopsisdiv>\n"; |
779 | 779 | ||
780 | print "<refsect1>\n"; | 780 | print "<refsect1>\n"; |
781 | print " <title>Constants</title>\n"; | 781 | print " <title>Constants</title>\n"; |
782 | print " <variablelist>\n"; | 782 | print " <variablelist>\n"; |
783 | foreach $parameter (@{$args{'parameterlist'}}) { | 783 | foreach $parameter (@{$args{'parameterlist'}}) { |
784 | my $parameter_name = $parameter; | 784 | my $parameter_name = $parameter; |
@@ -1157,7 +1157,7 @@ sub output_section_text(%) { | |||
1157 | foreach $section (@{$args{'sectionlist'}}) { | 1157 | foreach $section (@{$args{'sectionlist'}}) { |
1158 | print "$section:\n\n"; | 1158 | print "$section:\n\n"; |
1159 | output_highlight($args{'sections'}{$section}); | 1159 | output_highlight($args{'sections'}{$section}); |
1160 | } | 1160 | } |
1161 | print "\n\n"; | 1161 | print "\n\n"; |
1162 | } | 1162 | } |
1163 | 1163 | ||
@@ -1262,8 +1262,8 @@ sub output_declaration { | |||
1262 | my $name = shift; | 1262 | my $name = shift; |
1263 | my $functype = shift; | 1263 | my $functype = shift; |
1264 | my $func = "output_${functype}_$output_mode"; | 1264 | my $func = "output_${functype}_$output_mode"; |
1265 | if (($function_only==0) || | 1265 | if (($function_only==0) || |
1266 | ( $function_only == 1 && defined($function_table{$name})) || | 1266 | ( $function_only == 1 && defined($function_table{$name})) || |
1267 | ( $function_only == 2 && !defined($function_table{$name}))) | 1267 | ( $function_only == 2 && !defined($function_table{$name}))) |
1268 | { | 1268 | { |
1269 | &$func(@_); | 1269 | &$func(@_); |
@@ -1282,7 +1282,7 @@ sub output_intro { | |||
1282 | } | 1282 | } |
1283 | 1283 | ||
1284 | ## | 1284 | ## |
1285 | # takes a declaration (struct, union, enum, typedef) and | 1285 | # takes a declaration (struct, union, enum, typedef) and |
1286 | # invokes the right handler. NOT called for functions. | 1286 | # invokes the right handler. NOT called for functions. |
1287 | sub dump_declaration($$) { | 1287 | sub dump_declaration($$) { |
1288 | no strict 'refs'; | 1288 | no strict 'refs'; |
@@ -1352,7 +1352,7 @@ sub dump_enum($$) { | |||
1352 | } | 1352 | } |
1353 | 1353 | ||
1354 | } | 1354 | } |
1355 | 1355 | ||
1356 | output_declaration($declaration_name, | 1356 | output_declaration($declaration_name, |
1357 | 'enum', | 1357 | 'enum', |
1358 | {'enum' => $declaration_name, | 1358 | {'enum' => $declaration_name, |
@@ -1409,7 +1409,7 @@ sub create_parameterlist($$$) { | |||
1409 | while ($args =~ /(\([^\),]+),/) { | 1409 | while ($args =~ /(\([^\),]+),/) { |
1410 | $args =~ s/(\([^\),]+),/$1#/g; | 1410 | $args =~ s/(\([^\),]+),/$1#/g; |
1411 | } | 1411 | } |
1412 | 1412 | ||
1413 | foreach my $arg (split($splitter, $args)) { | 1413 | foreach my $arg (split($splitter, $args)) { |
1414 | # strip comments | 1414 | # strip comments |
1415 | $arg =~ s/\/\*.*\*\///; | 1415 | $arg =~ s/\/\*.*\*\///; |
@@ -1529,7 +1529,7 @@ sub dump_function($$) { | |||
1529 | # the following functions' documentation still comes out right: | 1529 | # the following functions' documentation still comes out right: |
1530 | # - parport_register_device (function pointer parameters) | 1530 | # - parport_register_device (function pointer parameters) |
1531 | # - atomic_set (macro) | 1531 | # - atomic_set (macro) |
1532 | # - pci_match_device (long return type) | 1532 | # - pci_match_device, __copy_to_user (long return type) |
1533 | 1533 | ||
1534 | if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || | 1534 | if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || |
1535 | $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || | 1535 | $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || |
@@ -1544,7 +1544,9 @@ sub dump_function($$) { | |||
1544 | $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || | 1544 | $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || |
1545 | $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || | 1545 | $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || |
1546 | $prototype =~ m/^(\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || | 1546 | $prototype =~ m/^(\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || |
1547 | $prototype =~ m/^(\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/) { | 1547 | $prototype =~ m/^(\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || |
1548 | $prototype =~ m/^(\w+\s+\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || | ||
1549 | $prototype =~ m/^(\w+\s+\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/) { | ||
1548 | $return_type = $1; | 1550 | $return_type = $1; |
1549 | $declaration_name = $2; | 1551 | $declaration_name = $2; |
1550 | my $args = $3; | 1552 | my $args = $3; |
@@ -1556,7 +1558,7 @@ sub dump_function($$) { | |||
1556 | return; | 1558 | return; |
1557 | } | 1559 | } |
1558 | 1560 | ||
1559 | output_declaration($declaration_name, | 1561 | output_declaration($declaration_name, |
1560 | 'function', | 1562 | 'function', |
1561 | {'function' => $declaration_name, | 1563 | {'function' => $declaration_name, |
1562 | 'module' => $modulename, | 1564 | 'module' => $modulename, |
@@ -1615,11 +1617,11 @@ sub reset_state { | |||
1615 | %sections = (); | 1617 | %sections = (); |
1616 | @sectionlist = (); | 1618 | @sectionlist = (); |
1617 | $prototype = ""; | 1619 | $prototype = ""; |
1618 | 1620 | ||
1619 | $state = 0; | 1621 | $state = 0; |
1620 | } | 1622 | } |
1621 | 1623 | ||
1622 | sub process_state3_function($$) { | 1624 | sub process_state3_function($$) { |
1623 | my $x = shift; | 1625 | my $x = shift; |
1624 | my $file = shift; | 1626 | my $file = shift; |
1625 | 1627 | ||
@@ -1638,7 +1640,7 @@ sub process_state3_function($$) { | |||
1638 | } | 1640 | } |
1639 | } | 1641 | } |
1640 | 1642 | ||
1641 | sub process_state3_type($$) { | 1643 | sub process_state3_type($$) { |
1642 | my $x = shift; | 1644 | my $x = shift; |
1643 | my $file = shift; | 1645 | my $file = shift; |
1644 | 1646 | ||
@@ -1778,7 +1780,7 @@ sub process_file($) { | |||
1778 | } elsif (/$doc_content/) { | 1780 | } elsif (/$doc_content/) { |
1779 | # miguel-style comment kludge, look for blank lines after | 1781 | # miguel-style comment kludge, look for blank lines after |
1780 | # @parameter line to signify start of description | 1782 | # @parameter line to signify start of description |
1781 | if ($1 eq "" && | 1783 | if ($1 eq "" && |
1782 | ($section =~ m/^@/ || $section eq $section_context)) { | 1784 | ($section =~ m/^@/ || $section eq $section_context)) { |
1783 | dump_section($section, xml_escape($contents)); | 1785 | dump_section($section, xml_escape($contents)); |
1784 | $section = $section_default; | 1786 | $section = $section_default; |
@@ -1788,7 +1790,7 @@ sub process_file($) { | |||
1788 | } | 1790 | } |
1789 | } else { | 1791 | } else { |
1790 | # i dont know - bad line? ignore. | 1792 | # i dont know - bad line? ignore. |
1791 | print STDERR "Warning(${file}:$.): bad line: $_"; | 1793 | print STDERR "Warning(${file}:$.): bad line: $_"; |
1792 | ++$warnings; | 1794 | ++$warnings; |
1793 | } | 1795 | } |
1794 | } elsif ($state == 3) { # scanning for function { (end of prototype) | 1796 | } elsif ($state == 3) { # scanning for function { (end of prototype) |
@@ -1843,7 +1845,7 @@ sub process_file($) { | |||
1843 | else | 1845 | else |
1844 | { | 1846 | { |
1845 | $contents .= $1 . "\n"; | 1847 | $contents .= $1 . "\n"; |
1846 | } | 1848 | } |
1847 | } | 1849 | } |
1848 | } | 1850 | } |
1849 | } | 1851 | } |