[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Which Perl versions Autoconf needs [PATCH included]
From: |
Jacob Bachmeyer |
Subject: |
Re: Which Perl versions Autoconf needs [PATCH included] |
Date: |
Wed, 29 Mar 2023 22:45:17 -0500 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.22) Gecko/20090807 MultiZilla/1.8.3.4e SeaMonkey/1.1.17 Mnenhy/0.7.6.0 |
Paul Eggert wrote:
On 2023-03-29 16:32, Jacob Bachmeyer wrote:
Is there anything more needed from me to get similar fixes into
Autoconf?
I started to do that, by installing this:
https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e2220ed33e69d8bc6504e3f6279894afe33a99a5
into Autoconf master on Savannah and then drafting the attached patch.
However, the attached patch is not right, because some other Perl 5.10
code is now in autoconf/build-aux/help-extract.pl (and perhaps a few
other places; I haven't checked). So I did not install this draft patch.
If it's easy to backport help-extract.pl (and etc.?) to older Perl
then feel free to come up with an additional patch set. If not, I
wouldn't worry too much. As Warren mentioned, these old Perls are
getting rare on platforms that users are likely to be running Autoconf
on.
I ran into this issue when testing the latest Autoconf release
candidate on Solaris 10, which ships with Perl 5.8.4. Although Solaris
10 is obsolescent Oracle says they will support it through January 2024.
I have since looked into this a bit further. The standard advice for
these features in Perl is to use POD, which already has a well-developed
system for extracting manpages instead of needing help2man, and the
Pod::Usage module (first included in Perl core in Perl 5.6) for
extracting a help message from embedded POD text. The problem with
using POD here would be the usage block from Autom4te::ChannelDefs.
Further examination led to a simple solution, although I am not entirely
certain what the regexps in the two versions of eval_qq_no_interpolation
are supposed to do exactly:
[patch against current master, commit
e2220ed33e69d8bc6504e3f6279894afe33a99a5 as of this writing]
8<-------
diff --git a/build-aux/help-extract.pl b/build-aux/help-extract.pl
index 83f79da..51cab65 100644
--- a/build-aux/help-extract.pl
+++ b/build-aux/help-extract.pl
@@ -16,10 +16,12 @@
# Written by Zack Weinberg.
-use 5.010;
use strict;
use warnings;
-use File::Spec::Functions qw(catfile);
+
+# File::Spec itself was added in 5.005.
+# File::Spec::Functions was added in 5.6.1 which is just barely too new.
+use File::Spec;
# This script is not intended to be used directly. It's run by
# help2man via wrappers in man/, e.g. man/autoconf.w, as if it were
@@ -48,17 +50,13 @@ sub eval_qq_no_interpolation ($)
# The argument is expected to be a "double quoted string" including the
# leading and trailing delimiters. Returns the text of this string after
# processing backslash escapes but NOT interpolation.
- my $s = $_[0];
-
- # Escape $ and @ inside the string, if they are not already escaped.
- # The regex matches the empty string, but only if it is preceded by an
- # even number of backslashes (including zero) and followed by either a
- # literal $ or a literal @. Then we insert a backslash at the position
- # of the match.
- $s =~ s/ (?:\A|[^\\]) (?:\\\\)* \K (?=[\$\@]) /\\/xg;
-
- # It is now safe to feed the string to 'eval'.
- return eval $s;
+ # / (?<!\\) (?>\\\\)* blah /x means match blah preceded by an
+ # *even* number of backslashes. It would be nice if we could use \K
+ # to exclude the backslashes from the matched text, but that was only
+ # added in Perl 5.10 and we still support back to 5.006.
+ my $text;
+ ($text = $_[0]) =~ s/ (?<!\\) (?>\\\\)* [\$\@] /\\$&/xg;
+ return eval $text;
}
sub extract_channeldefs_usage ($)
@@ -203,8 +201,8 @@ The script-source argument should also be relative to top_sr
my $cmd_name = $source;
$cmd_name =~ s{^.*/([^./]+)\.in$}{$1};
- $source = catfile($top_srcdir, $source);
- $channeldefs_pm = catfile($top_srcdir, $channeldefs_pm);
+ $source = File::Spec->catfile($top_srcdir, $source);
+ $channeldefs_pm = File::Spec->catfile($top_srcdir, $channeldefs_pm);
my $text = extract_assignment ($source, $channeldefs_pm, $what);
$text =~ s/\$0\b/$cmd_name/g;
8<-------
As before, please use my gnu.org address, (<jcb@gnu.org>) for public
attribution for the patch.
-- Jacob
- Re: [bug#61240] [PATCH 2/2] Gracefully degrade if Time::HiRes is not available, (continued)
- Re: [bug#61240] [PATCH 2/2] Gracefully degrade if Time::HiRes is not available, Warren Young, 2023/03/28
- Re: [bug#61240] [PATCH 2/2] Gracefully degrade if Time::HiRes is not available, Jacob Bachmeyer, 2023/03/29
- Re: [bug#61240] [PATCH 2/2] Gracefully degrade if Time::HiRes is not available, Paul Eggert, 2023/03/29
- Message not available
- Which Perl versions Autoconf needs, Paul Eggert, 2023/03/29
- Re: Which Perl versions Autoconf needs, Jacob Bachmeyer, 2023/03/29
- Re: Which Perl versions Autoconf needs, Warren Young, 2023/03/30
- Re: Which Perl versions Autoconf needs, Gavin Smith, 2023/03/30
- Re: Which Perl versions Autoconf needs, Jacob Bachmeyer, 2023/03/30
- Re: Which Perl versions Autoconf needs [PATCH included],
Jacob Bachmeyer <=
- Re: Which Perl versions Autoconf needs [PATCH included], Zack Weinberg, 2023/03/30
- Re: Which Perl versions Autoconf needs [PATCH included], Nick Bowler, 2023/03/30
- Re: Which Perl versions Autoconf needs [PATCH included], Jacob Bachmeyer, 2023/03/30
- Re: Which Perl versions Autoconf needs [PATCH included], Paul Eggert, 2023/03/30
- Re: Which Perl versions Autoconf needs [PATCH included], Jacob Bachmeyer, 2023/03/30
- Re: Which Perl versions Autoconf needs [PATCH included], Paul Eggert, 2023/03/30
- Re: Which Perl versions Autoconf needs [PATCH included], Jacob Bachmeyer, 2023/03/30
- Re: Which Perl versions Autoconf needs [PATCH included], Paul Eggert, 2023/03/31