In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/907196b2ca1c36611c32cb89c75e791391979005?hp=7d2d29f684a62da1d3ce84a1267842d35219a6d8>
- Log ----------------------------------------------------------------- commit 907196b2ca1c36611c32cb89c75e791391979005 Author: Craig A. Berry <[email protected]> Date: Sat Feb 13 16:29:14 2016 -0600 DynaLoader shouldn't use mod2fname when finding .bs files. Some platforms (probably only VMS and Android at the moment) take special steps via the function DynaLoader::mod2fname to construct a dynamic library name that will be unique and (if too long) truncated. Then DynaLoader looks for a bootstrap file with the exact same name as the dynamic library except with a .bs file extension. However, ExtUtils::MakeMaker has never produced bootstrap files that have been run through mod2fname, so while a Foo:Bar extension would produce a loadable library named PL__Foo_Bar.exe, the bootstrap would be called Bar.bs. That shouldn't be a problem since the bootstrap file is just Perl code read by Perl, but DynaLoader has (apparently forever) been looking for PL__Foo_Bar.bs and not finding it. So let's look for it by the name under which it actually exists. There are no core extensions that produce non-empty bootstrap files and no existing test coverage, but as-yet-unintegrated versions of MakeMaker do have such tests. See, for example, https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/commit/7f5e9a35addeea7ebfcded28277c85f723e1a5de ----------------------------------------------------------------------- Summary of changes: ext/DynaLoader/DynaLoader_pm.PL | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ext/DynaLoader/DynaLoader_pm.PL b/ext/DynaLoader/DynaLoader_pm.PL index c2e860b..e828f35 100644 --- a/ext/DynaLoader/DynaLoader_pm.PL +++ b/ext/DynaLoader/DynaLoader_pm.PL @@ -85,7 +85,7 @@ package DynaLoader; # [email protected], August 1994 BEGIN { - $VERSION = '1.37'; + $VERSION = '1.38'; } EOT @@ -319,6 +319,7 @@ sub bootstrap { <</$^O-eq-os2>> my @modparts = split(/::/,$module); my $modfname = $modparts[-1]; + my $modfname_orig = $modfname; # For .bs file search # Some systems have restrictions on files names for DLL's etc. # mod2fname returns appropriate file base name (typically truncated) @@ -338,9 +339,10 @@ sub bootstrap { "(auto/$modpname/$modfname.$dl_dlext)\n" if $dl_debug; + my $dir; foreach (@INC) { <<$^O-eq-VMS>>chop($_ = VMS::Filespec::unixpath($_));<</$^O-eq-VMS>> - my $dir = "$_/auto/$modpname"; + $dir = "$_/auto/$modpname"; next unless -d $dir; # skip over uninteresting directories @@ -365,7 +367,9 @@ sub bootstrap { # Execute optional '.bootstrap' perl script for this module. # The .bs file can be used to configure @dl_resolve_using etc to # match the needs of the individual module on this architecture. - my $bs = $file; + # N.B. The .bs file does not following the naming convention used + # by mod2fname. + my $bs = "$dir/$modfname_orig"; $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library if (-s $bs) { # only read file if it's not empty print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug; -- Perl5 Master Repository
