package XSLoader;
-$VERSION = "0.06";
+$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.06
+Version 0.10
=head1 SYNOPSIS
=head1 DIAGNOSTICS
-=over 4
+=over
-=item Can't find '%s' symbol in %s
+=item C<Can't find '%s' symbol in %s>
B<(F)> The bootstrap symbol could not be found in the extension module.
-=item Can't load '%s' for module %s: %s
+=item C<Can't load '%s' for module %s: %s>
B<(F)> The loading or initialisation of the extension module failed.
The detailed error follows.
-=item Undefined symbols present after loading %s: %s
+=item C<Undefined symbols present after loading %s: %s>
B<(W)> As the message says, some symbols stay undefined although the
extension module was correctly loaded and initialised. The list of undefined
symbols follows.
-=item XSLoader::load('Your::Module', $Your::Module::VERSION)
+=item C<XSLoader::load('Your::Module', $Your::Module::VERSION)>
B<(F)> You tried to invoke C<load()> without any argument. You must supply
a module name, and optionally its version.
Ilya Zakharevich originally extracted C<XSLoader> from C<DynaLoader>.
CPAN version is currently maintained by SE<eacute>bastien Aperghis-Tramoni
-E<lt>sebastien@aperghis.netE<gt>
+E<lt>sebastien@aperghis.netE<gt>.
+
+Previous maintainer was Michael G Schwern <schwern@pobox.com>.
-Previous maintainer was Michael G Schwern <schwern@pobox.com>
+=head1 COPYRIGHT & LICENSE
-=head1 COPYRIGHT
+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.