On 2023-03-30 17:02, Jacob Bachmeyer wrote:
If we did that, the guideline would be that Autoconf users can run with Perl 5.6+ whereas Autoconf developers need 5.10+. This sort of thing is routine.This is a possibility.
OK, let's go with that, as it is a more-conservative change from Autoconf 2.71. I installed the attached, which is close to what I proposed earlier except it leaves help-extract.pl alone (i.e., help-extract.pl continues to use Perl 5.10 features) and it adjusts some commentary.
From 05e295b60cfdf378b7ed8c1f8563a5644d5d4689 Mon Sep 17 00:00:00 2001 From: Paul Eggert <eggert@xxxxxxxxxxx> Date: Fri, 31 Mar 2023 10:55:29 -0700 Subject: [PATCH] Go back to requiring only Perl 5.6+ for users MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit 61901a1a14fd50c03cfb1529d091554376fef286 dated 2022-07-10 bumped the Perl requirement to 5.10 or later, because commit 3a9802d60156809c139e9b4620bf04917e143ee2 dated 2021-08-31 added code using Time::HiRes’s ‘stat’ function, a feature added in Perl 5.8.9+ or Perl 5.10+, and it was hard to find Perl 5.8.9 hosts to test with. Also, requiring Perl 5.10 meant that we could then use operators like Digest::SHA, the // and //= operators, the regexp \K escape, and ‘state’ variables. However, that Time::HiRes code, which was taken from Automake, has recently been made optional by Automake, and it now works again with Perl 5.6. And Autoconf is not yet using any other post-5.6 feature, except when developers run help-extract.pl (something Autoconf users do not use). So relax the Autoconf user requirement back to 5.6 as it was in Autoconf 2.71; although Autoconf developers will need 5.10 or better, Autoconf users can get by with 5.6. I ran into this problem when testing the Autoconf release candidate on Solaris 10, which has Perl 5.8.4. Oracle says Solaris 10’s end-of-life is January 2024, so it’s still (barely) a viable porting target. Of course with Solaris 10 one must install a recent-enough GNU m4, but adding a requirement to also install a recent-enough Perl is a new barrier, and if it’s not needed then it might be better to wait until it is needed (or until 2024 arrives). * NEWS: Update news item about Perl 5.6 vs 5.10. * README-hacking: Bump Perl recommendation to 5.10. * build-aux/fetch.pl: Do not munge imported code to require 5.10. --- NEWS | 11 +++++- README-hacking | 2 +- build-aux/fetch.pl | 1 - configure.ac | 9 ++++- lib/Autom4te/C4che.pm | 2 +- lib/Autom4te/ChannelDefs.pm | 2 +- lib/Autom4te/Channels.pm | 2 +- lib/Autom4te/Config.pm | 2 +- lib/Autom4te/Configure_ac.pm | 2 +- lib/Autom4te/FileUtils.pm | 2 +- lib/Autom4te/General.pm | 2 +- lib/Autom4te/Getopt.pm | 2 +- lib/Autom4te/Request.pm | 2 +- lib/Autom4te/XFile.pm | 2 +- m4/perl-time-hires.m4 | 74 ------------------------------------ tests/mktests.pl | 2 +- 16 files changed, 29 insertions(+), 90 deletions(-) delete mode 100644 m4/perl-time-hires.m4 diff --git a/NEWS b/NEWS index 884e46f4..6a106f15 100644 --- a/NEWS +++ b/NEWS @@ -10,8 +10,15 @@ GNU Autoconf NEWS - User visible changes. means Autoconf no longer supports pre-1989 C compilers, as they do not support function prototypes. -*** Autoconf now requires perl 5.10 (2007) or later. - Generated 'configure' scripts continue to run without perl. +*** Autoconf developers now need Perl 5.10 (2007) or later. + Generated 'configure' scripts continue to run without Perl. + + Although Autoconf users still need only Perl 5.6 (2000) or later, + Perl 5.10 or later is recommended for users too, as it avoids some + trouble with files that have timestamps separated by less than 1 s. + Due to limitations in Perl's API this trouble is not entirely fixed + even with Perl 5.36, which cannot represent timestamps separated by + 238 ns or less, for circa 2023 timestamps on typical platforms. *** Autoconf now requires GNU M4 1.4.8 (2006) or later. Generated 'configure' scripts continue to run without M4. diff --git a/README-hacking b/README-hacking index 55d73a24..fc8d481a 100644 --- a/README-hacking +++ b/README-hacking @@ -17,7 +17,7 @@ tools we depend upon, including: - Automake 1.11+ <https://www.gnu.org/software/automake/> - Help2man 1.29+ <https://www.gnu.org/software/help2man/> - M4 1.4.16+ <https://www.gnu.org/software/m4/> -- Perl 5.006+ <https://www.cpan.org/> +- Perl 5.010+ <https://www.cpan.org/> - Texinfo 4.11+ <https://www.gnu.org/software/texinfo/> The following are useful as well, if you want to be able to run commands diff --git a/build-aux/fetch.pl b/build-aux/fetch.pl index 11102035..f391dcf6 100755 --- a/build-aux/fetch.pl +++ b/build-aux/fetch.pl @@ -240,7 +240,6 @@ sub fetch ($$$$$$) # don't use \s here or it will eat blank lines $content =~ s/[ \t]+$//gm; $content =~ s/\bAutomake::/Autom4te::/g if $edit; - $content =~ s/^use 5\.006;$/use 5.010;/mg if $edit; replace_if_change ($destpath, $content, $quiet); } diff --git a/configure.ac b/configure.ac index 1ec9b2c7..5805d743 100644 --- a/configure.ac +++ b/configure.ac @@ -153,7 +153,14 @@ AM_MISSING_PROG([HELP2MAN], [help2man]) ## ------ ## # We use an absolute name for perl so the #! line in autoscan will work. -AC_PATH_PERL_WITH_TIME_HIRES_STAT +AC_PATH_PROG([PERL], [perl], [no]) +AC_SUBST([PERL])dnl +if test "$PERL" = no; then + AC_MSG_ERROR([perl is not found]) +fi +$PERL -e 'require 5.006;' || { + AC_MSG_ERROR([Perl 5.006 or better is required]) +} # Find out whether the system supports flock # Note this test does not try to find out whether it works with this diff --git a/lib/Autom4te/C4che.pm b/lib/Autom4te/C4che.pm index b4af7974..523f15bf 100644 --- a/lib/Autom4te/C4che.pm +++ b/lib/Autom4te/C4che.pm @@ -31,7 +31,7 @@ This Perl module handles the cache of M4 runs used by autom4te. =cut -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/ChannelDefs.pm b/lib/Autom4te/ChannelDefs.pm index bf6bf617..85ea6f82 100644 --- a/lib/Autom4te/ChannelDefs.pm +++ b/lib/Autom4te/ChannelDefs.pm @@ -44,7 +44,7 @@ shorthand function to output on specific channels. =cut -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/Channels.pm b/lib/Autom4te/Channels.pm index 89f5f71f..a2ed0a0b 100644 --- a/lib/Autom4te/Channels.pm +++ b/lib/Autom4te/Channels.pm @@ -66,7 +66,7 @@ etc.) that can also be overridden on a per-message basis. =cut -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/Config.pm b/lib/Autom4te/Config.pm index 5a800175..941905d1 100644 --- a/lib/Autom4te/Config.pm +++ b/lib/Autom4te/Config.pm @@ -25,7 +25,7 @@ package Autom4te::Config; # and autoconf's build machinery is not prepared to do that. # Revisit after 2.70. -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/Configure_ac.pm b/lib/Autom4te/Configure_ac.pm index fb00682b..a22e8a77 100644 --- a/lib/Autom4te/Configure_ac.pm +++ b/lib/Autom4te/Configure_ac.pm @@ -20,7 +20,7 @@ package Autom4te::Configure_ac; -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/FileUtils.pm b/lib/Autom4te/FileUtils.pm index 2468fe6d..c1e8e8c3 100644 --- a/lib/Autom4te/FileUtils.pm +++ b/lib/Autom4te/FileUtils.pm @@ -34,7 +34,7 @@ This perl module provides various general purpose file handling functions. =cut -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/General.pm b/lib/Autom4te/General.pm index 57a706a7..ba79eff5 100644 --- a/lib/Autom4te/General.pm +++ b/lib/Autom4te/General.pm @@ -32,7 +32,7 @@ used in several executables of the Autoconf package. =cut -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/Getopt.pm b/lib/Autom4te/Getopt.pm index fac5e36f..6ad3dad0 100644 --- a/lib/Autom4te/Getopt.pm +++ b/lib/Autom4te/Getopt.pm @@ -30,7 +30,7 @@ line options in conformance to the GNU Coding standards. =cut -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/Request.pm b/lib/Autom4te/Request.pm index d3af46bc..53f9ad7a 100644 --- a/lib/Autom4te/Request.pm +++ b/lib/Autom4te/Request.pm @@ -32,7 +32,7 @@ used in several executables of the Autoconf and Automake packages. =cut -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/lib/Autom4te/XFile.pm b/lib/Autom4te/XFile.pm index d6a8602d..5c9c07ea 100644 --- a/lib/Autom4te/XFile.pm +++ b/lib/Autom4te/XFile.pm @@ -69,7 +69,7 @@ and C<getlines> methods to translate C<\r\n> to C<\n>. =cut -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; diff --git a/m4/perl-time-hires.m4 b/m4/perl-time-hires.m4 deleted file mode 100644 index 2d9e64ec..00000000 --- a/m4/perl-time-hires.m4 +++ /dev/null @@ -1,74 +0,0 @@ -# perl-time-hires.m4 serial 1 - -# Copyright (C) 2022-2023 Free Software Foundation, Inc. - -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. This file is offered as-is, -# without warranty of any kind. - -# AClocal_PATH_PROG_GLOBS_FEATURE_CHECK -# --------------------------------- -# Like AC_PATH_PROGS_FEATURE_CHECK, but each of 'progs-to-check-for' may -# be a shell glob, which is expanded once for each path entry. -# That is, AClocal_PATH_PROG_GLOBS_FEATURE_CHECK([PERL], [perl-*]) will -# test each program named something like 'perl-*' found anywhere on the -# path. Due to the syntax conflict with Autoconf string quoting, -# character sets (e.g. perl-[56]*) are not supported. -m4_define([AClocal_PATH_PROG_GLOBS_FEATURE_CHECK], -[if test -z "$$1"; then - ac_path_$1_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - dnl AS_ESCAPE has been excessively optimized and does not work for anything - dnl other than constructing strings. I have not been able to figure out how - dnl to get [ and ] through this process without mangling them, so - dnl character sets are not supported for now. - _AS_PATH_WALK([$5], - [for ac_prog in m4_bpatsubst([$2], [[!?*]], [\\\&]) - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_pathglob_$1="$as_dir$ac_prog$ac_exec_ext" - for ac_path_$1 in $ac_pathglob_$1; do - AS_EXECUTABLE_P(["$ac_path_$1"]) || continue -$3 - $ac_path_$1_found && break 4 - done - done - done])dnl - if test -z "$ac_cv_path_$1"; then - m4_default([$4], - [AC_MSG_ERROR([no acceptable m4_bpatsubst([$2], [ .*]) could be dnl -found in m4_default([$5], [\$PATH])])]) - fi -else - ac_cv_path_$1=$$1 -fi -]) - -# AC_PATH_PERL_WITH_TIME_HIRES_STAT -# --------------------------------- -# Check for a version of perl that supports Time::HiRes::stat. -# This was added to perl core in 5.10 and it's convenient to -# have a consistent 'use 5.0xx' baseline for all the perl scripts, -# so that is the version we require, even though technically we -# could be getting away with 5.8 or even 5.6 in many of the scripts. -# (Note: Files shared with Automake do not necessarily use our baseline.) -AC_DEFUN([AC_PATH_PERL_WITH_TIME_HIRES_STAT], - [AC_ARG_VAR([PERL], [Location of Perl 5.10 or later. Defaults to - the first program named 'perl', 'perl5*', or 'perl-5.*' on the PATH - that meets Autoconf's needs.]) - AC_CACHE_CHECK([for Perl >=5.10.0 with Time::HiRes::stat], - [ac_cv_path_PERL], - [AClocal_PATH_PROG_GLOBS_FEATURE_CHECK( - [PERL], [perl perl5* perl-5.*], - [AS_ECHO("$as_me:${as_lineno-$LINENO}: trying $ac_path_PERL") \ - >&AS_MESSAGE_LOG_FD - $ac_path_PERL >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD -e ' - use 5.010; - use Time::HiRes qw(stat); - 1;' \ - && ac_cv_path_PERL=$ac_path_PERL ac_path_PERL_found=:], - [AC_MSG_ERROR([no acceptable perl could be found in \$PATH. -Perl 5.10.0 or later is required, with Time::HiRes::stat.])])]) - PERL=$ac_cv_path_PERL -]) diff --git a/tests/mktests.pl b/tests/mktests.pl index db6087ad..effed0bc 100644 --- a/tests/mktests.pl +++ b/tests/mktests.pl @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. -use 5.010; +use 5.006; use strict; use warnings FATAL => 'all'; -- 2.37.2