qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PULL 101/113] scripts: kernel-doc: reimplement -nofunction argument


From: Paolo Bonzini
Subject: [PULL 101/113] scripts: kernel-doc: reimplement -nofunction argument
Date: Wed, 2 Dec 2020 03:08:37 -0500

From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

Right now, the build system doesn't use -nofunction, as
it is pretty much useless, because it doesn't consider
the other output modes (extern, internal), working only
with all.

Also, it is limited to exclude functions.

Re-implement it in order to allow excluding any symbols from
the document output, no matter what mode is used.

The parameter was also renamed to "-nosymbol", as it express
better its meaning.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201117165312.118257-20-pbonzini@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 scripts/kernel-doc | 44 +++++++++++++++++++++-----------------------
 1 file changed, 21 insertions(+), 23 deletions(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index f33a4b1cc7..35d60af834 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -66,9 +66,8 @@ Output selection (mutually exclusive):
   -function NAME       Only output documentation for the given function(s)
                        or DOC: section title(s). All other functions and DOC:
                        sections are ignored. May be specified multiple times.
-  -nofunction NAME     Do NOT output documentation for the given function(s);
-                       only output documentation for the other functions and
-                       DOC: sections. May be specified multiple times.
+  -nosymbol NAME       Exclude the specified symbols from the output
+                       documentation. May be specified multiple times.
 
 Output selection modifiers:
   -no-doc-sections     Do not output DOC: sections.
@@ -288,9 +287,8 @@ my $modulename = "Kernel API";
 use constant {
     OUTPUT_ALL          => 0, # output all symbols and doc sections
     OUTPUT_INCLUDE      => 1, # output only specified symbols
-    OUTPUT_EXCLUDE      => 2, # output everything except specified symbols
-    OUTPUT_EXPORTED     => 3, # output exported symbols
-    OUTPUT_INTERNAL     => 4, # output non-exported symbols
+    OUTPUT_EXPORTED     => 2, # output exported symbols
+    OUTPUT_INTERNAL     => 3, # output non-exported symbols
 };
 my $output_selection = OUTPUT_ALL;
 my $show_not_found = 0;        # No longer used
@@ -315,6 +313,7 @@ my $man_date = ('January', 'February', 'March', 'April', 
'May', 'June',
 # CAVEAT EMPTOR!  Some of the others I localised may not want to be, which
 # could cause "use of undefined value" or other bugs.
 my ($function, %function_table, %parametertypes, $declaration_purpose);
+my %nosymbol_table = ();
 my $declaration_start_line;
 my ($type, $declaration_name, $return_type);
 my ($newsection, $newcontents, $prototype, $brcount, %source_map);
@@ -434,10 +433,9 @@ while ($ARGV[0] =~ m/^--?(.*)/) {
        $output_selection = OUTPUT_INCLUDE;
        $function = shift @ARGV;
        $function_table{$function} = 1;
-    } elsif ($cmd eq "nofunction") { # output all except specific functions
-       $output_selection = OUTPUT_EXCLUDE;
-       $function = shift @ARGV;
-       $function_table{$function} = 1;
+    } elsif ($cmd eq "nosymbol") { # Exclude specific symbols
+       my $symbol = shift @ARGV;
+       $nosymbol_table{$symbol} = 1;
     } elsif ($cmd eq "export") { # only exported symbols
        $output_selection = OUTPUT_EXPORTED;
        %function_table = ();
@@ -570,11 +568,11 @@ sub dump_doc_section {
         return;
     }
 
+    return if (defined($nosymbol_table{$name}));
+
     if (($output_selection == OUTPUT_ALL) ||
-       ($output_selection == OUTPUT_INCLUDE &&
-        defined($function_table{$name})) ||
-       ($output_selection == OUTPUT_EXCLUDE &&
-        !defined($function_table{$name})))
+       (($output_selection == OUTPUT_INCLUDE) &&
+        defined($function_table{$name})))
     {
        dump_section($file, $name, $contents);
        output_blockhead({'sectionlist' => \@sectionlist,
@@ -800,6 +798,8 @@ sub output_blockhead_rst(%) {
     my ($parameter, $section);
 
     foreach $section (@{$args{'sectionlist'}}) {
+       next if (defined($nosymbol_table{$section}));
+
        if ($output_selection != OUTPUT_INCLUDE) {
            print "**$section**\n\n";
        }
@@ -1115,12 +1115,14 @@ sub output_declaration {
     my $name = shift;
     my $functype = shift;
     my $func = "output_${functype}_$output_mode";
+
+    return if (defined($nosymbol_table{$name}));
+
     if (($output_selection == OUTPUT_ALL) ||
        (($output_selection == OUTPUT_INCLUDE ||
          $output_selection == OUTPUT_EXPORTED) &&
         defined($function_table{$name})) ||
-       (($output_selection == OUTPUT_EXCLUDE ||
-         $output_selection == OUTPUT_INTERNAL) &&
+       ($output_selection == OUTPUT_INTERNAL &&
         !($functype eq "function" && defined($function_table{$name}))))
     {
        &$func(@_);
@@ -1301,6 +1303,8 @@ sub show_warnings($$) {
        my $functype = shift;
        my $name = shift;
 
+       return 0 if (defined($nosymbol_table{$name}));
+
        return 1 if ($output_selection == OUTPUT_ALL);
 
        if ($output_selection == OUTPUT_EXPORTED) {
@@ -1324,13 +1328,6 @@ sub show_warnings($$) {
                        return 0;
                }
        }
-       if ($output_selection == OUTPUT_EXCLUDE) {
-               if (!defined($function_table{$name})) {
-                       return 1;
-               } else {
-                       return 0;
-               }
-       }
        die("Please add the new output type at show_warnings()");
 }
 
@@ -1952,6 +1949,7 @@ sub process_export_file($) {
 
     while (<IN>) {
        if (/$export_symbol/) {
+           next if (defined($nosymbol_table{$2}));
            $function_table{$2} = 1;
        }
     }
-- 
2.26.2





reply via email to

[Prev in Thread] Current Thread [Next in Thread]