]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
autom4te: Don’t crash if Data::Dumper::Sortkeys is unavailable.
authorZack Weinberg <zack@owlfolio.org>
Mon, 11 Dec 2023 16:25:54 +0000 (11:25 -0500)
committerZack Weinberg <zack@owlfolio.org>
Mon, 11 Dec 2023 16:40:11 +0000 (11:40 -0500)
Commit c2ab755698db245898a4cc89149eb5df256e4bd0 added an unconditional
use of Data::Dumper’s Sortkeys method, which was added in version
2.12_01 of that module.  In terms of Perl versions, it is available in
5.8.x and later, and in 5.6.2, but not in 5.6.1 or earlier. At the
time, our minimum Perl version was 5.10, but we lowered it to 5.6.0
again in 05e295b60cfdf378b7ed8c1f8563a5644d5d4689.  It seems that
commit was not actually tested with 5.6.1 or earlier.

As we are only using Sortkeys to facilitate manual comparison of
autom4te.cache/requests files, we can just ignore the method lookup
failure with 5.6.[01] and everything will work fine without it.

Tested on x86_64-unknown-netbsd9.3 with perl 5.6.1.

* lib/Autom4te/C4che.pm (marshall): Ignore method lookup failure for
  Data::Dumper::Sortkeys with very old perl.
* lib/Autom4te/Request.pm (marshall): Likewise.

lib/Autom4te/C4che.pm
lib/Autom4te/Request.pm

index 523f15bffef725ab11a8b02d8bc2685087cd8fb4..029138d1e993e7803a95e7692e3c67ced0138d84 100644 (file)
@@ -155,13 +155,16 @@ Serialize all the current requests.
 sub marshall ($)
 {
   my ($caller) = @_;
-  my $res = '';
 
   my $marshall = Data::Dumper->new ([\@request], [qw (*request)]);
-  $marshall->Indent(2)->Terse(0)->Sortkeys(1);
-  $res = $marshall->Dump . "\n";
+  $marshall->Indent(2)->Terse(0);
 
-  return $res;
+  # The Sortkeys method was added in Data::Dumper 2.12_01, so it is
+  # available in 5.8.x and 5.6.2 but not in 5.6.1 or earlier.
+  # Ignore failure of method lookup.
+  eval { $marshall->Sortkeys(1); };
+
+  return $marshall->Dump . "\n";
 }
 
 
index 53f9ad7a710f54eae3e4ba6f0c5f841082f7f7ef..f4ede8dfb03e4a461d44f35559bebd24dc42d077 100644 (file)
@@ -59,14 +59,17 @@ struct
 sub marshall($)
 {
   my ($caller) = @_;
-  my $res = '';
 
   # CALLER is an object: instance method.
   my $marshall = Data::Dumper->new ([$caller]);
-  $marshall->Indent(2)->Terse(0)->Sortkeys(1);
-  $res = $marshall->Dump . "\n";
+  $marshall->Indent(2)->Terse(0);
 
-  return $res;
+  # The Sortkeys method was added in Data::Dumper 2.12_01, so it is
+  # available in 5.8.x and 5.6.2 but not in 5.6.1 or earlier.
+  # Ignore failure of method lookup.
+  eval { $marshall->Sortkeys(1); };
+
+  return $marshall->Dump . "\n";
 }