remove XSLoader and DynaLoader OS specific code on NA OSes
authorDaniel Dragan <bulk88@hotmail.com>
Sat, 31 Oct 2015 10:53:54 +0000 (06:53 -0400)
committerTony Cook <tony@develop-help.com>
Mon, 2 Nov 2015 21:58:18 +0000 (08:58 +1100)
@dl_resolve_using is only used on dld/freemint, and HPUX shlib loader OSes.
Dont create the array and glob on OSes where @dl_resolve_using is ignored.

sub dl_undef_symbols is only implmented on dld and freemint (freemint is
dld under a different name), otherwise it always returns empty list. Dont
call the sub on OSes where we knows it's constant retval. Saves ops+compile
time for sub bootstrap.

dist/XSLoader/XSLoader_pm.PL
ext/DynaLoader/DynaLoader_pm.PL

index 414eaf2..2651596 100644 (file)
@@ -7,10 +7,11 @@ eval { require DynaLoader };
 open OUT, ">XSLoader.pm" or die $!;
 print OUT <<'EOT';
 # Generated from XSLoader.pm.PL (resolved %Config::Config value)
+# This file is unique for every OS
 
 package XSLoader;
 
-$VERSION = "0.20";
+$VERSION = "0.21";
 
 #use strict;
 
@@ -144,12 +145,20 @@ print OUT <<'EOT';
     };
     push(@DynaLoader::dl_librefs,$libref);  # record loaded object
 
+EOT
+my $dlsrc = $Config{dlsrc};
+if ($dlsrc eq 'dl_freemint.xs' || $dlsrc eq 'dl_dld.xs') {
+    print OUT <<'EOT';
     my @unresolved = dl_undef_symbols();
     if (@unresolved) {
         require Carp;
         Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
     }
 
+EOT
+}
+
+print OUT <<'EOT';
     $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do {
         require Carp;
         Carp::croak("Can't find '$bootname' symbol in $file\n");
index 0100ae1..376b03c 100644 (file)
@@ -68,7 +68,7 @@ unlink "DynaLoader.pm" if -f "DynaLoader.pm";
 open OUT, ">DynaLoader.pm" or die $!;
 print OUT <<'EOT';
 
-# Generated from DynaLoader_pm.PL
+# Generated from DynaLoader_pm.PL, this file is unique for every OS
 
 package DynaLoader;
 
@@ -85,7 +85,7 @@ package DynaLoader;
 # Tim.Bunce@ig.co.uk, August 1994
 
 BEGIN {
-    $VERSION = '1.35';
+    $VERSION = '1.36';
 }
 
 EOT
@@ -138,8 +138,9 @@ $Is_VMS    = $^O eq 'VMS';
 <</$^O-eq-VMS>>
 $do_expand = <<$^O-eq-VMS>>1<<|$^O-eq-VMS>>0<</$^O-eq-VMS>>;
 
-@dl_require_symbols = ();       # names of symbols we need
-@dl_resolve_using   = ();       # names of files to link with
+@dl_require_symbols = ();       # names of symbols we need<<$^O-eq-freemint>>
+@dl_resolve_using   = ();       # names of files to link with<</$^O-eq-freemint>><<$^O-eq-hpux>>
+@dl_resolve_using   = ();       # names of files to link with<</$^O-eq-hpux>>
 @dl_library_path    = ();       # path to look for files
 
 #XSLoader.pm may have added elements before we were required
@@ -396,13 +397,13 @@ sub bootstrap {
        croak("Can't load '$file' for module $module: ".dl_error());
 
     push(@dl_librefs,$libref);  # record loaded object
-
+<<$^O-eq-freemint>>
     my @unresolved = dl_undef_symbols();
     if (@unresolved) {
        require Carp;
        Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
     }
-
+<</$^O-eq-freemint>>
     $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
          croak("Can't find '$bootname' symbol in $file\n");