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

Reply via email to