Skip to content

perl: update to 5.42.1 - #6136

Merged
lazka merged 9 commits into
msys2:masterfrom
dscho:upgrade-perl-to-v5.42
Apr 2, 2026
Merged

perl: update to 5.42.1#6136
lazka merged 9 commits into
msys2:masterfrom
dscho:upgrade-perl-to-v5.42

Conversation

@dscho

@dscho dscho commented Mar 29, 2026

Copy link
Copy Markdown
Contributor

Updates Perl from 5.40.3 to 5.42.1.

The MSYS2-specific patches were rebased onto the new source tree (and renumbered from 0002-0007 to 0001-0006 while at it). Two conflicts came up during the rebase: in dist/Net-Ping/t/450_service.t, upstream 5.42.1 already added cygwin to the TODO skip list, making our hunk redundant, so it was dropped. In hints/cygwin.sh, upstream removed -U__STRICT_ANSI__; we kept our -DPERL_USE_SAFE_PUTENV alongside the remaining -D_GNU_SOURCE.

The patchprov script needed updating because Perl 5.42 uses a new version declaration style (package Name v1.2.3;) and the podlators distribution no longer ships a VERSION file. The core logic (scrape_verln, dist_srcpath) was synced with Arch Linux's version, with two additional changes: podlators was added to the %distmods table (mapping it to Pod::Man so the version can be found), and pkgspec gained explicit v-string handling via version->parse() because bare eval of a v-string literal produces a binary byte string rather than the human-readable version number. The tr/A-Z/a-z/ line was left commented out to preserve the mixed-case convention in the provides array.

The provides array was regenerated from the new source tree. Test2-Suite is no longer bundled in core.

dscho added 2 commits March 29, 2026 21:25
This was lost somewhere along the way, even if it was present in the
original patches in Git for Windows' fork.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In 2f9bedc (perl: Update to 5.38.2, 2023-12-05), the first patch was
dropped, but the remainder of the patch files was never renumbered.

Let's do that now, to enable easier maintenance of the remaining
patch files: This way, they can be applied into a Git worktree that
imported the vanilla Perl tar archive, and then can be re-exported via

  git -C path/to/worktree format-patch -o $PWD -6 --no-signature

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@dscho

dscho commented Mar 29, 2026

Copy link
Copy Markdown
Contributor Author

Full disclosure: This does not completely pass the tests. But one thing first: I guess the PERL_USE_SAFE_PUTENV part is not needed:

In file included from ExtTest.xs:2:
../../../../perl.h:1088:9: warning: 'PERL_USE_SAFE_PUTENV' redefined
 1088 | #define PERL_USE_SAFE_PUTENV
      |         ^~~~~~~~~~~~~~~~~~~~
<command-line>: note: this is the location of the previous definition
Here are the failures:
# Failed test 32 - -l \*foo is a file name at op/filetest.t line 135
#      got ""
# expected "1"
op/filetest.t ........................................................ 
Failed 1/436 subtests 
[...]
# Failed test 32 - -l at op/stat.t line 246
# Failed test 37 - ls and -c agreeing on /dev (19 20) at op/stat.t line 320
#      got "19"
# expected "20"
# = before
# total 0
# crw-rw-rw- 1 dscho 4096  13, 254 Dec  1  2006 clipboard
# dr-xr-xr-x 1 dscho 4096        0 Mar 29 22:13 disk
# crw-rw-rw- 1 dscho 4096  14,   3 Mar 29 22:13 dsp
# lrwxrwxrwx 1 dscho 4096        0 Mar 29 22:13 fd -> /proc/self/fd
# crw-rw-rw- 1 dscho 4096   1,   7 Mar 29 22:13 full
# crw-rw-rw- 1 dscho 4096  14,   0 Mar 29 22:13 mixer
# drwxr-xr-x 1 dscho 4096        0 Dec  5  2024 mqueue
# crw-rw-rw- 1 dscho 4096   1,   3 Mar 29 22:13 null
# crw-rw-rw- 1 dscho 4096   5,   2 Mar 29 22:13 ptmx
# crw------- 1 dscho 4096 136,   0 Mar 29 22:13 pty0
# crw------- 1 dscho 4096 136,   1 Mar 29 22:13 pty1
# crw------- 1 dscho 4096 136,   2 Mar 29 22:13 pty2
# crw------- 1 dscho 4096 136,   3 Mar 29 22:13 pty3
# crw------- 1 dscho 4096 136,   4 Mar 29 22:13 pty4
# crw------- 1 dscho 4096 136,   5 Mar 29 22:13 pty5
# crw------- 1 dscho 4096 136,   6 Mar 29 22:13 pty6
# crw------- 1 dscho 4096 136,   7 Mar 29 22:13 pty7
# crw-rw-rw- 1 dscho 4096   1,   8 Mar 29 22:13 random
# brw-rw-rw- 1 dscho 4096   8,   0 Mar 29 22:13 sda
# brw-rw-rw- 1 dscho 4096   8,   1 Mar 29 22:13 sda1
# brw-rw-rw- 1 dscho 4096   8,   2 Mar 29 22:13 sda2
# brw-rw-rw- 1 dscho 4096   8,   3 Mar 29 22:13 sda3
# brw-rw-rw- 1 dscho 4096   8,   4 Mar 29 22:13 sda4
# brw-rw-rw- 1 dscho 4096   8,  16 Mar 29 22:13 sdb
# brw-rw-rw- 1 dscho 4096   8,  17 Mar 29 22:13 sdb1
# brw-rw-rw- 1 dscho 4096   8,  18 Mar 29 22:13 sdb2
# drwxr-xr-x 1 dscho 4096        0 Dec  5  2024 shm
# lrwxrwxrwx 1 dscho 4096        0 Mar 29 22:13 stderr -> /proc/self/fd/2
# lrwxrwxrwx 1 dscho 4096        0 Mar 29 22:13 stdin -> /proc/self/fd/0
# lrwxrwxrwx 1 dscho 4096        0 Mar 29 22:13 stdout -> /proc/self/fd/1
# crw------- 1 dscho 4096   5,   0 Mar 29 22:13 tty
# crw-rw-rw- 1 dscho 4096   1,   9 Mar 29 22:13 urandom
# crw-rw-rw- 1 dscho 4096  13, 255 Mar 29 22:13 windows
# crw-rw-rw- 1 dscho 4096   1,   5 Mar 29 22:13 zero
# -
# .
# mqueue
# shm
# clipboard
# disk
# dsp
# fd
# full
# mixer
# null
# ptmx
# pty0
# pty1
# pty2
# pty3
# pty4
# pty5
# pty6
# pty7
# random
# stdin
# tty
# urandom
# windows
# zero
# sda
# sda1
# sda2
# sda3
# sda4
# sdb
# sdb1
# sdb2
# = after
# crw-rw-rw- 1 dscho 4096  13, 254 Dec  1  2006 clipboard
# crw-rw-rw- 1 dscho 4096  14,   3 Mar 29 22:13 dsp
# crw-rw-rw- 1 dscho 4096   1,   7 Mar 29 22:13 full
# crw-rw-rw- 1 dscho 4096  14,   0 Mar 29 22:13 mixer
# crw-rw-rw- 1 dscho 4096   1,   3 Mar 29 22:13 null
# crw-rw-rw- 1 dscho 4096   5,   2 Mar 29 22:13 ptmx
# crw------- 1 dscho 4096 136,   0 Mar 29 22:13 pty0
# crw------- 1 dscho 4096 136,   1 Mar 29 22:13 pty1
# crw------- 1 dscho 4096 136,   2 Mar 29 22:13 pty2
# crw------- 1 dscho 4096 136,   3 Mar 29 22:13 pty3
# crw------- 1 dscho 4096 136,   4 Mar 29 22:13 pty4
# crw------- 1 dscho 4096 136,   5 Mar 29 22:13 pty5
# crw------- 1 dscho 4096 136,   6 Mar 29 22:13 pty6
# crw------- 1 dscho 4096 136,   7 Mar 29 22:13 pty7
# crw-rw-rw- 1 dscho 4096   1,   8 Mar 29 22:13 random
# crw------- 1 dscho 4096   5,   0 Mar 29 22:13 tty
# crw-rw-rw- 1 dscho 4096   1,   9 Mar 29 22:13 urandom
# crw-rw-rw- 1 dscho 4096  13, 255 Mar 29 22:13 windows
# crw-rw-rw- 1 dscho 4096   1,   5 Mar 29 22:13 zero
# -
# clipboard
# dsp
# full
# mixer
# null
# ptmx
# pty0
# pty1
# pty2
# pty3
# pty4
# pty5
# pty6
# pty7
# random
# stdin
# tty
# urandom
# windows
# zero
# =
op/stat.t ............................................................ 
Failed 2/111 subtests 
	(less 18 skipped subtests: 91 okay)
[...]
Making symbolic link '/usr/src/MSYS2-packages/msys2/perl/src/perl-5.42.1/cpan/Archive-Tar/t/tmp/a/b/link.txt' to '../c/ori.txt' failed at t/04_resolved_issues.t line 225.
Could not extract 'tmp/a/b/link.txt' at t/04_resolved_issues.t line 225.

#   Failed test '   In memory extraction/symlinks'
#   at t/04_resolved_issues.t line 226.

#   Failed test '       Linked content'
#   at t/04_resolved_issues.t line 227.
Making symbolic link '/usr/src/MSYS2-packages/msys2/perl/src/perl-5.42.1/cpan/Archive-Tar/t/tmp/a/b/link.txt' to '../c/ori.txt' failed at t/04_resolved_issues.t line 239.

#   Failed test '   From disk extraction/symlinks'
#   at t/04_resolved_issues.t line 241.
# Looks like you failed 3 tests of 61.
../cpan/Archive-Tar/t/04_resolved_issues.t ........................... 
Dubious, test returned 3 (wstat 768, 0x300)
Failed 3/61 subtests 
[...]

#   Failed test '... file->lstat set'
#   at t/source.t line 275.
#          got: '0'
#     expected: '13'
# Looks like you failed 1 test of 45.
../cpan/Test-Harness/t/source.t ...................................... 
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/45 subtests 
[...]
#   Failed test 'Cwd::abs_path produced /usr/src/MSYS2-packages/msys2/perl/src/perl-5.42.1/dist/PathTools/t/linktest'
#   at t/cwd.t line 214.
#                   '/usr/src/MSYS2-packages/msys2/perl/src/perl-5.42.1/dist/PathTools/t/linktest'
#     doesn't match '(?^i:\/usr\/src\/MSYS2\-packages\/msys2\/perl\/src\/perl\-5\.42\.1\/dist\/PathTools\/t\/_ptrslt_\/_path_\/_to_\/_a_\/_dir_$)'

#   Failed test 'Cwd::fast_abs_path produced /usr/src/MSYS2-packages/msys2/perl/src/perl-5.42.1/dist/PathTools/t/linktest'
#   at t/cwd.t line 215.
#                   '/usr/src/MSYS2-packages/msys2/perl/src/perl-5.42.1/dist/PathTools/t/linktest'
#     doesn't match '(?^i:\/usr\/src\/MSYS2\-packages\/msys2\/perl\/src\/perl\-5\.42\.1\/dist\/PathTools\/t\/_ptrslt_\/_path_\/_to_\/_a_\/_dir_$)'
# Looks like you failed 2 tests of 31.
../dist/PathTools/t/cwd.t ............................................ 
Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/31 subtests 
	(less 1 skipped subtest: 28 okay)
[...]
# Failed test 13 - all of BEGIN END INIT CHECK UNITCHECK -exec at t/optree_specials.t line 371
#      got 'sh: line 1: ../../t/perl.exe: Permission denied\n'
# expected /(?^ms:^BEGIN 1:
# 1  <;> (?:next|db)state\([^()]*?\) v:\*,&,\{,x\*,x&,x\$,\$
# 2  <\$> const\[PV ".*?"\] s/BARE
# 3  <1> require sK/1
# 4  <;> (?:next|db)state\([^()]*?\) :\*,&,\{,x\*,x&,x\$,\$
# 5  <0> pushmark s
# 6  <\$> const\[PV ".*?"\] sM
# 7  <\$> const\[PV ".*?"\] sM
# 8  <\.> method_named\[PV ".*?"\] 
# 9  <1> entersub\[t\d+\] KRS/TARG,STRICT
# a  <1> leavesub\[\d+ refs?\] K/REFC,1
# BEGIN 2:
# b  <;> (?:next|db)state\([^()]*?\) v:\*,&,\{,x\*,x&,x\$
# c  <\$> const\[PV ".*?"\] s/BARE
# d  <1> require sK/1
# e  <;> (?:next|db)state\([^()]*?\) :\*,&,\{,x\*,x&,x\$
# f  <0> pushmark s
# g  <\$> const\[PV ".*?"\] sM
# h  <\$> const\[PV ".*?"\] sM
# i  <\.> method_named\[PV ".*?"\] 
# j  <1> entersub\[t\d+\] KRS/TARG
# k  <1> leavesub\[\d+ refs?\] K/REFC,1
# BEGIN 3:
# l  <;> (?:next|db)state\([^()]*?\) v:\*,&,\{,x\*,x&,x\$,\$
# m  <\#> gv\[\*STDOUT\] s
# n  <1> rv2gv sKRM/STRICT,1
# o  <1> srefgen sK/1
# p  <\#> gvsv\[\*B::Concise::walkHandle\] s
# q  <2> sassign sKS/2
# r  <1> leavesub\[\d+ refs?\] K/REFC,1
# BEGIN 4:
# s  <;> (?:next|db)state\([^()]*?\) v:\*,&,x\*,x&,x\$,\$
# t  <\$> const\[PV ".*?"\] s/BARE
# u  <1> require sK/1
# v  <;> (?:next|db)state\([^()]*?\) :\*,&,x\*,x&,x\$,\$
# w  <0> pushmark s
# x  <\$> const\[PV ".*?"\] sM
# y  <\$> const\[PV ".*?"\] sM
# z  <\.> method_named\[PV ".*?"\] 
# 10 <1> entersub\[t\d+\] KRS/TARG,STRICT
# 11 <1> leavesub\[\d+ refs?\] K/REFC,1
# BEGIN 5:
# 12 <;> (?:next|db)state\([^()]*?\) v:\*,&,x\*,x&,x\$,\$
# 13 <\$> const\[PV ".*?"\] s/BARE
# 14 <1> require sK/1
# 15 <;> (?:next|db)state\([^()]*?\) :\*,&,x\*,x&,x\$,\$
# 16 <0> pushmark s
# 17 <\$> const\[PV ".*?"\] sM
# 18 <\$> const\[PV ".*?"\] sM
# 19 <\.> method_named\[PV ".*?"\] 
# 1a <1> entersub\[t\d+\] KRS/TARG,STRICT
# 1b <1> leavesub\[\d+ refs?\] K/REFC,1
# BEGIN 6:
# 1c <;> (?:next|db)state\([^()]*?\) v:\*,&,\{,x\*,x&,x\$,\$
# 1d <\$> const\[PV ".*?"\] s/BARE
# 1e <1> require sK/1
# 1f <;> (?:next|db)state\([^()]*?\) :\*,&,\{,x\*,x&,x\$,\$
# 1g <0> pushmark s
# 1h <\$> const\[PV ".*?"\] sM
# 1i <\$> const\[PV ".*?"\] sM
# 1j <\.> method_named\[PV ".*?"\] 
# 1k <1> entersub\[t\d+\] KRS/TARG,STRICT
# 1l <1> leavesub\[\d+ refs?\] K/REFC,1
# BEGIN 7:
# 1m <;> (?:next|db)state\([^()]*?\) v:\*,&,x\*,x&,x\$,\$
# 1n <\$> const\[PV ".*?"\] s/BARE
# 1o <1> require sK/1
# 1p <;> (?:next|db)state\([^()]*?\) :\*,&,x\*,x&,x\$,\$
# 1q <0> pushmark s
# 1r <\$> const\[PV ".*?"\] sM
# 1s <\$> const\[PV ".*?"\] sM
# 1t <\.> method_named\[PV ".*?"\] 
# 1u <1> entersub\[t\d+\] KRS/TARG,STRICT
# 1v <1> leavesub\[\d+ refs?\] K/REFC,1
# BEGIN 8:
# 1w <;> (?:next|db)state\([^()]*?\) v:\*,&,\{,x\*,x&,x\$,\$
# 1x <\$> const\[PV ".*?"\] s/BARE
# 1y <1> require sK/1
# 1z <;> (?:next|db)state\([^()]*?\) :\*,&,\{,x\*,x&,x\$,\$
# 20 <0> pushmark s
# 21 <\$> const\[PV ".*?"\] sM
# 22 <\$> const\[PV ".*?"\] sM
# 23 <\.> method_named\[PV ".*?"\] 
# 24 <1> entersub\[t\d+\] KRS/TARG,STRICT
# 25 <1> leavesub\[\d+ refs?\] K/REFC,1
# BEGIN 9:
# 26 <;> (?:next|db)state\([^()]*?\) v:\{
# 27 <\#> gvsv\[\*beg\] s
# 28 <1> postinc\[t\d+\] sK/1
# 29 <1> leavesub\[\d+ refs?\] K/REFC,1
# END 1:
# 2a <;> (?:next|db)state\([^()]*?\) v:\{
# 2b <\#> gvsv\[\*end\] s
# 2c <1> postinc\[t\d+\] sK/1
# 2d <1> leavesub\[\d+ refs?\] K/REFC,1
# INIT 1:
# 2e <;> (?:next|db)state\([^()]*?\) v:\{
# 2f <\#> gvsv\[\*init\] s
# 2g <1> postinc\[t\d+\] sK/1
# 2h <1> leavesub\[\d+ refs?\] K/REFC,1
# CHECK 1:
# 2i <;> (?:next|db)state\([^()]*?\) v:\{
# 2j <\#> gvsv\[\*chk\] s
# 2k <1> postinc\[t\d+\] sK/1
# 2l <1> leavesub\[\d+ refs?\] K/REFC,1
# UNITCHECK 1:
# 2m <;> (?:next|db)state\([^()]*?\) v:\{
# 2n <\#> gvsv\[\*uc\] s
# 2o <1> postinc\[t\d+\] sK/1
# 2p <1> leavesub\[\d+ refs?\] K/REFC,1
# $)/
# got:		'sh: line 1: ../../t/perl.exe: Permission denied'
# want:	 (?^:BEGIN 1:)
# remainder:
# sh: line 1: ../../t/perl.exe: Permission denied
# these lines not matched:
# sh: line 1: ../../t/perl.exe: Permission denied
../ext/B/t/optree_specials.t ......................................... 
Failed 1/15 subtests 
[...]

#   Failed test 'count_tb incremented'
#   at t/find.t line 316.
#          got: '8'
#     expected: '6'

#   Failed test 'count_tb incremented'
#   at t/find.t line 335.
#          got: '8'
#     expected: '6'

#   Failed test 'found fb_ord for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fba for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fba_ord for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fb_ord for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fba for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fba_ord for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fa/fsl/fb_ord for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fa/fsl/fba for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fa/fsl/fba/fba_ord for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found ./fa/fsl/fb_ord for $File::Find::name, as expected'
#   at t/find.t line 193.

#   Failed test 'found ./fa/fsl/fba/fba_ord for $File::Find::name, as expected'
#   at t/find.t line 193.

#   Failed test 'found ./fa/fsl/fba for $File::Find::name, as expected'
#   at t/find.t line 193.

#   Failed test 'found ./fa/fsl/fb_ord for $_, as expected'
#   at t/find.t line 205.

#   Failed test 'found ./fa/fsl/fba/fba_ord for $_, as expected'
#   at t/find.t line 205.

#   Failed test 'found ./fa/fsl/fba for $_, as expected'
#   at t/find.t line 205.

#   Failed test 'found . for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fb_ord for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fba for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'found fba_ord for $_, as expected'
#   at t/find.t line 168.

#   Failed test 'COMPLETE: top dir can be symlink to dir; link not followed without 'follow' option'
#   at t/find.t line 576.
#          got: '1'
#     expected: '0'

#   Failed test 'found . for $_, as expected'
#   at t/find.t line 205.

#   Failed test 'Got expected warning message re dangling symbolic link'
#   at t/find.t line 728.
#                   undef
#     doesn't match '(?^:dangling_file_sl is a dangling symbolic link)'

#   Failed test 'able to symlink from ../faa to fa/faa/faa_sl'
#   at t/lib/Testing.pm line 37.
Unable to symlink from ../faa to fa/faa/faa_sl at t/lib/Testing.pm line 37.
# Tests were run but no plan was declared and done_testing() was not seen.
# Looks like your test exited with 92 just after 197.
../ext/File-Find/t/find.t ............................................ 
Dubious, test returned 92 (wstat 23552, 0x5c00)
Failed 25/197 subtests 
[...]

#   Failed test 'found fb_ord for $_, as expected'
#   at t/taint.t line 152.

#   Failed test 'found fba for $_, as expected'
#   at t/taint.t line 152.

#   Failed test 'found fba_ord for $_, as expected'
#   at t/taint.t line 152.
# Looks like you planned 48 tests but ran 51.
# Looks like you failed 3 tests of 51 run.
../ext/File-Find/t/taint.t ........................................... 
Dubious, test returned 3 (wstat 768, 0x300)
Failed 3/48 subtests 
[...]

#   Failed test 'copy to itself (via symlink) fails'
#   at ../lib/File/Copy.t line 172.

#   Failed test 'emits a warning'
#   at ../lib/File/Copy.t line 174.
#                   ''
#     doesn't match '(?^:are identical)'

#   Failed test 'copy to itself (via symlink) fails'
#   at ../lib/File/Copy.t line 172.

#   Failed test 'emits a warning'
#   at ../lib/File/Copy.t line 174.
#                   ''
#     doesn't match '(?^:are identical)'
# Looks like you failed 4 tests of 466.
../lib/File/Copy.t ................................................... 
Dubious, test returned 4 (wstat 1024, 0x400)
Failed 4/466 subtests 
	(less 342 skipped subtests: 120 okay)
[...]
# Failed test 1 - config information dumped with -d at ../lib/perlbug.t line 51
#      got ''
# expected /(?^:Site configuration information)/
# Failed test 2 - full config information dumped with -d -v at ../lib/perlbug.t line 58
#      got ''
# expected /(?^:Complete configuration data)/
# Failed test 3 - checks for terminal in non-test mode at ../lib/perlbug.t line 65
#      got ''
# expected /(?^:Please use perlbug interactively.)/
# Failed test 4 - build report saved at ../lib/perlbug.t line 72
#      got ''
# expected /(?^:Report saved)/
# Failed test 5 - saved report test.rep exists at ../lib/perlbug.t line 28
# Failed test 6 - build report looks sane at ../lib/perlbug.t line 73
#      got ''
# expected /(?^:Perl reported to build OK on this system)/
../lib/Pod/t/Usage.t ................................................. ok
# Failed test 7 - build failure report saved at ../lib/perlbug.t line 85
#      got ''
# expected /(?^:Report saved)/
# Failed test 8 - saved report test.rep exists at ../lib/perlbug.t line 28
# Failed test 9 - build failure report looks sane at ../lib/perlbug.t line 86
#      got ''
# expected /(?^:This is a build failure report for perl)/
../lib/sigtrap.t ..................................................... ok
# Failed test 10 - fake bug report saved at ../lib/perlbug.t line 107
#      got ''
# expected /(?^:Report saved)/
# Failed test 11 - saved report test.rep exists at ../lib/perlbug.t line 28
# Failed test 12 - Subject included in fake bug report at ../lib/perlbug.t line 109
#      got ''
# expected /(?^:Subject: testingperlbug)/
# Failed test 13 - body included in fake bug report at ../lib/perlbug.t line 111
#      got ''
# expected /(?^:testreportbody)/
# Failed test 16 - fake bug report saved at ../lib/perlbug.t line 139
#      got ''
# expected /(?^:Report saved)/
# Failed test 17 - saved report test.rep exists at ../lib/perlbug.t line 28
# Failed test 18 - Subject included in fake bug report at ../lib/perlbug.t line 142
#      got ''
# expected /(?^:Subject: testing perlbug)/
# Failed test 19 - body included in fake bug report at ../lib/perlbug.t line 144
#      got ''
# expected /(?^:AAAAAAAAA)/
# Failed test 20 - attachment included in fake bug report at ../lib/perlbug.t line 145
#      got ''
# expected /(?^:BBBBBBBBB)/
# Failed test 22 - long attachment lines are not wrapped: maxlen 0 at ../lib/perlbug.t line 160
[...]
Failed 19/25 subtests 
LC_TIME: 'use I18N::Langinfo qw(langinfo
    ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7
    ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
    ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12
    DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7
    MON_1 MON_2 MON_3 MON_4 MON_5 MON_6
    MON_7 MON_8 MON_9 MON_10 MON_11 MON_12
    D_FMT D_T_FMT T_FMT);
no warnings "uninitialized";
join "|",
    map { langinfo($_) }
        ABDAY_1,ABDAY_2,ABDAY_3,ABDAY_4,ABDAY_5,
        ABDAY_6,ABDAY_7,
        ABMON_1,ABMON_2,ABMON_3,ABMON_4,ABMON_5,
        ABMON_6, ABMON_7,ABMON_8,ABMON_9,ABMON_10,
        ABMON_11,ABMON_12,
        DAY_1,DAY_2,DAY_3,DAY_4,DAY_5,DAY_6,DAY_7,
        MON_1,MON_2,MON_3,MON_4,MON_5,MON_6, MON_7,
        MON_8,MON_9,MON_10,MON_11,MON_12,
        D_FMT,D_T_FMT,T_FMT;
': locale.c: 6617: panic: nl_langinfo returned empty for 14 in supposed locale 
'bs_BA'; which really is
'LC_CTYPE=bs_BA;LC_NUMERIC=C;LC_COLLATE=bs_BA;LC_TIME=bs_BA;LC_MESSAGES=bs_BA;LC_MONETARY=bs_BA'
 codeset is 'ISO-8859-2'; radix='.'; January=''; strtod(1,5)=1, strtod(1.5)=1,5
; errno=138
# Looks like you planned 2 tests but ran 1.
../lib/locale_threads.t .............................................. 
Dubious, test returned 138 (wstat 35328, 0x8a00)
Failed 1/2 subtests 
../dist/threads-shared/t/waithires.t ................................. ok

Test Summary Report
-------------------
op/filetest.t                                                      (Wstat: 0 Tests: 436 Failed: 1)
  Failed test:  32
op/stat.t                                                          (Wstat: 0 Tests: 111 Failed: 2)
  Failed tests:  32, 37
op/sprintf2.t                                                      (Wstat: 0 Tests: 1704 Failed: 0)
  TODO passed:   1704
re/pat.t                                                           (Wstat: 0 Tests: 1295 Failed: 0)
  TODO passed:   1147
re/pat_thr.t                                                       (Wstat: 0 Tests: 1295 Failed: 0)
  TODO passed:   1147
run/todo.t                                                         (Wstat: 0 Tests: 6 Failed: 0)
  TODO passed:   3-4
../cpan/Archive-Tar/t/04_resolved_issues.t                         (Wstat: 768 (exited 3) Tests: 61 Failed: 3)
  Failed tests:  46-48
  Non-zero exit status: 3
../cpan/IO-Socket-IP/t/11sockopts.t                                (Wstat: 0 Tests: 4 Failed: 0)
  TODO passed:   1-2
../cpan/Test-Harness/t/source.t                                    (Wstat: 256 (exited 1) Tests: 45 Failed: 1)
  Failed test:  39
  Non-zero exit status: 1
../dist/PathTools/t/cwd.t                                          (Wstat: 512 (exited 2) Tests: 31 Failed: 2)
  Failed tests:  23-24
  Non-zero exit status: 2
../ext/B/t/optree_specials.t                                       (Wstat: 0 Tests: 15 Failed: 1)
  Failed test:  13
../ext/File-Find/t/find.t                                          (Wstat: 23552 (exited 92) Tests: 197 Failed: 25)
  Failed tests:  25, 29, 38-40, 50-52, 63-65, 74-76, 92-94
                121-125, 182, 196-197
  Non-zero exit status: 92
  Parse errors: No plan found in TAP output
../ext/File-Find/t/taint.t                                         (Wstat: 768 (exited 3) Tests: 51 Failed: 6)
  Failed tests:  29-31, 49-51
  Non-zero exit status: 3
  Parse errors: Bad plan.  You planned 48 tests but ran 51.
../lib/File/Copy.t                                                 (Wstat: 1024 (exited 4) Tests: 466 Failed: 4)
  Failed tests:  28-29, 61-62
  Non-zero exit status: 4
../lib/perlbug.t                                                   (Wstat: 0 Tests: 25 Failed: 19)
  Failed tests:  1-13, 16-20, 22
../lib/locale_threads.t                                            (Wstat: 35328 (exited 138) Tests: 1 Failed: 0)
  Non-zero exit status: 138
  Parse errors: Bad plan.  You planned 2 tests but ran 1.
Files=2937, Tests=1351642, 2178 wallclock secs (338.78 usr 165.50 sys + 3808.12 cusr 3150.91 csys = 7463.31 CPU)
Result: FAIL

Here is the full output: makepkg-check.txt

I am just going ahead and assume that those test failures are not actually critical ;-)

@dscho

dscho commented Mar 29, 2026

Copy link
Copy Markdown
Contributor Author

Also: https://metacpan.org/dist/perl/view/pod/perl.pod already lists v2.54.2, but https://www.cpan.org/src/5.0/perl-5.42.2.tar.xz.sha256.txt currently still 404s.

dscho added 5 commits March 30, 2026 15:00
This version was just made available.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Sync the `scrape_verln` function with the version at
https://gitlab.archlinux.org/archlinux/packaging/packages/perl/-/blob/main/patchprov
which combines the VERSION and package-declaration patterns into a
single conditional and skips lines where the match is followed by a
comment or semicolon (indicating that the version is computed rather
than literal).

Also import from Arch Linux the `dumb_modpath` fallback for
`__ModuleName__.pm` file naming (used by some distributions).

Two additional changes go beyond what Arch Linux carries. First,
`podlators` is added to the `%distmods` special-case hash so it
resolves to `Pod::Man`. Starting with Perl 5.42, the `podlators`
distribution no longer ships a `VERSION` file, so `dist_srcpath` needs
this mapping to locate `lib/Pod/Man.pm` instead. Second, `pkgspec`
gains explicit v-string handling: when the scraped version starts with
`v` (as in `package Pod::Man v6.0.2;`), it is parsed through
`version->parse()->normal` instead of bare `eval`. A bare `eval` of a
v-string literal produces a binary byte string (e.g. "\x06\x00\x02")
rather than the human-readable "6.0.2", which corrupted the PKGBUILD
with embedded NUL bytes.

The Arch Linux patchprov avoids this problem by also lowercasing all
distribution names (`$dist =~ tr/A-Z/a-z/`), which is left commented
out here to preserve the mixed-case convention this PKGBUILD has always
used for its `provides` array.

Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Generated by running ./patchprov against the extracted perl-5.42.1
source tree. Notable changes: Test2-Suite is no longer bundled in
core (it was split out), and many bundled distributions received
version bumps.

Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Perl 5.42 ships ExtUtils::MakeMaker 7.76, which changed the
pm_to_blib Makefile rule from a single-line perl invocation to a
multi-line one with several -e arguments separated by continuation
backslashes. The new format adds argument-validation logic that
searches for a "--" delimiter in @argv.

irssi has its own Makefile_silent.pm that post-processes the
MakeMaker-generated Makefile to inject automake-style silent-rule
variables. Its pm_to_blib override uses a regex to replace $(NOECHO)
with $(PL_AM_V_BLIB) (which expands to an echo command when V=0).
The regex anchors at the start of a line and matches through to
"-e 'pm_to_blib", but because "." does not cross newlines, it cannot
reach from the $(NOECHO) on the first line to the -e 'pm_to_blib on a
later continuation line. Instead it matches only the continuation line
itself, injecting the echo command mid-argument-list. When V=0, the
expansion "@echo BLIB pm_to_blib;" splits the shell command at the
semicolon, and the perl one-liner receives "@echo", "BLIB",
"pm_to_blib" as arguments instead of the expected "--" delimiter,
producing: "Failed to find -- in @echo|BLIB|pm_to_blib".

The fix adds "(.*\\\n)*?" before the ".*-e" in the regex so it can
consume zero or more continuation lines (reluctantly) before reaching
the one containing -e 'pm_to_blib. This lets the match start at the
$(NOECHO) line and the replacement correctly places $(PL_AM_V_BLIB)
there, as intended.

irssi upstream closed this as Won't Fix
(irssi/irssi#1571) because autotools support
is being removed in irssi 1.5 in favor of meson. Since 1.4.5 is
the latest release and MSYS2 still uses the autotools build, we carry
this patch until the next irssi version.

Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho added 2 commits March 30, 2026 22:14
SWIG 4.4 dropped the SWIG_NULLPTR define that znc's modpython codegen
relied on to detect SWIG >= 4.2.0, causing a build failure:

  'SWIG_Python_str_AsChar' was not declared in this scope

The SWIG_Python_str_AsChar function was removed in SWIG 4.2.0 and
replaced by SWIG_PyUnicode_AsUTF8AndSize. znc's codegen.pl used
`#ifdef SWIG_NULLPTR` as a proxy for version detection, but SWIG 4.4
removed SWIG_NULLPTR, so the old code path (which references the
removed function) was selected again.

This backports the upstream fix from
znc/znc@49af1c8
which generates a swig_version.h header by parsing `swig -version`
output, and replaces the SWIG_NULLPTR check with a proper
`SWIG_VERSION >= 0x040200` comparison.

See also znc/znc#1979.

Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Perl 5.42.1 changes the shared library name from msys-perl5_40.dll to
msys-perl5_42.dll. All packages that contain compiled XS modules or
link against libperl at build time need to be rebuilt so their binaries
pick up the new library.

The package list was derived from the previous rebuild commit
3ae3cd5 ("perl rebuilds", 2025-08-20) which accompanied the
5.38.4-to-5.40.3 upgrade, with one addition: perl-PadWalker, which was
introduced after that commit and builds a compiled XS module (its
PKGBUILD lists gcc in makedepends).

Four new packages with a perl runtime dependency were also added since
then (perl-Class-Inspector, perl-File-ShareDir, perl-File-ShareDir-Install,
autoconf2.73) but none of them compile native code against libperl, so
they do not require rebuilds here.

Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@dscho
dscho force-pushed the upgrade-perl-to-v5.42 branch from 357eb10 to 8c008e0 Compare March 30, 2026 20:14
@dscho
dscho marked this pull request as ready for review March 31, 2026 05:36
@dscho

dscho commented Mar 31, 2026

Copy link
Copy Markdown
Contributor Author

Full disclosure: This does not completely pass the tests.

For the record, I have a draft PR open over at dscho#10 trying to address that. Personally, I do not consider this a blocker for this here PR. If anybody has good reasons to make it a blocker, please holler.

@lazka

lazka commented Apr 2, 2026

Copy link
Copy Markdown
Member

very nice, thanks

@lazka
lazka merged commit ed6a381 into msys2:master Apr 2, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants