[PATCH v2 2/4] scripts/kernel-doc: Replacing highlights hash by an array
Em Tue, 17 Nov 2015 17:21:32 -0700 Jonathan Corbet escreveu: > On Tue, 17 Nov 2015 13:29:49 -0200 > Mauro Carvalho Chehab wrote: > > > The enclosed patch should do the trick. I tested it with perl 5.10 and > > perl 5.22 it worked fine with both versions. > > Indeed it seems to work - thanks! Applied to the docs tree, I'll get it > upstream before too long. Thanks, Jon! Regards, Mauro
[PATCH v2 2/4] scripts/kernel-doc: Replacing highlights hash by an array
On Tue, 17 Nov 2015 13:29:49 -0200 Mauro Carvalho Chehab wrote: > The enclosed patch should do the trick. I tested it with perl 5.10 and > perl 5.22 it worked fine with both versions. Indeed it seems to work - thanks! Applied to the docs tree, I'll get it upstream before too long. jon
[PATCH v2 2/4] scripts/kernel-doc: Replacing highlights hash by an array
On 17-11-2015 13:29, Mauro Carvalho Chehab wrote: > Em Tue, 17 Nov 2015 07:44:31 -0700 > Jonathan Corbet escreveu: > >> On Tue, 17 Nov 2015 08:40:46 -0200 >> Mauro Carvalho Chehab wrote: >> >>> The above causes some versions of perl to fail, as keys expect a >>> hash argument: >>> >>> Execution of .//scripts/kernel-doc aborted due to compilation errors. >>> Type of arg 1 to keys must be hash (not private array) at >>> .//scripts/kernel-doc line 2714, near "@highlights) " >>> >>> This is happening at linuxtv.org server, with runs perl version 5.10.1. >> >> OK, that's not good. But I'm not quite sure what to do about it. >> >> Perl 5.10.1 is a little over six years old. Nobody else has complained >> (yet) about this problem. So it might be best to "fix" this with a >> minimum version added to the Changes file. >> >> Or maybe we need to revert the patch. >> >> So I'm far from a Perl expert, so I have no clue what the minimum version >> would be if we were to say "5.10.1 is too old." I don't suppose anybody >> out there knows? > > I'm also not a Perl expert, and never saw before the usage of "keys" on > an array. Yet, according with: > http://perldoc.perl.org/functions/keys.html > > "in Perl 5.12 or later only, the indices of an array" > > If so, then maybe we could replace: > foreach my $k (keys @highlights) > > by a more C style variant, with all versions of perl 5: > for (my $k = 0; $k < @highlights; $k++) { > > The enclosed patch should do the trick. I tested it with perl 5.10 and > perl 5.22 it worked fine with both versions. I'm Not a perl guru myself either =/. But thanks for fixing it Mauro! Danilo
[PATCH v2 2/4] scripts/kernel-doc: Replacing highlights hash by an array
Em Tue, 17 Nov 2015 07:44:31 -0700 Jonathan Corbet escreveu: > On Tue, 17 Nov 2015 08:40:46 -0200 > Mauro Carvalho Chehab wrote: > > > The above causes some versions of perl to fail, as keys expect a > > hash argument: > > > > Execution of .//scripts/kernel-doc aborted due to compilation errors. > > Type of arg 1 to keys must be hash (not private array) at > > .//scripts/kernel-doc line 2714, near "@highlights) " > > > > This is happening at linuxtv.org server, with runs perl version 5.10.1. > > OK, that's not good. But I'm not quite sure what to do about it. > > Perl 5.10.1 is a little over six years old. Nobody else has complained > (yet) about this problem. So it might be best to "fix" this with a > minimum version added to the Changes file. > > Or maybe we need to revert the patch. > > So I'm far from a Perl expert, so I have no clue what the minimum version > would be if we were to say "5.10.1 is too old." I don't suppose anybody > out there knows? I'm also not a Perl expert, and never saw before the usage of "keys" on an array. Yet, according with: http://perldoc.perl.org/functions/keys.html "in Perl 5.12 or later only, the indices of an array" If so, then maybe we could replace: foreach my $k (keys @highlights) by a more C style variant, with all versions of perl 5: for (my $k = 0; $k < @highlights; $k++) { The enclosed patch should do the trick. I tested it with perl 5.10 and perl 5.22 it worked fine with both versions. Regards, Mauro - kernel-doc: Make it compatible with Perl versions below 5.12 again Changeset 4d73270192ec('scripts/kernel-doc: Replacing highlights hash by an array') broke compatibility of the kernel-doc script with older versions of perl by using "keys ARRAY" syntax with is available only on Perl 5.12 or newer, according with: http://perldoc.perl.org/functions/keys.html Restore backward compatibility by replacing "foreach my $k (keys ARRAY)" by a C-like variant: "for (my $k = 0; $k < !ARRAY; $k++)" Signed-off-by: Mauro Carvalho Chehab diff --git a/scripts/kernel-doc b/scripts/kernel-doc index 125b906..1f61def 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc @@ -2711,7 +2711,7 @@ $kernelversion = get_kernel_version(); # generate a sequence of code that will splice in highlighting information # using the s// operator. -foreach my $k (keys @highlights) { +for (my $k = 0; $k < @highlights; $k++) { my $pattern = $highlights[$k][0]; my $result = $highlights[$k][1]; # print STDERR "scanning pattern:$pattern, highlight:($result)\n";
[PATCH v2 2/4] scripts/kernel-doc: Replacing highlights hash by an array
Hi Danilo, Em Tue, 28 Jul 2015 16:45:16 -0300 Danilo Cesar Lemes de Paula escreveu: > The "highlight" code is very sensible to the order of the hash keys, > but the order of the keys cannot be predicted on Perl. It generates > faulty DocBook entries like: > - @device_for_each_child > > We should use an array for that job, so we can guarantee that the order > of the regex execution on dohighlight won't change. ... > @@ -2587,9 +2601,11 @@ $kernelversion = get_kernel_version(); > > # generate a sequence of code that will splice in highlighting information > # using the s// operator. > -foreach my $pattern (keys %highlights) { > -# print STDERR "scanning pattern:$pattern, > highlight:($highlights{$pattern})\n"; > -$dohighlight .= "\$contents =~ s:$pattern:$highlights{$pattern}:gs;\n"; > +foreach my $k (keys @highlights) { The above causes some versions of perl to fail, as keys expect a hash argument: Execution of .//scripts/kernel-doc aborted due to compilation errors. Type of arg 1 to keys must be hash (not private array) at .//scripts/kernel-doc line 2714, near "@highlights) " This is happening at linuxtv.org server, with runs perl version 5.10.1. I had to revert this patch in order to be able to keep building the documentation of the media kABI on our server. Regards, Mauro
[PATCH v2 2/4] scripts/kernel-doc: Replacing highlights hash by an array
On Tue, 17 Nov 2015 08:40:46 -0200 Mauro Carvalho Chehab wrote: > The above causes some versions of perl to fail, as keys expect a > hash argument: > > Execution of .//scripts/kernel-doc aborted due to compilation errors. > Type of arg 1 to keys must be hash (not private array) at > .//scripts/kernel-doc line 2714, near "@highlights) " > > This is happening at linuxtv.org server, with runs perl version 5.10.1. OK, that's not good. But I'm not quite sure what to do about it. Perl 5.10.1 is a little over six years old. Nobody else has complained (yet) about this problem. So it might be best to "fix" this with a minimum version added to the Changes file. Or maybe we need to revert the patch. So I'm far from a Perl expert, so I have no clue what the minimum version would be if we were to say "5.10.1 is too old." I don't suppose anybody out there knows? Thanks, jon
[PATCH v2 2/4] scripts/kernel-doc: Replacing highlights hash by an array
The "highlight" code is very sensible to the order of the hash keys, but the order of the keys cannot be predicted on Perl. It generates faulty DocBook entries like: - @device_for_each_child We should use an array for that job, so we can guarantee that the order of the regex execution on dohighlight won't change. Signed-off-by: Danilo Cesar Lemes de Paula Cc: Randy Dunlap Cc: Daniel Vetter Cc: Laurent Pinchart Cc: Jonathan Corbet Cc: Herbert Xu Cc: Stephan Mueller Cc: Michal Marek Cc: linux-kernel at vger.kernel.org Cc: linux-doc at vger.kernel.org Cc: intel-gfx Cc: dri-devel --- Changelog: v2: No changes scripts/kernel-doc | 104 ++--- 1 file changed, 60 insertions(+), 44 deletions(-) diff --git a/scripts/kernel-doc b/scripts/kernel-doc index 9922e66..a38a69a 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc @@ -182,59 +182,73 @@ my $type_env = '(\$\w+)'; # One for each output format # these work fairly well -my %highlights_html = ( $type_constant, "\$1", - $type_func, "\$1", - $type_struct_xml, "\$1", - $type_env, "\$1", - $type_param, "\$1" ); +my @highlights_html = ( + [$type_constant, "\$1"], + [$type_func, "\$1"], + [$type_struct_xml, "\$1"], + [$type_env, "\$1"], + [$type_param, "\$1"] + ); my $local_lt = "lt:"; my $local_gt = "gt:"; my $blankline_html = $local_lt . "p" . $local_gt; # was "" # html version 5 -my %highlights_html5 = ( $type_constant, "\$1", - $type_func, "\$1", - $type_struct_xml, "\$1", - $type_env, "\$1", - $type_param, "\$1" ); +my @highlights_html5 = ( +[$type_constant, "\$1"], +[$type_func, "\$1"], +[$type_struct_xml, "\$1"], +[$type_env, "\$1"], +[$type_param, "\$1]"] + ); my $blankline_html5 = $local_lt . "br /" . $local_gt; # XML, docbook format -my %highlights_xml = ( "([^=])\\\"([^\\\"<]+)\\\"", "\$1\$2", - $type_constant, "\$1", - $type_func, "\$1", - $type_struct_xml, "\$1", - $type_env, "\$1", - $type_param, "\$1" ); +my @highlights_xml = ( + ["([^=])\\\"([^\\\"<]+)\\\"", "\$1\$2"], + [$type_constant, "\$1"], + [$type_struct_xml, "\$1"], + [$type_param, "\$1"], + [$type_func, "\$1"], + [$type_env, "\$1"] +); my $blankline_xml = $local_lt . "/para" . $local_gt . $local_lt . "para" . $local_gt . "\n"; # gnome, docbook format -my %highlights_gnome = ( $type_constant, "\$1", -$type_func, "\$1", -$type_struct, "\$1", -$type_env, "\$1", -$type_param, "\$1" ); +my @highlights_gnome = ( +[$type_constant, "\$1"], +[$type_func, "\$1"], +[$type_struct, "\$1"], +[$type_env, "\$1"], +[$type_param, "\$1" ] + ); my $blankline_gnome = "\n"; # these are pretty rough -my %highlights_man = ( $type_constant, "\$1", - $type_func, "fB\$1fP", - $type_struct, "fI\$1fP", - $type_param, "fI\$1fP" ); +my @highlights_man = ( + [$type_constant, "\$1"], + [$type_func, "fB\$1fP"], + [$type_struct, "fI\$1fP"], + [$type_param, "fI\$1fP"] +); my $blankline_man = ""; # text-mode -my %highlights_text = ( $type_constant, "\$1", - $type_func, "\$1", - $type_struct, "\$1", - $type_param, "\$1" ); +my @highlights_text = ( + [$type_constant, "\$1"], + [$type_func, "\$1"], + [$type_struct, "\$1"], + [$type_param, "\$1"] + ); my $blankline_text = ""; # list mode -my %highlights_list = ( $type_constant, "\$1", - $type_func, "\$1", - $type_struct, "\$1", - $type_param, "\$1" ); +my @highlights_list = ( + [$type_constant, "\$1"], + [$type_func, "\$1"], + [$type_struct, "\$1"], + [$type_param, "\$1"] + ); my