package XSLoader;
-$VERSION = "0.07";
+$VERSION = "0.10";
#use strict;
my($module) = $_[0];
# work with static linking too
- my $b = "$module\::bootstrap";
- goto &$b if defined &$b;
+ my $boots = "$module\::bootstrap";
+ goto &$boots if defined &$boots;
goto retry unless $module and defined &dl_load_file;
EOT
+print OUT <<'EOT' if $^O eq 'os2';
+
+ # os2 static build can dynaload, but cannot dynaload Perl modules...
+ die 'Dynaloaded Perl modules are not available in this build of Perl' if $OS2::is_static;
+
+EOT
+
print OUT <<'EOT';
my $modpname = join('/',@modparts);
my $modlibname = (caller())[1];
my $bs = $file;
$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;
+ eval { do $bs; };
+ warn "$bs: $@\n" if $@;
+ }
+
goto retry if not -f $file or -s $bs;
my $bootname = "boot_$module";
my $boot_symbol_ref;
+EOT
+
if ($^O eq 'darwin') {
+print OUT <<'EOT';
if ($boot_symbol_ref = dl_find_symbol(0, $bootname)) {
goto boot; #extension library has already been loaded, e.g. darwin
}
+EOT
}
+print OUT <<'EOT';
# Many dynamic extension loading problems will appear to come from
# this section of code: XYZ failed at line 123 of DynaLoader.pm.
# Often these errors are actually occurring in the initialisation
push(@DynaLoader::dl_modules, $module); # record loaded module
boot:
- my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
+ my $xs = dl_install_xsub($boots, $boot_symbol_ref, $file);
# See comment block above
push(@DynaLoader::dl_shared_objects, $file); # record files loaded
=head1 VERSION
-Version 0.07
+Version 0.10
=head1 SYNOPSIS
Previous maintainer was Michael G Schwern <schwern@pobox.com>.
-=head1 COPYRIGHT
+=head1 COPYRIGHT & LICENSE
+
+Copyright (C) 1990-2007 by Larry Wall and others.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.