Control: tag -1 confirmed upstream On Sun, Aug 28, 2022 at 01:41:48PM +0200, Samuel Thibault wrote: > Package: perl > Version: 5.34.0-5 > Severity: important
> perl currently FTBFS on hurd-i386: > # Error: Can't load '../../lib/auto/NDBM_File/NDBM_File.so' for module > NDBM_File: ../../lib/auto/NDBM_File/NDBM_File.so: undefined symbol: > dbm_nextkey at ../../lib/XSLoader.pm line 93. > # at ../../lib/NDBM_File.pm line 12. > Notably on hurd there aren't the "harmless" messages about -ldbm ; it's > supposed to use -lgdbm_compat, as hinted from hints/linux.pl, sourced > from hints/gnu.pl, but for some reason this isn't working any more? I think this broke with https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/pull/367 but nobody noticed until now. All the hints files used to get loaded with 'do', which limits scope so that local variables ("my $var") aren't visible. The $self hash that the hints usually modify was a local variable ("our $self") to overcome this. The commit above changed the normal loading to use 'eval', which removed the visibility problem, and changed the $self variable to a local variable, presumably to make things cleaner now that it was possible. Unfortunately hints/gnu.pl is still loading linux.pl with 'do', so $self isn't visible anymore and the resulting hints have no effect. A simple 'grep -w do' indicates there's a dozen affected files with the same pattern (and a couple of false positives removed manually): ext/NDBM_File/hints/gnu.pl ext/NDBM_File/hints/gnukfreebsd.pl ext/NDBM_File/hints/gnuknetbsd.pl ext/ODBM_File/hints/gnu.pl ext/ODBM_File/hints/gnukfreebsd.pl ext/ODBM_File/hints/gnuknetbsd.pl ext/POSIX/hints/gnukfreebsd.pl ext/POSIX/hints/gnuknetbsd.pl ext/DynaLoader/hints/gnukfreebsd.pl ext/DynaLoader/hints/gnuknetbsd.pl dist/Storable/hints/gnukfreebsd.pl dist/Storable/hints/gnuknetbsd.pl Something like this works but seems rather wordy and silly to repeat in all of those: ------------------------------------------------------ my $hint_file = 'hints/linux.pl'; open(my $fh, '<', $hint_file) or die "Could not open $hint_file for read: $!"; eval join('', <$fh>); die "Failed to load hint file $hint_file: $@" if $@; ------------------------------------------------------ Guess I'll sleep on this and try to come up with something better. -- Niko