]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
scripts/get_abi.pl: split label naming from xref logic
authorMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Thu, 20 Jun 2019 17:22:58 +0000 (14:22 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Jun 2019 14:57:44 +0000 (16:57 +0200)
Instead of using a ReST compilant label while parsing,
move the label to ReST output. That makes the parsing logic
more generic, allowing it to provide other types of output.

As a side effect, now all files used to generate the output
will be output. We can later add command line arguments to
filter.

Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
scripts/get_abi.pl

index 0ede9593c639fa80bf2a341729fac5d983f082e4..f84d321a72bbafd82ca3b7b6588637c92bc1710e 100755 (executable)
@@ -49,17 +49,23 @@ sub parse_abi {
        my $name = $file;
        $name =~ s,.*/,,;
 
+       my $nametag = "File $name";
+       $data{$nametag}->{what} = "File $name";
+       $data{$nametag}->{type} = "File";
+       $data{$nametag}->{file} = $name;
+       $data{$nametag}->{is_file} = 1;
+
        my $type = $file;
        $type =~ s,.*/(.*)/.*,$1,;
 
        my $what;
        my $new_what;
        my $tag;
-       my $label;
        my $ln;
-       my $has_file;
        my $xrefs;
        my $space;
+       my @labels;
+       my $label;
 
        print STDERR "Opening $file\n" if ($debug > 1);
        open IN, $file;
@@ -88,28 +94,13 @@ sub parse_abi {
                                        parse_error($file, $ln, "What '$what' doesn't have a description", "") if ($what && !$data{$what}->{description});
 
                                        $what = $content;
+                                       $label = $content;
                                        $new_what = 1;
                                }
+                               push @labels, [($content, $label)];
                                $tag = $new_tag;
 
-                               if ($has_file) {
-                                       $label = "abi_" . $content . " ";
-                                       $label =~ tr/A-Z/a-z/;
-
-                                       # Convert special chars to "_"
-                                       $label =~s/[\x00-\x2f]+/_/g;
-                                       $label =~s/[\x3a-\x40]+/_/g;
-                                       $label =~s/[\x7b-\xff]+/_/g;
-                                       $label =~ s,_+,_,g;
-                                       $label =~ s,_$,,;
-
-                                       $data{$what}->{label} .= $label;
-
-                                       # Escape special chars from content
-                                       $content =~s/([\x00-\x1f\x21-\x2f\x3a-\x40\x7b-\xff])/\\$1/g;
-
-                                       $xrefs .= "- :ref:`$content <$label>`\n\n";
-                               }
+                               push @{$data{$nametag}->{xrefs}}, [($content, $label)] if ($data{$nametag}->{what});
                                next;
                        }
 
@@ -117,6 +108,9 @@ sub parse_abi {
                                $tag = $new_tag;
 
                                if ($new_what) {
+                                       @{$data{$what}->{label}} = @labels if ($data{$nametag}->{what});
+                                       @labels = ();
+                                       $label = "";
                                        $new_what = 0;
 
                                        $data{$what}->{type} = $type;
@@ -145,15 +139,8 @@ sub parse_abi {
                }
 
                # Store any contents before tags at the database
-               if (!$tag) {
-                       next if (/^\n/);
-
-                       my $my_what = "File $name";
-                       $data{$my_what}->{what} = "File $name";
-                       $data{$my_what}->{type} = "File";
-                       $data{$my_what}->{file} = $name;
-                       $data{$my_what}->{description} .= $_;
-                       $has_file = 1;
+               if (!$tag && $data{$nametag}->{what}) {
+                       $data{$nametag}->{description} .= $_;
                        next;
                }
 
@@ -192,12 +179,8 @@ sub parse_abi {
                # Everything else is error
                parse_error($file, $ln, "Unexpected line:", $_);
        }
+       $data{$nametag}->{description} =~ s/^\n+//;
        close IN;
-
-       if ($has_file) {
-               my $my_what = "File $name";
-               $data{$my_what}->{xrefs} = $xrefs;
-       }
 }
 
 # Outputs the output on ReST format
@@ -212,11 +195,22 @@ sub output_rest {
                my $bar = $w;
                $bar =~ s/./-/g;
 
-               if ($data{$what}->{label}) {
-                       my @labels = split(/\s/, $data{$what}->{label});
-                       foreach my $label (@labels) {
-                               printf ".. _%s:\n\n", $label;
-                       }
+               foreach my $p (@{$data{$what}->{label}}) {
+                       my ($content, $label) = @{$p};
+                       $label = "abi_" . $label . " ";
+                       $label =~ tr/A-Z/a-z/;
+
+                       # Convert special chars to "_"
+                       $label =~s/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff])/_/g;
+                       $label =~ s,_+,_,g;
+                       $label =~ s,_$,,;
+
+                       $data{$what}->{label} .= $label;
+
+                       printf ".. _%s:\n\n", $label;
+
+                       # only one label is enough
+                       last;
                }
 
                print "$w\n$bar\n\n";
@@ -243,10 +237,28 @@ sub output_rest {
                                print "$desc\n\n";
                        }
                } else {
-                       print "DESCRIPTION MISSING for $what\n\n";
+                       print "DESCRIPTION MISSING for $what\n\n" if (!$data{$what}->{is_file});
                }
 
-               printf "Has the following ABI:\n\n%s", $data{$what}->{xrefs} if ($data{$what}->{xrefs});
+               if ($data{$what}->{xrefs}) {
+                       printf "Has the following ABI:\n\n";
+
+                       foreach my $p(@{$data{$what}->{xrefs}}) {
+                               my ($content, $label) = @{$p};
+                               $label = "abi_" . $label . " ";
+                               $label =~ tr/A-Z/a-z/;
+
+                               # Convert special chars to "_"
+                               $label =~s/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff])/_/g;
+                               $label =~ s,_+,_,g;
+                               $label =~ s,_$,,;
+
+                               # Escape special chars from content
+                               $content =~s/([\x00-\x1f\x21-\x2f\x3a-\x40\x7b-\xff])/\\$1/g;
+
+                               print "- :ref:`$content <$label>`\n\n";
+                       }
+               }
        }
 }